Algorithms: Graph Search, DFS and BFS

Sdílet
Vložit
  • čas přidán 26. 09. 2016
  • Learn the basics of graph search and common operations; Depth First Search (DFS) and Breadth First Search (BFS). This video is a part of HackerRank's Cracking The Coding Interview Tutorial with Gayle Laakmann McDowell. www.hackerrank.com/domains/tut...
  • Věda a technologie

Komentáře • 294

  • @limitless1692
    @limitless1692 Před 4 lety +102

    You guys are experts at making things more confusing than they already are..

    • @sundarkris1320
      @sundarkris1320 Před 3 lety +12

      She’s literally explaining what each line of code but not explaining the big picture of the implementation.. confusing explanation of search in the beginning

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

      100%

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

      What do you not understand about the implementation? I think it would help if you first look up Reducible's graph video where they animate stuff to make it easier to understand.

    • @AbdulHaq-tv6gy
      @AbdulHaq-tv6gy Před rokem

      Fr

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

      That's how you become the person who decides what we all have to learn to get a job.

  • @DavidBadilloMusic
    @DavidBadilloMusic Před 7 lety +270

    People are getting confused with those 'data' values inside the node circles and the 'variable names' Gayle uses to explain the search process. Heck, I was confused myself. But, start by ignoring the letter values inside the node circles, those are there just to represent data. When Gayle says "I'm going to call this node 's' and this other node 't', she is not talking about the data that you can see inside those circles, she is more likely talking about the variable names that she is going to use to carry out the search process. The 's' node will be the source node, or the node you are using as your starting point. The node 't' will be your target node, the node you are looking for. Watch the video again and you will see how she draws 's' and an arrow, then draws 't' and an arrow. Those are the nodes she is referring to when she says 's' or 't'.

    • @blablabla4231able
      @blablabla4231able Před 6 lety +4

      Thanks dude

    • @HalfTimesTwo
      @HalfTimesTwo Před 6 lety +2

      Why would that be confusing? Shouldn't it be pretty obvious, or do you think she should have used numbers as the vertex data instead of letters?

    • @blablabla4231able
      @blablabla4231able Před 6 lety +21

      it is confusing because she uses chars for both the data values and the variable names.

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

      stfu simp

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

      Or use 's' for start and 'g' for goal... Pick your poison!

  • @martincopes3818
    @martincopes3818 Před 7 lety +107

    Notice that the space complexity required for the recursive implementation of DFS is O(h) where h is the maximum depth of the graph. This is because of the space needed to store the recursive calls.
    DFS can also be implemented iteratively following the same idea as BFS but using a stack instead of a queue. This implementation uses O(v) extra memory where v is the number of vertices in the graph.

    • @sothearithsreang2600
      @sothearithsreang2600 Před 6 lety +9

      Both implementations have the same memory complexity. Stack implementation uses heap memory (dynamic) while recursion uses stack memory.

    • @BlackJar72
      @BlackJar72 Před 6 lety +2

      The iterative is also simpler and easier to understand, at least to me.

  • @brianotte8696
    @brianotte8696 Před 4 lety +2

    This was fantastic! I'm so grateful this is on CZcams

  • @makii1715
    @makii1715 Před 5 lety +116

    When you hear break-fast search instead of breadth-first search you know you should go take a nap

  • @shelbyfaaron739
    @shelbyfaaron739 Před 5 lety

    Everyone here comlaining about the data and letters for each node blah blah, well I just want to thank you ! I am new at programming and have a project to do for college using graphs, this helped me a lot! Thanks!!

  • @YogeshPersonalChannel
    @YogeshPersonalChannel Před 6 lety +73

    It's amazing how elegantly sophisticated you made such an easy concept.

  • @shubhc5
    @shubhc5 Před 7 lety +9

    Can you please provide this complete programme?

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

    0:57 "Hey ass" ...
    I literally got terror flashbacks of my life

  • @vitaminb4869
    @vitaminb4869 Před 7 lety +1

    Would be nice to see this also return the distance between the nodes. I implemented this by queuing this information together with the node being queued, but I wonder if that's the best way to do it or if there is a more elegant way.

  • @miceshinoda
    @miceshinoda Před 7 lety +368

    Boop boop boop boop

  • @LearnWithEmKay
    @LearnWithEmKay Před 4 lety +6

    In the BFS section, there might be as many as O(n^2) nodes in the nextToVisit. For example consider a complete graph.

  • @mandar.vaidya
    @mandar.vaidya Před 3 lety +2

    Hey Gayle , very nice explanation !!! do you have graph traversal videos in C also ? If yes , can you please provide links.

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

    A well explained video on this topic. Thank you.

  • @Ronny2332
    @Ronny2332 Před 3 lety

    Great video! Helped me a lot implementing DFS and BFS!

  • @wonggran9983
    @wonggran9983 Před 7 lety +2

    Great video! Filling the need for a Khan-academy channel for CS topics. More please!

  • @theatomicfoxchannel8235
    @theatomicfoxchannel8235 Před 6 lety +1

    Thank you for the video. Helped me a lot!

  • @mdazam6477
    @mdazam6477 Před 6 lety

    Amazing explanations. Long live HackerRank

  • @tourniquet3306
    @tourniquet3306 Před 7 lety +1091

    Step 1: Use English characters as data for each node
    Step 2: Assign English letters to the nodes in the algorithm and make the explanation confusing.
    Step 3: Watch everybody struggle

  • @beedavis3596
    @beedavis3596 Před 7 lety +34

    Very good overview ... but when you get to the code you rush through important detail that leave me a little in the dark.

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

      Very intuitive if you actually knew how to code lol

  • @imochurad
    @imochurad Před 5 lety +24

    Missing a method:
    public void addNode(int id) {
    nodeLookup.put(id, new Node(id));
    }

    • @Tuulipl
      @Tuulipl Před 3 lety

      I think this would be the addEdge method that has been collapsed. It's not enough to add the node to nodeLookup, you also need to set it as the adjacent node of whatever node you want to link it to, hence addEdge having the parameters of source and destination.

  • @RadimSafran
    @RadimSafran Před 7 lety +2

    Hi, what microphone do you use in the beggining? It sounds very clear ! Thanks :-)

  • @beedavis3596
    @beedavis3596 Před 7 lety +33

    So ... You never show the code for the "getNode" method. It's folded up and we can't see it ...

    • @ricardo072
      @ricardo072 Před 4 lety +10

      Missing method:
      private Node getNode(int id){ return nodeLookup.get(id); }

  • @sehamalharbi9422
    @sehamalharbi9422 Před 3 lety

    Yes this tutorial is advanced and so detailed, but it is so helpful. thank you so much.

  • @CalvinJKu
    @CalvinJKu Před 6 lety +1

    Thanks for the video. Just one question tho. Why is that there's no value in the Node class? I mean there's id and which other nodes are connected to it, but there's no value? Why?

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

    Issues with this:
    - This implementation will work for graphs whose nodes are all connected to one another (e.g. every node has a path to every other node whether you have to go down the tree/graph or back up it and then perhaps down again). This will *not* work for _disconnected_ graphs with nodes that are disconnected to one another. Example: 1->2->3->4->5, 6->7->8 (no connection between 1 through 5 and 6 through 8)
    - Breath First Search was not explained for more than one iteration down the tree. You should really explain using at least two, typically three iterations so people can understand the process of the loop and the decision-making of the loop (e.g. how do we know when to add nodes to the queue, helps explain what happens if there's duplicates).

  • @fisslewine1222
    @fisslewine1222 Před 7 lety

    good tutorial I did something similar and just used a vector node pointers...this looks like c++?
    Also a paired vector is good for holding a node and it edge values
    Is there a tutorial for searches when node edges have values to find the path with the lowest cost?

  • @chrizonline
    @chrizonline Před 6 lety +2

    For those who wonder why there isn't a nextToVisit.remove() in hasPathBFS(....), thats because you have to use a Queue. She mentioned it at 3:27
    So it should be like:
    private boolean hasPathBFS(Node source, Node destination) {
    ...
    Queue nextToVisit = new LinkedList();
    while(!nextToVisit.isEmpty()) {
    Node node = nextToVisit.remove();
    ....
    }

  • @academicconnorshorten6171

    Great explanation, thank you!

  • @cutiko
    @cutiko Před 5 lety +5

    Something that could have been explained better is the LinkedList nextToVisist procedure. That LinkedList is a queue. So the first time we add the original node, the queue is size 1, inside the while, we remove the first element and obtained at the same time, the queue is size 0. When we add the children, then the queue size grows again and the while can keep looping. THE KEY IS: Understand the LinkedList as a supermarket. The first elements, add more elements, then those child elements are checked first because the elements that each of those adds, are added to the last position to the queue. Lets the first node has 2 children. The first node is checked, then add 2 children, child A and child B. The first child is checked, B, and that child adds C, D, E, but only after the second children. So the third iteration the queue looks like this [C, D, E]. And that is why is breadth-first because the queue makes the children get ordered in the back of the line. So every ancestor is checked first.

  • @abeechr
    @abeechr Před 7 lety +1

    I love your videos and recently bought your book. Do you have samples of all of the data structures in javascript? That would be a fantastic resource to supplement your material--especially for noobs like me! Thank you.

  • @lolololololololol11
    @lolololololololol11 Před 7 lety +4

    Video could be somewhat confusing at first. Specifically the ambiguity of node 's' vs. node 'S'.
    It's completely clear after a couple of seconds of thought, though still annoying.
    There is already a node 'S', which is different the node 's' that the narrator talks about. Wasn't sure which 's' she meant after statements as seen below:
    At 1:07 the narrator says, "Hmm...I'm not sure let me go ask [S's children]". Then immediately after that t is displayed pointing to H, a child of 'S'.

  • @pravin4256
    @pravin4256 Před 5 lety +5

    That's a great explanation!!
    One question though,
    In BFS implementation I haven't seen the use of visited HashSet. shouldn't we check if a node already exists in the set before adding it into the queue?

  • @mollyambrai1157
    @mollyambrai1157 Před 3 lety

    Clear and simple. Thank you!

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

    Thanks for this, it saved me!

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

    Well I’m surely going to save this implementation for last to memorize from scratch. Already got Linked Lists, Doubly Linked Lists, Stacks, and Queues down. Currently on trees but Graphs just seem a doozy 😢

  • @RobertJohnson-fm4vl
    @RobertJohnson-fm4vl Před 7 lety +2

    How do you find the cost of a path?

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

    What are the complexities of both DFS and BFS in terms of O() and Omega() ?

  • @Grassmpl
    @Grassmpl Před 2 lety

    Is there an efficient way to compute the level of connectivity of a graph? That is the number of vertices (or edges) that must be deleted to disconnect the graph. Or it is this NP hard?

  • @g7-smart-logistic-app
    @g7-smart-logistic-app Před 5 lety

    Is there is a lag in the explanation at 1:13. I feel something going weird.

  • @Manu-wb2uv
    @Manu-wb2uv Před 4 lety +4

    An optimization for the BFS is to put:
    if(visited.contains(child.id)) continue;
    inside the for loop so it won't add unnecessary items to the queue.

    • @hfontanez98
      @hfontanez98 Před 4 lety

      I am not sure this is correct. Removing that check from where it is, triggers unnecessary looping. The idea is to skip unnecessary iterations altogether.

    • @Manu-wb2uv
      @Manu-wb2uv Před 4 lety

      @@hfontanez98 exactly the opposite. Unnecessary looping happens if the visited.contains it's where it is now. Because you add nodes to the queue that were already visited.

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

    This video really helps! Anyone knows where the source code of this tutorial is?

  • @pavelerokhin1512
    @pavelerokhin1512 Před 4 lety +3

    I just love Gayle! The best explanation ever. See also her book!

  • @meditationandrelaxationmus741

    Where do I add adjacent nodes to source node to build graph can you please post that code

  • @srinivasnangunuri1313
    @srinivasnangunuri1313 Před 7 lety +3

    Awesome and very simple explanation! Enthralled . Superb mam. You are so Good . !

  • @ericcannon862
    @ericcannon862 Před 5 lety

    @5:32 in the hasPathDfs function, it takes two parameters and you try to recursively call it with 3 parameters?

    • @lingobol
      @lingobol Před 5 lety +2

      She's calling the private method which has 3 parameters.

  • @ricardo072
    @ricardo072 Před 4 lety +12

    Missing method:
    private Node getNode(int id){ return nodeLookup.get(id); }

    • @sizmostudent
      @sizmostudent Před 3 lety

      thanks

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

      what is nodeLookup??

    • @user-vl4do1fs5r
      @user-vl4do1fs5r Před 2 lety

      @@AlancRodriguez I think nodeLoopup is the hashmap for all the nodes in the graph in Key(id)-Value(Node) format.

  • @lovebisaria3325
    @lovebisaria3325 Před 6 lety +4

    in the addEdge function, should we also not do something like d.adjascent(s);

    • @doctornkz
      @doctornkz Před 6 lety +1

      I think so, my test(1,4) fault at 1-2, 1-3, 3-2, 3-4 configuration.

    • @Manu-wb2uv
      @Manu-wb2uv Před 4 lety

      It depends if you want your graph to be a digraph or not :).

  • @annaa8632
    @annaa8632 Před 7 lety +36

    It is really confusing to use letters as node values and then also use letters as node variables ! At the beginning I was like what we are taking about : S node is actually G node .. what?? I just stopped watching it.

    • @kirk-patrickbrown866
      @kirk-patrickbrown866 Před 6 lety +1

      I total agree with you on the S node which was actually g node and how confused i was.

    • @oneforallah
      @oneforallah Před 5 lety +2

      Is Gayle really helping or tormenting us at this point I gotta ask myself

  • @videovideoguy
    @videovideoguy Před 6 lety

    A graph data structure can be represented by using a Map as well

  • @AlexandrBorschchev
    @AlexandrBorschchev Před 3 lety

    Hi everyone, i am learning algorithms. I looked through lots of syllabus and found them interesting, but i dont know what resource to learn them from. Theres a whole list of algorithms and clever tricks i would like to learn, sorting, search, dp, recursion, etc. Please, if you have a good resource to learn these from, they would be very helpful!

  • @chinmaydas4053
    @chinmaydas4053 Před 6 lety

    Great explanation madam..respect you.What is the best programming language to learn data structures and algorithms as a beginner??..please answer me madam..

  • @kar-unboxed
    @kar-unboxed Před 4 lety

    I think it was confusing because the voice over is little ahead so when she says "I'm gonna call it 's' " - it doesn't appear making us look at the node with value 'S'

  • @eshumanohare7614
    @eshumanohare7614 Před 4 lety

    really helpful. Thanks Gayle.

  • @farslan
    @farslan Před 6 lety

    visited Set should Set I think. Otherwise, we assume all nodes have unique ids

  • @FilipMakaroni_xD
    @FilipMakaroni_xD Před 2 lety

    Is the order in graph near the end correct or am I missing something? 5 and 7 are calendar before 6 and 8 but there's no other path connecting them to S

  • @kylep4991
    @kylep4991 Před 3 lety

    Would it be possible show an example being ran? For those of us watching this video to learn, I am unsure of how to run your program.

  • @jonneymendoza
    @jonneymendoza Před 3 lety

    There seems to be a bug in your BFS code. once you find that a nide has already been visited why are you continuing and then adding that same mode back to the que? It should be a if conditoons checking that the node id is "not visited" and then continue and add the node id to the visted que

  • @Funkfreed
    @Funkfreed Před 4 lety +2

    As the video goes further I get more confused.
    First the variable name with mismatching values inside where variable name is the one being referred to without prior knowledge on what she is referring.
    Once the coding started she started jumping all over the place as if it's the weekend and she has to catch the bus.
    It would also be nice if we get a copy of the code since getNode was not shown which will allow us to study how the code works ourselves.

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

    Can someone please explain to me why in the DFS, we return false as soon as we found the node was already visited. While in BFS we continue when we found the node was visited? 🤔

    • @CleristonMartinelo
      @CleristonMartinelo Před 4 lety

      If it was visited, then its children had inserted in nextToVisit.

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

    What's in her private Node getNode(int id) body and what is it returning?

  • @jackli5654
    @jackli5654 Před 6 lety +4

    For BFS, why use a linked list when you can just use a queue?

    • @arielsashcov99
      @arielsashcov99 Před 3 lety

      LinkedList is a Queue in java
      Queue adjacent = new LinkedList();

  • @SounakBasuRoy
    @SounakBasuRoy Před 7 lety +2

    Finally cleared the mist... Thank you very much...

  • @djeragon6544
    @djeragon6544 Před 4 lety

    What ‘s the name of the compiler your using ?

  • @cryptonative
    @cryptonative Před 4 lety

    Why are adjacent nodes a LinkedList rather than an array?

  • @muhammadmohibkhan1454
    @muhammadmohibkhan1454 Před 5 lety

    if visited.contains (node.id) check should be at start of loop in BFS I believe

  • @ulrikalundholm5458
    @ulrikalundholm5458 Před 4 lety

    Do anyone know what's the benefit of using a LinkedList for storing the adjacent children of the Node class. Why not use a std::vector for this?

  • @mugi1726
    @mugi1726 Před 3 lety +8

    damn i finally understand after watching for the 5th time

  • @ankitavyas7996
    @ankitavyas7996 Před 7 lety +4

    What is to be written in the getNode() method in dfs?
    Please provide link for the code

    • @kidou123456
      @kidou123456 Před 7 lety +2

      private Node getNode(int id) {
      Node node = new Node(id);
      return node;
      }
      Though the constructor of Node is private, all members in Graph have access to it, since Node is nested class in Graph. They have been made private, because only Graph instance can create nodes by calling getNode().

    • @vincentpingard6909
      @vincentpingard6909 Před 7 lety +3

      Michael Zhang this would work if the search methods were relying on equals() rather than ==, otherwise the comparison is done at memory address level which is not what is intended (the comparison should be per id)

    • @eyalnahum5015
      @eyalnahum5015 Před 7 lety +15

      Hey Ankita,
      Actually the getNode method is to retreive the Node from the graph itself
      (private HashMap nodeLookup) according its id:
      Private Node getNode(int id)
      {
      return nodeLookup.get(id);

    • @NamanRajpalAgra
      @NamanRajpalAgra Před 7 lety +2

      Eyal is Correct!

    • @ShivN07
      @ShivN07 Před 7 lety +2

      According to me this is how getNode() method looks like:
      private Node getNode(int id)
      {
      if(nodeLookup.containsKey(id)) return nodeLookup.get(id);
      Node node = new Node(id);
      nodeLookup.put(id,Node);
      return node;
      }

  • @almynotes
    @almynotes Před 5 lety

    Anyone knows what software/hardware is being used to write and present this? Tnx

  • @shwethasubbu3385
    @shwethasubbu3385 Před 2 lety

    I am unable to visualize the graph data structure with this implementation. In the implementation, each node has a linked list of adjacent nodes. That just makes the data structure a very long linked list right? I am unable to correlate this with the graph shown at 2:11. 's' has 2 children - 'a' and 'b'. In this case, what will be the 'adjacent' linked list of 's'?

    • @shwethasubbu3385
      @shwethasubbu3385 Před 2 lety

      She also explains it towards the end of the video with an example so that helps

  • @RyanLeiTaiwan
    @RyanLeiTaiwan Před 7 lety +16

    I found this BFS code not very efficient. You could've moved the "if (visited.contains(node.id))" condition (without continue statement) in the "for each child" loop. That is, enqueue the child node only if it has not been visited. In this case, we can also ensure the dequeued nodes will always be unvisited (no need to check for continue). The current implementation will redundantly enqueue many visited child nodes, especially in an undirected graph!

    • @justinmendiguarin3626
      @justinmendiguarin3626 Před 6 lety +7

      for(Node child : node.adjacent) {
      if (!visited.contains(child.id)) {
      visited.add(child.id);
      nextToVisit.add(child);
      }
      }

    • @depshallburn
      @depshallburn Před 6 lety

      Thanks a lot for your code! But, one thing that I wanted to ask just in case: you don't need the visited.add(node.id) right before the for loop in this corrected code as it's already within the for loop (but now adding child.id to visited) right?

    • @KhanSlayer
      @KhanSlayer Před 6 lety

      I think its relative tradeoff depending upon the connectedness of the graph. In your solution your calling contains across ALL children, including nodes that could have 8000 leaf nodes that will never be revisited. Also, if the node in question is found early, you've still called contains on lots of child nodes that have never been walked yet.

    • @youngcitybandit
      @youngcitybandit Před 5 lety

      @@KhanSlayer ok but even then the code in the video could lead to an infinite loop. If node is in visited yiy should NOT be adding it to "next to visit".

    • @KhanSlayer
      @KhanSlayer Před 5 lety

      @@youngcitybandit valid point

  • @GabrielJimenezA
    @GabrielJimenezA Před 7 lety

    Great videos!

  • @quobbydave4325
    @quobbydave4325 Před 4 lety

    am fresh peogramming student and can I have the link to your source code

  • @drormik
    @drormik Před rokem

    a. thank you for the video.
    b. i think there is an issue with the BFS function.
    The entire condition - if (visited.contains(node.if)) - seems meaningless.
    because no action is taken - whether the condition is met or not.

  • @sarvodaykumar2723
    @sarvodaykumar2723 Před 4 lety

    Hello dear teacher could you please add video on adding and delete node/ edge in graph

  • @nawras.hawamdeh
    @nawras.hawamdeh Před 5 lety

    I read the comments before watching the video, and now i really don't know what to do! Is it really helpful or confusing?

    • @nawras.hawamdeh
      @nawras.hawamdeh Před 5 lety

      After 3 minutes watching: Hill man.. I'm gonna quite!

  • @Vigneshan
    @Vigneshan Před 5 lety

    loved the video but i wish you could have attached the source code in the description...

  • @gokhandroid
    @gokhandroid Před 6 lety

    Why would you do this(inside hasBFS method):
    if (visited.contains(firstNode.id)){
    continue;
    }
    if you are adding node.id to visited list anyway?
    also we can check the condition below first thing in the method so if it is equal we dont have to go through any extra operation
    if(source == destination){
    return true;
    }

    • @Manu-wb2uv
      @Manu-wb2uv Před 4 lety

      Or better just put it inside the for loop so it won't add items that we've already check to the queue

  • @netdeamon123
    @netdeamon123 Před 7 lety

    We ask question "Hey S, do you have path to node T?" but there is no node T. But later she points S to G and T to H.... can somebody please explain me this part.

    • @DavidBadilloMusic
      @DavidBadilloMusic Před 7 lety

      Ignore the letters inside the node circles, those are there just to represent data. When she says "I'm going to call this node 's' and this other node 't', she is not talking about the data that you can see inside those circles, she is more likely talking about the variable name that she is going to use to carry out the search process. The 's' node will be the source node, or the node you are using as your starting point. The node 't' will be your target node, the node you are looking for. Watch the video again and you will see how she draws 's' and an arrow, then draws 't' and an arrow. Those are the nodes she is referring to when she says 's' or 't'.

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

    It's nice to see that terminology like "boo-boo-boo-boo-boop" has survived the test of time. No shade, I think I've used it in my career at some point.

  • @nitinwadhwani3404
    @nitinwadhwani3404 Před 6 lety

    what is the code inside getNode method?

    • @dawitmekonnendasam
      @dawitmekonnendasam Před 6 lety +1

      public Node getNode(int id)
      {
      Node S = nodeLookup.get(id);
      return S;
      }

  • @qaipak1
    @qaipak1 Před 5 lety

    When did she actually use a queue?

  • @chronocide
    @chronocide Před 4 lety

    She didn't use visited HashMap for the depth first search - how would this ever terminate?

  • @arunraj2527
    @arunraj2527 Před 7 lety +7

    Node node = nextToVisit.remove()
    the above method is wrong as remove() method returns a boolean value.
    Node node = nextToVisit.removeFirst() will work and returns next node to visit.

    • @daoduyemi
      @daoduyemi Před 6 lety +1

      I believe she used the remove() method that returns the removed element and not the boolean.

    • @MrAvinashBhattarai
      @MrAvinashBhattarai Před 6 lety

      She could define her own methods.

  • @andreian4303
    @andreian4303 Před 6 lety

    It's funny to see book "КАРЬЕРА ПРОГРАММИСТА" on the table)) It could be translated as "Programmer Career". What it is the first and second one?

  • @akshaychandrachood7500

    Hello ma'am, I am new to programming. According to my understanding Node class should not be static. Because we need to create multiple nodes, which means we need many instances of the same class. Please correct me if I am wrong. Thank you

    • @jessicahuang5507
      @jessicahuang5507 Před 5 lety

      Akshay Chandrachood Static classes are not like static variables. You can create many instances of them. In Java, you can create static NESTED classes for encapsulation. I’m For example, the Graph class can access the Node classes private variables and methods because it is nested. However, functionally, the Node class isn’t different from any other class. In fact, I don’t know why people use static classes at all haha

    • @akshaychandrachood7500
      @akshaychandrachood7500 Před 5 lety

      Thanks for the clarification.

    • @Surmoka
      @Surmoka Před 4 lety

      @@jessicahuang5507 in C++, you cannot instantiate a static class. I think this is the origin of the confusion.

  • @connorbunch3577
    @connorbunch3577 Před 2 lety

    1:39 When she said "boop boop boop boop boop", that really hit me

  • @membuchibuzormembu7064

    Honestly for the first 2 minutes, I was so confused I had to come to the comment. Now I see she just spelled the word GRAPH DFS BFS as the nodes. I thought those were the values. It would be better to point that out next time. But Great Explanation!!!

  • @eleanor7894
    @eleanor7894 Před 6 lety +1

    I don't understand why line 33 (in DFS) has 'return false' ... I understand that if the node has been visited previously from the same node, then there is a loop. So a loop exists in the graph... How does that imply that there is no path to the destination (it could be in another path of the graph?) Thanks
    EDIT - I just saw the comment below by swapnil gaikwad . He thinks this part of the algorithm is wrong!

    • @1Minute-Movie
      @1Minute-Movie Před 5 lety

      I was thinking this is just a sanity check for disconnected graphs? where the destination is not connected, but even then I feel like this condition is unnecessary.

  • @so9487
    @so9487 Před rokem

    When explaining DFS/BFS, why don't you use the existing graph nodes instead of arbitrary nodes, thereby causing unnecessary confusion in the process?

  • @flueepwrien6587
    @flueepwrien6587 Před 4 lety

    It feels like everybody in the comments thinks they are smarter than her. A messup happens, so what. If you dont count the start, the video teached me the basics and thats why I watched this

  • @hfontanez98
    @hfontanez98 Před 4 lety

    This implementation has a flaw. If you create a graph with, for example, four nodes labeled 1, 2, 3, and 4 and you pass something like graph.hasPathXXX(20, 44) will return true instead of false because the getNode methods can return null both, which will pass the source == destination test. To avoid this, you have to add a case that checks for null and returns false if either the source node or the destination node is null.
    I tried this implementation at home and was able to confirm it by running a simple test like the one I included above.

  • @ultimatesin3544
    @ultimatesin3544 Před 6 lety +1

    What is the point of visited hashset in your BFS implementation? You aren't ever using it for anything (just continuing).. ?

    • @KaranSingh-ge7wz
      @KaranSingh-ge7wz Před 5 lety +1

      to avoid an infinite loop sort of scenario? so that we dont check on a node that has already been checked*

  • @hernanvelazquez1421
    @hernanvelazquez1421 Před 2 lety

    I did not see that she used nodeLookup (the hashMap at the beginning). :(

  • @i_me_asra
    @i_me_asra Před 2 lety

    For DFS, I think there should be a null check since it is possible that there are no children to a node - i.e. the leaf node.

  • @youngcitybandit
    @youngcitybandit Před 5 lety

    What was the point of that continue if statement for bfs??? Also wouldnt you NOT want to add the node to "visited" if its already inside visited???

    • @MrJeffFeng
      @MrJeffFeng Před 5 lety

      Continue skips to the while loop again. If you have already visited this node there is no need to add their child again.

    • @youngcitybandit
      @youngcitybandit Před 5 lety

      @@MrJeffFeng oh woops completely forgot. Thanks

  • @m0tivati0n71
    @m0tivati0n71 Před 3 lety

    Did anyone manage to make this work? and has the complete code.

  • @bargmedia936
    @bargmedia936 Před 4 lety

    where from did you get s and t and a, stay consistent with your graph labels

    • @user-vl4do1fs5r
      @user-vl4do1fs5r Před 2 lety

      I think 's', 't', 'a' are the alias of the node. "graph labels" inside of the circle are the node values, could be anything, integers, strings,etc. In this case it just happened to be letters. for example, from node s to node t could mean from New York to Vancouver.

  • @johncanessa2250
    @johncanessa2250 Před 4 lety

    I liked the explanations of DFS and DFS algorithms. Did not like that the entire code was not covered or made available. The description seems to be for a bidirectional graph. If there is a path form G -> H then there should be one form H -> G. The implementation of the addEdge() does not allow for it. When I did my implementation I used letters instead of numbers. Found it easier to follow.