Komentáře •

  • @anhmai81
    @anhmai81 Před 2 měsíci +10

    this is way better than a 2-hour lecture from a CS professor with multiple PhD's explanation. Thank God I found your video.

  • @iyadelwy1500
    @iyadelwy1500 Před 3 lety +84

    An explanation with the help of a good example > A CS professor with 2 PHD's explaining it in sheer theory

  • @nmamano
    @nmamano Před 4 lety +176

    4:55 It is pretty clear, but if anyone is wondering, "graph[at]" shuld be "g[at]" in the DFS pseudo-code. Great video!

    • @iSuperMC
      @iSuperMC Před 2 lety +3

      Thank you, I was wondering what that was

    • @hasnaindev
      @hasnaindev Před 2 lety +1

      What's the difference? g[at] seems more confusing to me as the letter "g" does not really mean anything and one has to think about what it is whereas "graph" clearly conveys what the variable is about.

    • @nmamano
      @nmamano Před 2 lety +11

      @@hasnaindev the point is that the variable g is defined earlier in the video, whereas graph was not defined as a variable

    • @hasnaindev
      @hasnaindev Před 2 lety

      @@nmamano Ooh.

    • @mathc
      @mathc Před rokem +1

      it wasn't pretty clear for me, thanks

  • @J235304204
    @J235304204 Před 5 lety +109

    The best explanation a developer could ever ask for. You have cut out all the possible crap and got to the point.

  • @karthikrangaraju9421
    @karthikrangaraju9421 Před 4 lety +38

    So basically Google's notorious "Number of islands" problem is basic graph theory == Finding connected components using DFS! Thank you William

    • @protyaybanerjee5051
      @protyaybanerjee5051 Před 3 lety +2

      Finding 'disconnected components' . That's the number of island

  • @luisfelipe847
    @luisfelipe847 Před 3 lety +11

    That's such a great video! I loved the minimalist visual and explanation!

  • @roman_mf
    @roman_mf Před 2 lety

    So happy I found your channel. Thanks for your efforts and quality content. Short, to the point, and the animation done just right. :-)

  • @sandeepkryadav1469
    @sandeepkryadav1469 Před 3 lety

    Thank you very much for such an amazing video series, the content of the video is so organized that whenever I think of some scenario that scenarios explanation comes to next. Amazing :)

  • @colegartner3339
    @colegartner3339 Před 2 lety +2

    Thank god for this man, the best explanation with visuals a comp sci major could ask for.

  • @TechItEasy0
    @TechItEasy0 Před 4 lety

    These videos are awesome so far... will watch them through, undoubtedly multiple times!

  • @miriyalajeevankumar5449
    @miriyalajeevankumar5449 Před 3 lety +5

    You are the best in the entire youtube for Algo and DS!

  • @wanqingli1254
    @wanqingli1254 Před 7 měsíci

    this visualization is so clear and william is so good at explaining omg, thx for saving my algo exam

  • @iacobibrasiliensium2139

    Thank you sir, your explanations are always very clean and simple

  • @VarunVishwakarma1
    @VarunVishwakarma1 Před rokem +1

    I was scared of graph and you made it so easy.Thanks a lot.

  • @selvalooks
    @selvalooks Před 3 lety

    Made it easy to understand and also the listing use cases, great !!! Thanks !!!

  • @vigneshsr1118
    @vigneshsr1118 Před 3 lety

    bought the course, thanks for all the help.

  • @iamakifislam
    @iamakifislam Před 3 lety

    You made my concept crystal clear. :) Thanks

  • @kamalulazmim3820
    @kamalulazmim3820 Před 3 lety

    Very clear, thank you so much!

  • @rodituclashroyale1812

    You can reverse the order of calling the neighbours in this implementation, so the output will the same as You would use stack dfs algorithm - the one that uses stack instead of recursion. Because if You add neighbours to the stack the last one will be called first since it will be popped first.

  • @isaacnewman9341
    @isaacnewman9341 Před 2 lety +1

    I understand the visual example for DFS, but I struggle with understanding the pseudo code. However, this is a great video!

  • @samtux762
    @samtux762 Před 5 lety

    Great video once again.

  • @KAINOA104
    @KAINOA104 Před 3 lety

    Very helpful, thank you!

  • @delyart
    @delyart Před rokem

    Awesome explanation. Thanks.

  • @myhimalayanchants
    @myhimalayanchants Před 3 lety

    Excellent Clarity

  • @JamesBrodski
    @JamesBrodski Před 2 lety

    Great video. Thank you so much.

  • @saulr.4481
    @saulr.4481 Před 2 lety

    Great explanation!

  • @ElAntroDeDager
    @ElAntroDeDager Před 3 lety

    Great job, TY!

  • @josephhigh250
    @josephhigh250 Před 3 lety +2

    In your first example, you forgot to cover the subsequent call to DFS to explore the other component that contains exactly one node (e.g., node 12).

  • @anjaliyadav9360
    @anjaliyadav9360 Před rokem

    Best Explanation ever!

  • @javiersorucolopez1502
    @javiersorucolopez1502 Před 3 lety

    Amazing video!

  • @enriquelmx
    @enriquelmx Před 4 lety

    Can you visit all the neighbors of 7 in any direction no matter the order (preorder, inorder, postorder)? or that only applies to trees?

  • @MrDayTwo
    @MrDayTwo Před 2 lety

    Waaaay better than leetcode explanation. Thanx!

  • @highinstitute2366
    @highinstitute2366 Před 6 měsíci

    i love your channel, thanks soo much for these good videos🥰

  • @gokulkurup1584
    @gokulkurup1584 Před 2 lety +2

    great video. jutst a gotacha for future learners, the dfs findComponents algo only works well for undirected graphs and will give weird results with directed graphs.
    ex. in directed graphs if you take the picture 7:25 the for loop first sees node#2. however there is no path from 2 to 3 even tho they are in the same component. so instead of the answer which is 5 you get 6
    Excellent video tho and thanks for the explanation

    • @jshiwam
      @jshiwam Před 2 lety

      I think you confuse reachability with connectedness. Two nodes can be connected but unreachable in directed graph. In order to ensure the connected components you need to loop over each node and see if a path exists which connects all the components and there can be a scenario where nodes would be connected but you wont have a path. In order to know the graph is connected or not, it need to be undirected.

  • @christianrodier3381
    @christianrodier3381 Před 4 lety +1

    That you for using that visual aid.

  • @AmanYadav-ry3xr
    @AmanYadav-ry3xr Před 3 lety

    It will give 6 not 5 as the answer because in for loop we visit each node from 0 to n so when i=2 it will visit all the neighbours of 2 but not 3 because there is no outgoing edge to 3.so when i=3 it will also count it as a individual node.
    And hence the number of connected components would be 6 not 5.
    Correct me if i am wrong.

  • @yagzgazibaba857
    @yagzgazibaba857 Před 8 měsíci

    If the graph is cyclic one then inside dfs method you also need to check if current node visited or not

  • @frgaming6711
    @frgaming6711 Před 4 lety +1

    Thank you Sir

  • @briannguyen5057
    @briannguyen5057 Před 3 lety

    very helpful!

  • @rajatbudania6181
    @rajatbudania6181 Před 4 lety

    very well explained )--

  • @senthilmuruganr234
    @senthilmuruganr234 Před 3 lety

    Excellent

  • @slavinastefanova4479
    @slavinastefanova4479 Před 4 lety +4

    In the pseudo-code for DFS, the variable g is initialized to be the adjacency list representing the graph. However, in the dfs function, this variable is called "graph". Or am I missing something? Also, n is initialized to be |V| but this variable is then never actually used, other than implicitly to initialize the "visited" list of booleans.

  • @ilikememes9052
    @ilikememes9052 Před 3 lety

    Is this Graph series helpful for competitive programming??

  • @sambitdash4163
    @sambitdash4163 Před 4 lety

    Just to clarify this is the python code I wrote using the graph example given in video. Is it okay?
    g = {0:[1,9],9:[0,8],1:[0,8],8:[1,9,7],7:[8,10,3],10:[7,11],11:[7,10],6:[5,7],5:[6,3],3:[2,4,5],2:[3],4:[3]}
    n = 12
    visited = n*[False]
    def dfs(at):
    at = at[0]
    if visited[at]: return
    visited[at] = True


    neighbours = g[at]
    for nex in neighbours:
    dfs([nex])
    start_node = g[0]
    dfs(start_node)

  • @klevisimeri607
    @klevisimeri607 Před rokem

    Thank you!

  • @JR-mk6ow
    @JR-mk6ow Před 4 lety +10

    "the nice thing about dfs is that is really easy to code".
    THE AMOUNT OF ITERATORS, POINTERS AND VECTORS INSIDE THE GRAPH, VERTEX AND EDGE CLASS SAY OTHERWISE!!
    Sometimes I really hate c++

  • @shanthureddy4234
    @shanthureddy4234 Před 5 lety +1

    8:52 ??
    Count++ ; // should be implemented later after implementing the DFS( i) ; right ?

    • @WilliamFiset-videos
      @WilliamFiset-videos Před 5 lety +2

      It shouldn't matter. The idea is to give every component a unique id at the end of the day. However, labeling components starting at 1 instead of 0 is handy for debugging because by default the 'components' array has all values initialized to 0 so it's hard to tell whether a node was marked by the DFS method or simply initialized that way.

    • @shanthureddy4234
      @shanthureddy4234 Před 5 lety

      @@WilliamFiset-videos cool , gotcha, thanks man !!

  • @MrMacAwsome
    @MrMacAwsome Před 6 lety

    If I wanted to find the number of paths between two nodes in a DAG, would I use a DFS or BFS? Nice video, thanks.

    • @WilliamFiset-videos
      @WilliamFiset-videos Před 6 lety +1

      Probably a BFS with some DP? I haven't solved it yet but you might want to try: open.kattis.com/problems/walkforest

    • @MrMacAwsome
      @MrMacAwsome Před 6 lety

      WilliamFiset thanks

  • @tomaskosta
    @tomaskosta Před 4 lety

    in the beginning you explain that after the first traversal the dfs is over but you didn't visit the #12 node, dfs beside of coloring from white to gray to black also uses a counter to mark in each node when was that node firs found and when did the algorithm leave the node, you finished the traversal on the big graph but dfs start another traversal , you should have visit 12 also and mark it as a second component of the graph meaning the number of nils in the graph is 2

    • @WilliamFiset-videos
      @WilliamFiset-videos Před 4 lety +3

      The animation doesn't visit node 12 because it's trivial, but for completeness sake it should. When I said the dfs was finished I was referring to the large component.

  • @anhmai81
    @anhmai81 Před 2 měsíci

    Thanks!

  • @DT-ro9et
    @DT-ro9et Před 4 lety

    You are awesome!!!

  • @amoghdadhich9318
    @amoghdadhich9318 Před rokem

    Hey are you sure DFS can be used to find the minimum spanning tree? Pretty sure that it wont give a linear time solution. Prims or Kruskals will probably be better suited for this

  • @chieesntra
    @chieesntra Před 2 lety

    thank you!

  • @poli2730
    @poli2730 Před 2 lety

    visitad[at], obviusly everybody miss the part on how to associate the node with his corresponding visited value... probably because nobody knows

  • @utilizator500
    @utilizator500 Před rokem

    For the pseudo code:
    for next in neighbors should have an additional line below it that goes like this:
    if visited[next] = false
    In Python he did write it correctly though.

    • @spongsquad
      @spongsquad Před rokem +2

      the exclamation mark "!" means the same thing as if visited[next] = false

  • @miguelbarajas9892
    @miguelbarajas9892 Před 2 lety

    thank you, now to find those islands 🏝 🏝 🏝

  • @lindsaymahusay9769
    @lindsaymahusay9769 Před 2 měsíci

    can someone help me how to write a complete code for this? using c language

  • @dumm005
    @dumm005 Před 4 lety

    DId you slowmo your presentation?

  • @MrKingoverall
    @MrKingoverall Před 3 lety

    I love you man !!!!!!!!

  • @marialaurabisogno9951
    @marialaurabisogno9951 Před 3 lety

    9:24 aren't count and components global?

  • @jeffreycuraming3861
    @jeffreycuraming3861 Před 2 měsíci

    How to create that visual representation?

  • @hessamzadeh1453
    @hessamzadeh1453 Před 3 lety

    can we use this for nba fan duel? what the sharks use

  • @marcftw
    @marcftw Před 3 lety +1

    Where does the backtracking occur in the pseudo code snippet?

    • @zawette
      @zawette Před 2 lety +1

      When you return from a recursive call

  • @iqbalibrahim4713
    @iqbalibrahim4713 Před 6 lety

    Can I ask something, I know you entered icpc, and I really want to get ready when I'm entering it, so can you tell what I need to know about number theories for competitive programming, thank you very much

    • @abdelrahman2348
      @abdelrahman2348 Před 5 lety

      if you got any new or path to study for acm please tell me

  • @videofountain
    @videofountain Před 2 lety

    Why is there no return value in depth first search?

  • @Kingofqueers1
    @Kingofqueers1 Před 5 lety

    What are edges & vertices in computer science?

    • @sharathkumar8422
      @sharathkumar8422 Před 5 lety

      Vertices could be computers, websites or programs. Edges then could be network connections, website links etc etc. I'm not a computer scientist but I do know that edges and vertices can be anything as long as they are connected or linked in some way in a system.

    • @Machinerium
      @Machinerium Před 5 lety

      Think of edges as routes and vertices as cities. Check this awesome playlist about Graph Theory from the beginning czcams.com/play/PLDV1Zeh2NRsDGO4--qE8yH72HFL1Km93P.html

  • @sumant9120
    @sumant9120 Před 3 lety +1

    3:30 Is this a DP implementation?

  • @jackmaxwell7342
    @jackmaxwell7342 Před 3 lety

    No goal node???

  • @louisham6998
    @louisham6998 Před 3 lety

    Why zero doesn't go to node 1

  • @sidekick3rida
    @sidekick3rida Před 2 lety

    3:35 is `neighbours = graph[at]` supposed to be `neighbours = g[at]`?

  • @SuchingYan
    @SuchingYan Před 3 lety

    This is how my brain works

  • @chinaguy101
    @chinaguy101 Před 3 lety

    cool

  • @Sairam30722
    @Sairam30722 Před 3 lety

    3;59 [0, n) not understand

  • @DeadalusX
    @DeadalusX Před 2 lety +2

    Pro tip: set playback speed to 1.5

  • @TheGianaJinx
    @TheGianaJinx Před 2 lety

    This is the least confused I have ever felt hearing about DFS.

  • @IgorSantarek
    @IgorSantarek Před 2 lety

  • @TheGugustar
    @TheGugustar Před 2 lety

    You kinda sound like the guy from Brackeys

  • @svsrkpraveen
    @svsrkpraveen Před 3 lety

    This guy sounds like Brackeys

  • @shashankkumar3138
    @shashankkumar3138 Před 5 lety

    function findComponents():
    invalid syntax is coming sir

  • @bezelyesevenordek
    @bezelyesevenordek Před 2 lety

    what

  • @pcelis19
    @pcelis19 Před 4 lety +1

    even at 2x speed you talk slow, good tut

  • @alanlinto9660
    @alanlinto9660 Před 11 měsíci

    Dude sound like @ penguinz

  • @Ammar23217
    @Ammar23217 Před 2 lety

    not useful. no complete example. many variables not declared. cannot understand.

  • @GodOfReality
    @GodOfReality Před 3 lety

    You randomly switch between saying "dep" "defp" "def" and "defth" when you are trying to say "depth" lol.

  • @samirelzein1095
    @samirelzein1095 Před 2 lety

    dude, use less my imagination, show me, aka 3b1b

  • @bestwishes5553
    @bestwishes5553 Před rokem +1

    siimiii.trii/catholicc'ica'mois'pentaocsiacal/o //nd.D