The thing I love most about great channels using manim, is that i never feel like im watching a 3B1B rip-off, just an intelligent explanation of a topic. Keep up the amazing videos
@looksintolasers3 жыл бұрын
TIL that manim is a thing.
@YoTengoUnLCD3 жыл бұрын
I feel there are some channels that definitely feel like a rip-off, like vcubingx. It kinda hurts to see a 3b1b-ish thing with lackluster explanations and general quality. This channels pretty good though, and it’s improving noticeably.
@williamrutherford5532 жыл бұрын
Eh I don't know, they do feel a bit samey. The way things are shown and animated is pretty consistent, I think the biggest thing differentiating them from being a ripoff is their specific style. For example, 3B1B uses the little Pi characters to add more personality, I think that just shows even if they use manim there are ways to differentiate yourself in other ways.
@hetsmiecht10294 жыл бұрын
This is how I explore caves in Minecraft.
@abhishek.rathore4 жыл бұрын
I had the exact same idea. Lol ;)
@zuhairmehdee4 жыл бұрын
This is a surprisingly intuitive comparison. Thanks a lot. +
@ElektrykFlaaj4 жыл бұрын
except caves in minecraft often have no dead end
@abhishek.rathore4 жыл бұрын
@@ElektrykFlaaj yeah and they often loop back too
@ironlegnebula3 жыл бұрын
+1 best system, would recommend
@ejejej92004 жыл бұрын
This is the best video on this! I love this channel, it is going to become really popular! Thank you! Love the animations. And the design.
@Reducible4 жыл бұрын
Thanks for the kind comment!
@hanshima_2 жыл бұрын
One thing that I love about this channel is that, because the quality is so huge, all the comments will start praising the video but also adding new information and providing constructive feedback. I think that people feel compelled to give some retribution after watching such a great video for free.
@harshnjАй бұрын
"Intiution", "come up on your own", "invent yourself", these 3b1b words are just magical
@ferrisstreamsstuff3 жыл бұрын
great video! I'll also point out (as a few others have hinted) that the iterative approach is very important for large graphs. Default stack sizes on modern OS' are still typically quite small, and it's easy to construct pathological graphs which will cause a stack overflow with a recursive DFS implementation. Using an explicit (and heap-allocated) stack as in the iterative approach works around this (until the machine runs out of memory, of course!), and is a crucial reason why this approach is often chosen.
@marioivanovivanov42482 жыл бұрын
Hi can u please tell me more about this? For example how is it possibile to construct a "pathological" graph. i'm assuming that a pathological graph is a graph whose nodes are linked in such a way that when the DFS algorithm is called on the graph, it goes into an infinite recursive loop that overflows the stack.
@SirFancyPantsMcee29 күн бұрын
best explanation. I have spent a long time trying to learn this. Your visualization has made a HUGE difference.
@mikumikuareka2 жыл бұрын
By the way, a very interesting point is that you can convert any recursive function into a stack + while len(stack) > 0 loop because basically that's exactly how computers do that on a low level anyway. In some languages it has some advantages, because while function call stack may be limited, a stack as a structure is practically unlimited, and that lets us achieve very deep levels of recursion without stumbling into stack overflow.
@thefamousdjx Жыл бұрын
Wow thanks this made me dig deeper and understand even better.
@Saurabh13694 жыл бұрын
i can feel your effort man, the planning, research, animation, music.. I'm glad i came across this channel.... you gonna get huge success..
@aspiretechie11913 ай бұрын
Reducible can able to reduce the complexity of any topic... Hats Off
@fulgren09652 жыл бұрын
The presentation of how to use a stack and pop together was really interesting. I always had trouble with while loops, this pattern makes it so apparent when it is best used.
@alex0917lfo4 жыл бұрын
The video is great, as always. However, I have a suggestion: maybe at the end of the video, you can ask some graph questions and let us think how to slove, and finally, you can give the java or python code and the step of it. (just like your recursion video because your recursion video is absolutely amazing.)
@Reducible4 жыл бұрын
Thank for the feedback, will try to incorporate more problems in future videos.
@davidshipman59644 ай бұрын
I appreciate that you included the iterative approach to solving DFS using a stack. I am preparing for coding interviews, and I read that a candidate was asked to solve a graph problem at Google, and he used DFS. When the interviewer asked how he could solve the problem using a stack, he was completely stumped because he didn't know about that approach. Thanks for this!
@harrydawitch5 ай бұрын
The only channel that walkthrough the code and explain the concept in detail. Not every youtube channel do this.
@hayk.galstyan Жыл бұрын
This was a great video, explaining not only DFS, but both recursive and iterative versions of it, and presenting applications for DFS, all accompanied by illustrations to make it even more clear. Cant thank you enough!
@irina1nik3 жыл бұрын
Your content is incredibly good. It's not only comprehensive and to the point, but also enjoyable. Thank you for all the effort you are putting in.
@MD.MamunUrRashidHridoy8 ай бұрын
The way we designed the animation and the calmness of your voice in the time of explanation and the depth of your discussion just blow my mind. May Almighty Bless You💝
@aminforoutan60653 жыл бұрын
absolutely the best explanation on DFS that I have encountered. Please make more videos on graph theory and algorithms.
@raunakmitra78683 жыл бұрын
2:22 is an example of the classic Cycle Detection algorithm where DFS is used to detect any cycle in a graph G. Child node 2 has a "back-edge" that connects it with the root node 0. This is basically a cycle in the graph.
@vijaykumarreddyalavala37134 жыл бұрын
I'm proud for being among the first 1000 subs while I know this channel will explode subs count to millions very soon
@ejejej92004 жыл бұрын
Me too! This channel is going to be huge!
@curbyourshi10564 жыл бұрын
It's absolutely happening. Pleased to be part of the blow up.
@haitu88962 жыл бұрын
I really love your explanation, it's short, concise, easy to understand, straight to the point. I watched many another's videos, they were lengthy and hard to understand.
@conall54343 жыл бұрын
You deserve so many more subs. This content is so well explained. Fantastic channel!
@TomBenBel4 жыл бұрын
Beautifully animated video, though forgive me if I don't like this way of introducing DFS. The main problem is that most of the applications could just as well be solved without DFS: Cycle Detection: DFS does not give you all cycles in the way you described, and just determining whether a graph contains cycles can be done by BFS or similar also. Finding Connected Components: Any Traversal technique will do nicely. Topological Sort: Take Kahn's algorithm. The idea there is your reasoning at 18:37, but translated more directly into an algorithm. Maze: There are several ways to create a maze, but granted this one is elegant :) This sometimes leaves students wondering whether DFS is just a bad alternative to BFS for the path finding problem. It is not! Of course some applications are harder to explain in a video, but here is a surprisingly useful application somewhat related to your examples: Partitioning a directed graph into strongly connected components (SCCs, Sets of nodes where you can reach every node from every other node). This is useful in e.g. model checking, where you want to proove the correctness of a program, which can be reduces to finding an SCC with a special marking and a loop. Checking whether an SCC has a loop and is marked is usually trivial (loop at least two nodes in the SCC or a reflective edge). Or you might want to replace SCCs with single nodes, yielding a DAG. This e.g. extends many planning algorithms to handle circular dependencies (exactly the SCCs with several nodes). Basic idea without any proofs: Every SCC is represented by the node within it first encountered during DFS. Start by assuming every node is its own SCC and start the DFS. If you keep a hashset of all the nodes currently on the stack (or mark nodes as on the stack), you can efficiently determine whether a node was encountered twice along a path. If that happens, you found a loop and can merge all SCCs on the stack from the first encounter to the second. An SCC is guaranteed to no longer grow once DFS leaves it (through the node representing it, which you can detect). At that point, note the SCC down. Side node: Like in your example, the SCCs outputted this way are topologically sorted. Sadly, most students never get to learn these more useful applications of DFS, but hey, thats why I'm writing long comments :) Thanks for reading!
@ron37993 жыл бұрын
wait, this is really useful info. thank you for taking the time to write this all !
@tanvitanvi42353 жыл бұрын
This is the first time I'm posting a comment for a video, simply because I don't really bother to. But this is something. This is that good! Sooooo good! Concise and yet complete. Simply brilliant!
@sdk-yourfriend15612 жыл бұрын
Great video, great teaching, and great animation used here to make things understandable by going into a deeper level of abstraction of all the steps and processes. Before this video, I watched 4-5 videos on DFS that appeared on top after searching and had more views (even in millions) but couldn't understand them clearly. After all, this is the ultimate video that quenched my thirst. Thank you sir for your great content. This channel should grow more and more fast.
@Yang2j72 жыл бұрын
Literally just learned about this in class today and it popped up in my recommendation. KZbin algorithm is getting insane.
@inishkohli273 Жыл бұрын
I rarely comment on KZbin but I must say you are the exact version of KZbinr and tutor I am dreaming to be..Before reading the solution and algorithm, we must understand why it was created , what was the intuition behind it... and second thing I loved is bg music..
@dorian06233 жыл бұрын
Well structured, easy to follow, beautiful graphics, use of video chapters and real world use cases included. What can I expect more? Superb video.
@bonietdube28 күн бұрын
4:58 Thank you for simplifying the DFS order
@zamoqi9 ай бұрын
Your videos make the difficult concepts so easy to grasp!
@StellahRotich2 жыл бұрын
Thank you for making DFS and BFS understandable. Simple and on point
@redtree732 Жыл бұрын
Okay, I'm 5 minutes in but I had to comment. This is, hands down, the best explanation of DFS I've ever encountered. Thank you so much for this phenomenal video - I hope you keep it up!
@henrythai20203 жыл бұрын
This is the best way to explain recursive functions to newbies like me. Thank you so much for such great contents.
@navneet50843 жыл бұрын
The best CS channel to understand graphs hands down! THANK YOU Reducible!! You are just awesome!
@EmadGohari3 жыл бұрын
I love 3B1B videos and now these are my favorite too. Thanks for all the effort and excellent explanations!
@vaibhavsomani26902 жыл бұрын
Thanks for that soft music in background, really helped boosting focus while watching this video. Great explanation as well. Thank you.
@Latesttechs3 жыл бұрын
Amazing video I have already done my bachelors in CS and have seen various videos explaining various Algos but your approach is simple, intuitive and precise among all others please keep it up!
@wolfy_pride Жыл бұрын
Amazing!!! Please do this for all concepts of DSA. You are a rare gem!!!
@liyre4189Ай бұрын
I like the sombre music, reflects how I'm feeling about my midterm tomorrrow
@hemantmangwani71724 жыл бұрын
Great Content Man and that Recursion video is Awsome . Keep Making more videos.
@TheAmberZhang2 жыл бұрын
Best video so far I found on DFS algorithm. Very clear explanation. Thank you very much!
@montehatch3 жыл бұрын
These videos are gold. They go into much more depth than their peers, with expanded intuition, alternatives, and application. Well done sir! P.S. the animation is also top notch.
@waseemballoul56043 жыл бұрын
Finally I found the best channel That's amazing I wish to support you more ...
@kensword4 жыл бұрын
looking forward to BFS too! Thank you for posting!
@vedhasbalaji76483 жыл бұрын
This and 3b1b are the best channels that I've seen on my 10 years on KZbin.
@phantom51013 жыл бұрын
But your channel was made two years ago... exposed XDDD
@rapidlapse2 жыл бұрын
Learnt 2 neat things about Graph algo from this video: - Reverse of DFS post-order is the same as topologically sorted graph - DFS can be used to generate maze. I always thought some dude spent hours to design mazes in the print newspapers. You are telling me it was just a DFS 😂
@KodySimpson2 жыл бұрын
This is the best video ive ever seen in my life
@abanerjee37043 жыл бұрын
I couldn't help myself but comment how beautifully the content has been delivered..... Kudos to u guys, love and appreciation from India🤘🤘
@ShivTattva-j6m2 жыл бұрын
Best Explained !!!!! Thanks from India 🇮🇳!!!!!
@joelngige57762 ай бұрын
Great explanation of intuition behind graphs!!!
@avinashmbhat4256 Жыл бұрын
Really amazing video 🙌🙌
@moosegoose12823 жыл бұрын
this is probably the best explaination ive came across
@goldenlin95283 жыл бұрын
great animations, video, and i love the last part where u mentioned the applications
@goat-76582 жыл бұрын
It should be noted that outside of interpreted VM-based languages like Python, the manual stack-based algorithm is actually a necessity, since stack space, especially on the main thread, is scarce in unmanaged languages. Using the heap (std::vector in C++, Vec in Rust) to store the recursion stack is the only way to infallibly avoid stack overflows with graphs of untrusted size and deep call stacks on many OSes, which will hardly ever allocate more than 8 MB, or sometimes merely 1 MB, of space for the stack of the main thread.
@Oscar-vs5yw2 жыл бұрын
This seems like a very useful algorithm to know, I feel like I can already see some applications of it
@fredericoamigo2 ай бұрын
This is absolutely brilliant! Just what I needed! Thank you so much for this! Keep ut the excellent work!
@tejasnakhate3 жыл бұрын
I wish this videos came earlier.....great content man!
@alirazi91983 жыл бұрын
Best channel on the youtube and still getting less than a million views such a shame
@aakankshaagrawal2233 жыл бұрын
JUST WAITING FOR THIS WONDERFUL WONDERFUL GEM OF A CHANNEL TO EXPLODE. THANKYOU THIS IS AMZING
@shwetamishra35914 жыл бұрын
It's really amazing... your contents and way of explanation everything is awesome... keep it up...
@elifsuates4151 Жыл бұрын
Perfect explanation. It is may 5th video and just understood everything thanks to you. Great.
@makhdoom652 жыл бұрын
Amazing explanation. My teacher did the same but you explained it way more easier.
@ravitiwari16863 жыл бұрын
Great Effort there! Appreciate the time you took to fork Manim and manage it so well for all of us. Regarding the algo in preview, at 8:20, where you mention to maintain boolean values of marked nodes, it should be of size/length - G.order() rather G.size(). For a graph, order = number of vertices = |V| while size = number of edges = |E|. This could cause problems if we have a straight line graph with n nodes connected by (n-1) edges!
@nadiakruger42062 жыл бұрын
So happy I found this channel and this video! It was really, really helpful.
@crjacinro3 жыл бұрын
why this video only has 49k views? THIS CONTENT IS AMAZING!
@bhiep31854 жыл бұрын
Your channel is amazing! How you don't have hundreds of thousands of subscribers is beyond me. Please keep up the good work!
@Reducible4 жыл бұрын
Thank you! Hopefully we get there in the future :)
@sivsivsree4 жыл бұрын
@@Reducible you will
@shahidahmads3 жыл бұрын
probably the best explanation of DFS I have ever come across! thank you! :)
@flamess0072 жыл бұрын
I really love how you explain and the music, I really love this yt channel thank you so much
@OmarHany-g8n5 ай бұрын
Какой у вас талант, вы находите такие связки командой? это очень серьезный труд, спасибо вам. Дай Бог Вам Здоровья!
@ferroumsamir6531 Жыл бұрын
you do great job. you deserve more appreciation, and you will have it.
@Pogoda4505 ай бұрын
The best explanations on youtube!
@bivashchakraborty65182 жыл бұрын
Thank you so much!!! Much love from India.
@ishankhan39127 ай бұрын
The best explanation!!This guy is a gem
@nerodant85 Жыл бұрын
I really love your format, great work, subbed right away
@Jacob0113 жыл бұрын
Great explanation. FYI: you can just "while stack:" instead of "while len(stack)>0:" The empty stack is falsy (evaluated as false when used in a conditional).
@michalpitr44743 жыл бұрын
I believe this was a pedantic choice to keep the code as pseudocody as possible.
@sonicsplasher2 жыл бұрын
I dont think that works in some programming languages, does it?
@RealCadde2 жыл бұрын
@@sonicsplasher Indeed, for a stack to resolve to Boolean you have to make it have a comparator that can compare it with Boolean. Basically, if (stack == true) at which point it would go into a meta function that checks if (len > 0) then return true else return false So it would be doing the same thing but confuse the hell out of any coders reviewing the code later on. if (stack) could be true if stack isn't a null pointer, or it could be true if the stacks current peek() object returns true or it could be true because the stack has any object to pop. You would essentially have to explain what you did or any reviewer of the code will have to find your special implementation of stack. In any other case, you'd get a syntax error stating you cannot compare Stack to Boolean because they aren't the same type. You would essentially be trying to compare a number (even worse, a pointer) with Boolean. Which is ill defined. len(stack) is much more intuitive. Especially as pseudocode as pseudocode is made to be compatible with basically any programming language.
@juliajeehyunkim3 жыл бұрын
12:18 Does anybody understand this? I wonder why the vertices linked with 0 are going to the stack without following the order. For example, I think after putting 0 on the stack, 1 or 3 should be put if we follow the ascending or descending order (to select the biggest number or the smallest number) but 2 was put in this video. If there is anyone who understand DFS at all, please explain this.. BTW this video is really helpful. Hope this channel be more famous
@AceJSaul3 ай бұрын
He's stacking them in the graph order, from the bottom to the top
@nicholasziglio2 жыл бұрын
Brilliantly explained, so simple and clear. You gained a new subscriber!
@vojtaliska14309 ай бұрын
Thank you, I managed to implement this very easily. I am not a programmer and my itterative approach could only handle branches and cycles.
@alexander1912972 жыл бұрын
By no means am I an expert on graph theory, but I had to write an entire library to handle graphs and graph traversal once. One of the algorithms implementing DFS was the so-called multi-path Dijkstra algorithm. I had issues decoupling the DFS logic from keeping track of the nodes, so I had to rewrite the core DFS to the iterative version. Fun days!
@yuriymelnykov14643 жыл бұрын
Thank you for the amazing video. This is the most understandable explanation I've ever seen. Visualization, narration and music is very good:)
@xsYlarx13 жыл бұрын
Best video ever. Helped me understand the DFS better.
@yeah50372 жыл бұрын
Loved your amazing explanation, thank you!
@rezNezami2 жыл бұрын
Great Video. A correction in dfs_pre() and dfs_post() needed, in Min 17:00. You need to replace recursive call in the for loop, dfs(), with proper pre or post order.
@vaibhavgaur2612 жыл бұрын
good animation easy explanation covered a variety of algos in just 20 min. 👍👍👍
@vibhor30494 жыл бұрын
Brilliant video. Those animations really helped to understand the whole process. Thanks!
@leozheng3703 жыл бұрын
I guess It takes a lot of efforts to make this video. Well done! The details are handled well. e.g. same nodes added to the stack multiple times but only processed once due to the visited check. It is better than the solution in CLRS
@sumitaggarwal94773 жыл бұрын
the animation style is very similar to 3 blue 1 brown awesome content
@dantecavallin82294 жыл бұрын
I didn't notice the music until 12 minutes in. Perfect background music, it only adds to the viewing experience, without distracting
@charlie3k4 жыл бұрын
Do you know the song name?
@fernandocelso83326 ай бұрын
What an incredible video, thank you for the content, really well explained! 😁
@nirmalparmar9655 Жыл бұрын
Great explanation, it would be awesome if you can create similar videos around Trees (diff trees and usages).
@hasanshovon340210 ай бұрын
best video of DFS for sure
@sher.50272 жыл бұрын
I liked and subscribed. awesome explanation. Good visualization and best animation. Keep the good work.
@rabiaaghafoor11 ай бұрын
please keep make more videos on data structures and algorithms - particularly the BST, AVL Trees 2-3-4 Trees
@DEEPAKKUMAR-wk5pk3 жыл бұрын
great explaining video for Graph Thnaks
@sohanurrahmankhan7752 Жыл бұрын
best of the best buddy!
@IELTS_with_Sahar Жыл бұрын
The mooooost perfect tutorial video eveeeer
@nitinkulkarni79423 жыл бұрын
This is simply an amazing explanation
@anbesivamkamal4 жыл бұрын
Simple and Clear:) Thanks for the amazing videos!
@mandisaplaylist2 жыл бұрын
11:50 Here is a better version of the iterative algorithm: marked = [False] * G.size() stack = [v] marked[v] = True while len(stack)>0: v = stack.pop() visit(v) for w in G.neighbors(v): if not marked[w]: stack.append(w) marked[w]=True The difference is that the vertex is marked as soon as it is placed onto the stack and only unmarked vertices are ever added to the stack (and immediately marked). It still is visited when removed from the stack though. This has the advantage that a vertex is never placed onto the stack more than once, which can be a problem for some graphs (especially if there are lots of edges for example in a complete graph - the stack could expand significantly on those with duplicated entries of the vertices) .
@mandisaplaylist2 жыл бұрын
14:50 The iterative approach is also used when the search needs to be aborted or when the program needs to gracefully handle situations when the graph is too deep to be processed successfully (the recursive approach will crash or behave abnormally in this case and it is not so straightforward how to avoid that while it is easy to break out of the single loop in the iterative version).
@mandisaplaylist2 жыл бұрын
Also with this version you will get "breadth first order" by just moving the visit(v) command next to the marked[w]=True lines.
@mandisaplaylist2 жыл бұрын
Another bug here is that the recursive version of the algorithm in your video will only visit all the vertices on the very first call. On every successive call it will only visit the first vertex. This is because you are not clearing the "marked" array before the traversal start. This can be easily fixed by simply placing everything into a procedure, which creates the array filled with False and then runs the recursive subprocedure that uses the array. Once the algorithm is completed, the "marked" array is discarded.
@jrub33144 жыл бұрын
You get a new suscriber! Amazing videos and explanations! Really really very good!