Depth-first search in 4 minutes

แชร์
ฝัง
  • เผยแพร่เมื่อ 19 ธ.ค. 2024

ความคิดเห็น •

  • @bigchhet
    @bigchhet 2 ปีที่แล้ว +347

    You explained in 4 minutes what my data structures professor failed to do in 1 hour. Thank you!

  • @ahamedshathelegend1409
    @ahamedshathelegend1409 ปีที่แล้ว +42

    My professor was great at teaching DSA but I missed classes due to sickness and various reasons today I have a test I am don't know what I am going to do but thanks to you , your videos are short sweet and minimalistic ❤

  • @WillOfHeaven
    @WillOfHeaven 2 ปีที่แล้ว +12

    I had already seen your search and sorting videos , they were concise and helped me first understanding how it works and figuring out everything else in the process , helped the cogs of my brain move a lot !

  • @darshsingh5037
    @darshsingh5037 ปีที่แล้ว +14

    brother said im going to teach you DFS in 4 min and went on to teach DFS in 4min. kudos

  • @francescoercole5592
    @francescoercole5592 ปีที่แล้ว +2

    Ehy Michael, I only watch your videos because your explanations are clear (many slides) and straight to the point. Thank you

  • @ВиталийЩуров-ш4н
    @ВиталийЩуров-ш4н 2 ปีที่แล้ว +7

    Consice, straight-to-the-point and very easy to understand! Great video!

  • @adamlangevin8888
    @adamlangevin8888 2 ปีที่แล้ว +5

    Just stumbled upon your channel and all your videos are so short yet informative. Thank you!

  • @elinaliu6638
    @elinaliu6638 2 หลายเดือนก่อน

    such an underrated channel, you help me so much in reviewing these algos. thanks!

  • @esmondkim1357
    @esmondkim1357 6 หลายเดือนก่อน

    These videos are so incredibly well done, efficient, and helpful. Thank you!

  • @Jordan-pm6zx
    @Jordan-pm6zx 2 ปีที่แล้ว +1

    Thanks a lot! Currently working on Cracking the code interview and found this. Short and precise enough:D Keep it up man.

  • @RaquelNatali
    @RaquelNatali 2 ปีที่แล้ว +2

    Thanks a lot for the new videos!! Hope you are back definitely!

  • @_benon
    @_benon 2 ปีที่แล้ว +1

    the right video to be free from confusion

  • @antoniooliveira6022
    @antoniooliveira6022 2 ปีที่แล้ว +14

    if you could also explain uniform-cost search, depth-limited, iterative deepening and bidirectional would be amazing ! great vids, learning a lot from you.

  • @abhishekmaurya8330
    @abhishekmaurya8330 2 ปีที่แล้ว +2

    Thanks a Ton! I have my data structure exam today 😁.
    Welcome back too 🥳🥳

  • @asimov9468
    @asimov9468 ปีที่แล้ว +1

    Thanks man. Perfect explanation and understandable code!

  • @user-my6yf1st8z
    @user-my6yf1st8z หลายเดือนก่อน +6

    so when FBI wants to find the king terrorist, they grab one of his associates - throw that guy into stack - interrogate - get the names - grab next associates - interrogate - get the names - until suspect == king terrorist. THEY WERE USING DFS ALL THIS TIME 😁😁😁

    • @Micraylyrics
      @Micraylyrics หลายเดือนก่อน

      That's a funny way to put it🤣🤣

  • @__-ib2ll
    @__-ib2ll 9 วันที่ผ่านมา

    An underrated channell💔🎀

  • @recursion.
    @recursion. 2 ปีที่แล้ว +3

    OG Michael back at it again 🎉🎉🎉

  • @studywithrichard554
    @studywithrichard554 ปีที่แล้ว +2

    A stack only has two operations, push and pop. They do not let you add the 3 elements C,D and E before G as you did in the 3rd step.

    • @BR3DOL
      @BR3DOL ปีที่แล้ว +7

      He pushed three items onto the stack, forcing G to the bottom.

  • @maris5888
    @maris5888 2 ปีที่แล้ว

    Thank you lots, your channel is super informative.

  • @meXD
    @meXD 2 ปีที่แล้ว +8

    Great video! A have a question (probably stupid, but anyway) about mapping your explanation to your code. So this video says: stack is a list of nodes to be visited;
    1) 'A' is a first node to be visited
    2) Add it to stack (to be visited)
    3) Pop it from stack
    4) Mark as visited
    5) Add adjacent nodes (to be visited) in stack
    ...
    Now according to your code for dfs:
    1) 'A' is a first node to be visited
    2) You add right away 'A' node to visited array ( visited.append(node)) before popping, so it's marked as visited?
    3) You add 'A' node into a stack (to be visited) but 'A' is already been visited according to visited array
    4) 'A' node is popped
    5) Then you loop through 'A's adjacent nodes (G first) (for n in reversed(graph[s])) marking 'G' as visited ( visited.append(n)); pushed into visited array
    6) Then you put 'G' into stack to be visited (stack.append(n)). But 'G' is already in visited, isn't it?
    7) Same as point 6) happens with 'B'
    8) Pop 'B' from the stack
    ...
    Then algorithm proceeds with other nodes pushing into visited before popping them
    So the question is: am I getting something wrong? What is the indicator of nodes to be marked as visited: being popped from the stack or being pushed into visited?
    Again in short:
    -The video states: Add node to be visited in the stack -> pop it -> mark as visited -> add adjacent nodes to the stack -> repeat
    -And according to code: Mark 'A' as visited(push to visited array) -> add 'A' to stack(to be visited) -> pop 'A' from stack -> loop through 'A's adjacent nodes (mark 'G' as visited, add 'G' to stack, mark 'B' as visited, add 'B' to stack) ->pop 'B' -> repeat
    Hope I explained my confusion well. Trying hard to get DFS right so I'll be waiting for your response, thanks!

    • @solracodraude2211
      @solracodraude2211 ปีที่แล้ว

      i guess this is not useful for you anymore, since it has been a year, but I caught the same error.
      In the code, nodes should be added to visited just as they are popped from the stack and not while considering the neighboring nodes.

  • @wheresjesse1796
    @wheresjesse1796 4 หลายเดือนก่อน

    Thanks. This is a great explaination.

  • @xinglinli9874
    @xinglinli9874 2 ปีที่แล้ว

    I'm so happy that you start to post videos again.

  • @batmanb8194
    @batmanb8194 ปีที่แล้ว +1

    the "in" operation has a time complexity of O(n) though, in this case wouldnt it be O(n!) because you check it for 1,2,3,...n elements when you do "not in visited"?

    • @lfsever
      @lfsever ปีที่แล้ว

      Not really, the "in" operation is a lookup in a hash table, so it's constant time O(1), not O(n).

  • @theycallmezeal
    @theycallmezeal 2 ปีที่แล้ว +8

    RETURN OF THE KING

  • @ysdfdfk8786
    @ysdfdfk8786 2 ปีที่แล้ว +1

    This channel is perfect!

  • @cmdr_ultraviol3nt
    @cmdr_ultraviol3nt 2 ปีที่แล้ว +1

    So the difference between BFS and DFS is simply whether the queue is FIFO or FILO?

    • @MichaelSambol
      @MichaelSambol  2 ปีที่แล้ว

      BFS = queue / FIFO ... DFS = stack / FILO.
      Note: I chose to teach the iterative approach. You can also do this recursively, and I have examples on my GitHub [1]. DFS (pre/in/post in the code below) is easier to do recursively than BFS (level).
      [1] github.com/msambol/youtube/blob/master/tree_traversal/traversal.py

  • @_Jain_S
    @_Jain_S 2 ปีที่แล้ว +1

    would it possible to link references on how the distance matrix is populated with BFS and DFS? and merits of using a stack vs a queue for DFS ?

  • @noctua7771
    @noctua7771 2 ปีที่แล้ว

    So clear and conscise, thank you!

  • @nickleland2131
    @nickleland2131 6 หลายเดือนก่อน

    Beautiful job.

  • @kafychannel
    @kafychannel ปีที่แล้ว +1

    Thank you I have subscribed to you

  • @MaharsheeKShah
    @MaharsheeKShah 5 หลายเดือนก่อน +1

    Only thing, deque and all is not pre defined u have to code that too or make a class Node,Stack,etc...

  • @howard_yin
    @howard_yin 2 ปีที่แล้ว +2

    finally you updated!

  • @anshumanpanigrahi7817
    @anshumanpanigrahi7817 2 ปีที่แล้ว +2

    Back with a Bang!!

  • @OMNI_INFINITY
    @OMNI_INFINITY 23 วันที่ผ่านมา +1

    *Why would it be big O of vertices AND edges? The edges aren't being visited or added.*

  • @rafaelfreire3792
    @rafaelfreire3792 ปีที่แล้ว

    I never thought about dfs as the "opposite" of bfs... thank you

  • @proflead
    @proflead 6 หลายเดือนก่อน

    Great content! Thanks!

  • @matusdzoba2768
    @matusdzoba2768 ปีที่แล้ว

    Hello, great video.
    I would like to ask you some additional question. List of Stack and list of Visited will be on the evening like this?
    Stack: A, B, G, C, D, E, F, H, I
    Visited: A, B, C, D, E, F, G, H, I
    I am not sure if the List of Stack should preserve all previous values or it is changed continuously.

  • @derekjones3596
    @derekjones3596 5 หลายเดือนก่อน +1

    This is a good explanation, but it is for a tree not a graph. I don't think the arithmetic version would work for a graph since there is no real root. You would have to use recursion for a true graph

  • @sharkle9
    @sharkle9 2 หลายเดือนก่อน

    Absolute KING

  • @varunn104
    @varunn104 2 ปีที่แล้ว +3

    yooo he's back. lesgooo

  • @jovem3767
    @jovem3767 3 หลายเดือนก่อน

    if time complexity is the same, why choose dfs over bfs, or vice-versa?

    • @kaffeetasse2461
      @kaffeetasse2461 หลายเดือนก่อน

      bfs is for copy tree, dfs is for delete tree.

  • @MagnuSagus
    @MagnuSagus 2 ปีที่แล้ว +1

    The Legend is back

  • @SaatvikPandey-lq9qz
    @SaatvikPandey-lq9qz 7 หลายเดือนก่อน

    so, is dfs in tree same as its preorder traversal?

  • @Hitmanboy-n8p
    @Hitmanboy-n8p 4 หลายเดือนก่อน

    Thank you, Your voice reminds me of Batman's voice "Where are they?"

  • @KhaledElAnsari
    @KhaledElAnsari 2 ปีที่แล้ว +2

    Welcome back man :D

  • @ani7453
    @ani7453 2 ปีที่แล้ว

    Very Intuitive, thank you

  • @kaffeetasse2461
    @kaffeetasse2461 หลายเดือนก่อน

    dieses visited array braucht man doch garnicht, weil sowieso der current node gleich vom stack gepoppt wird und somit dessen childs nur einmal in den stack kommen koennen, oder?

  • @suneosama939
    @suneosama939 ปีที่แล้ว

    Why add both visited and stack? Why just one i don't understand 😢

  • @ldd1358
    @ldd1358 ปีที่แล้ว

    you really save my life !!!!!

  • @sayedim
    @sayedim 2 ปีที่แล้ว +2

    Welcome back :)

  • @TheOliveira170
    @TheOliveira170 3 หลายเดือนก่อน

    good video.

  • @frodom2005
    @frodom2005 2 ปีที่แล้ว

    great video

  • @abhishekshivgan1884
    @abhishekshivgan1884 ปีที่แล้ว +1

    Isn't the algorithm works best, if we continue to add vertices till we reach leaf node and in the process of backtracking (popping out of the stack) marking it as visited. While backtracking if any node has children, same process will be applied (adding descendant vertices in the stack till leaf node and backtracking it.

  • @sadeghkhosravi
    @sadeghkhosravi ปีที่แล้ว

    Thanks💞💓

  • @mohitchaturvedi4556
    @mohitchaturvedi4556 9 หลายเดือนก่อน

    Is this a pre order traversal?

    • @dequaviontavious
      @dequaviontavious 2 หลายเดือนก่อน

      I am wondering the same thing have you found the answer

  • @dbzkidkev2
    @dbzkidkev2 2 ปีที่แล้ว +1

    Why is graph[s] reversed?

    • @MichaelSambol
      @MichaelSambol  2 ปีที่แล้ว +1

      This is just so the output matches the recursive version (shown is the iterative code).

  • @mat-on-go8644
    @mat-on-go8644 ปีที่แล้ว

    I have a question why are are you popping a whilst we are still items in a thats wrong kaa

  • @melihkavraz
    @melihkavraz หลายเดือนก่อน

    The code you have shared for dfs is incorrect. It works like bfs.

    • @MichaelSambol
      @MichaelSambol  หลายเดือนก่อน

      github.com/msambol/dsa/tree/master/search

  • @graham12345dd
    @graham12345dd ปีที่แล้ว

    Awesome!

  • @abbk8815
    @abbk8815 2 ปีที่แล้ว

    please do graph data structure code implementation in python

  • @Zoronoa01
    @Zoronoa01 2 ปีที่แล้ว

    you said that the graph is stored in an "adjacency list" but isn't that an adjacency map?

  • @brockdaniel8845
    @brockdaniel8845 10 หลายเดือนก่อน

    Nice !

  • @ezio9595
    @ezio9595 ปีที่แล้ว

    King!!

  • @2oo1xo50
    @2oo1xo50 2 ปีที่แล้ว

    Welcome back

  • @nguy0310
    @nguy0310 ปีที่แล้ว

    Thanks

  • @Yahweh5995
    @Yahweh5995 ปีที่แล้ว

    Shout out to the Computer Science majors in the comment section .

  • @nathlunav
    @nathlunav ปีที่แล้ว

    🇧🇷 thankssss

  • @mohammedhajomar4400
    @mohammedhajomar4400 10 วันที่ผ่านมา

    thx

  • @fktudiablo9579
    @fktudiablo9579 2 ปีที่แล้ว

    Lex Fridman ?

  • @williamstorey5024
    @williamstorey5024 2 ปีที่แล้ว

    fyi git hub link is broken

  • @MagicmathmandarinOrg
    @MagicmathmandarinOrg 2 ปีที่แล้ว

    The code seems wrong.

  • @Giyuueditss
    @Giyuueditss ปีที่แล้ว

    kod yok

  • @producersunite7515
    @producersunite7515 2 ปีที่แล้ว +1

    A for loop in a while loop for dfs smh ? Just learn recursion and no need to impprt anything from collections module.

    • @MichaelSambol
      @MichaelSambol  2 ปีที่แล้ว +3

      Thanks for the feedback. Yes, can also do it recursively! See examples below [1]. deque is O(1) for append and pop [2], but I did change it to an array so there is no import [3].
      [1] github.com/msambol/youtube/blob/master/tree_traversal/traversal.py
      [2] wiki.python.org/moin/TimeComplexity
      [3] github.com/msambol/youtube/blob/master/search/depth_first_search.py#L15

  • @kvelez
    @kvelez ปีที่แล้ว

    Check this sample and give me feedback:
    from queue import deque
    def depth_first_search(graph, node):
    visited = []
    stack = deque()
    visited.append(node)
    stack.append(node)
    while stack:
    s = stack.pop()
    print(s, end=" ")
    for n in reversed(graph[s]):
    if n not in visited:
    visited.append(n)
    stack.append(n)
    graph = {
    'A': ['B', 'C'],
    'B': ['D', 'E'],
    'C': [],
    'D': [],
    'E': ['F'],
    'F': [],
    'G': ['H'],
    'H': ['I'],
    'I': [],
    }
    depth_first_search(graph, 'A')