Тёмный

Breadth First Search Algorithm | Shortest Path | Graph Theory 

WilliamFiset
Подписаться 179 тыс.
Просмотров 689 тыс.
50% 1

Опубликовано:

 

6 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 204   
@sarahzhang8258
@sarahzhang8258 4 года назад
the best explanation I 've seen fo far. Simple, clear, and focus without redundant words. Saving a lot of time. Love it and subscribed
@shadmansudipto7287
@shadmansudipto7287 3 года назад
Agreed
@alnnvk3186
@alnnvk3186 3 года назад
@Louis Jesse dude you chose the wrong type of people to dump your bs on. computer scientists dgaf about your animal relations.
@shemsnow3711
@shemsnow3711 2 года назад
Wow this is such a basic concept I can't believe my teacher couldn't explain it. He just gave us actual code to start out with. Universities seriously need to stop hiring grad students as teachers.
@dannyfogel9156
@dannyfogel9156 4 года назад
Thank you so much!! As a really confused CS student who just started algorithms course this helped me a lot!
@cam7minus1
@cam7minus1 2 года назад
You turned 2 hours of confusing lectures into a simple 7 minute video. Thank you!
@Andrei-ds8qv
@Andrei-ds8qv 3 года назад
Trying for 3 hours to do it myself, came here to see the solution. I forgot the prev array, and In fact even If I visited the whole graph and found the final node, didn't know how to reconstruct everything :D Thanks a lot
@murnoth
@murnoth Год назад
You're one of the few explaining it with an end node and path reconstruct. Thank you!
@cynderellylastname6060
@cynderellylastname6060 4 месяца назад
Wow this is by far the most understandable explanation of this concept that I've seen. Thank you!
@MrKingoverall
@MrKingoverall 4 года назад
I appreciate the effort you put into making these tutorials man. You are the best.
@hk32100c18
@hk32100c18 5 лет назад
You have saved my academic.
@expansivegymnast1020
@expansivegymnast1020 3 года назад
Good explanation. That queue drawing finally helped me get it.
@yadav-r
@yadav-r 2 года назад
Wow, so many great tutors on the internet already, but you have explained it in a very digestible manner, thank you for your service, this helped me in getting my first dev job.
@GovinthanKSAIML
@GovinthanKSAIML 4 месяца назад
Best explanation ever, hope to see more videos like this from you William! Keep up the good work
@drygordspellweaver8761
@drygordspellweaver8761 Год назад
Currently implementing this "in the wild". Good to see that the "right" way to do it is pretty much what I figured out
@viveksuman9600
@viveksuman9600 2 года назад
Your animation just clicked it for me. Awesome :)
@stunning-computer-99
@stunning-computer-99 5 лет назад
That's a fantastic explanation. re watching BFS for my job interview. thanks mate.
@CloroxBleach-hi6jd
@CloroxBleach-hi6jd 5 лет назад
why the fuck do you need to know that shit for a job interview. Is the interviewer gonna give you a algorithm exam.
@ade1819
@ade1819 5 лет назад
@@CloroxBleach-hi6jd Plenty of job interviews go over your data structure and algorithms knowledge...
@CloroxBleach-hi6jd
@CloroxBleach-hi6jd 5 лет назад
@@ade1819 That's bullshit, if you have the degree than you've taken the class. Fuck algorithms anyway, coding is fun but algorithms are confusing shit
@hungp9227
@hungp9227 5 лет назад
@@CloroxBleach-hi6jd this is why companies don't hire you
@CloroxBleach-hi6jd
@CloroxBleach-hi6jd 5 лет назад
@@hungp9227 I haven't applied dumbass, retarded companies will want you to answer their stupid fucking algorithm questions and give you a job that has nothing to do with algorithms. That's why algorithms are shit
@sukhrobgolibboev
@sukhrobgolibboev 5 лет назад
This is the best explanation I've seen so far. Thank you!
@jamespottex5197
@jamespottex5197 4 года назад
Best Explanation and Representation for BFS topic on RU-vid...
@WingedGlider
@WingedGlider 2 года назад
I love these ones that focus on the actual useful abstraction instead of trying to explain it concretely in mathematics. If I didn't understand the abstract, I wouldn't be studying computer science! Stop putting the cart before the horse!
@chuckchen2851
@chuckchen2851 3 года назад
Crystal clear explanation. Many implementation details well covered!
@Marketblank
@Marketblank Месяц назад
This Channel is really Helpful and informative and explained very well
@cebenbb
@cebenbb 4 года назад
Hey, important little thing: krep some padding at the bottom becos of the sub. I watch videos with subs, and i could not see the bottom of the graph. Aaaand, cool video :)
@RYANCARNEY-dc2qe
@RYANCARNEY-dc2qe Месяц назад
Why can't everyone just explain it like this 😂 Fully understood within 3 minutes
@andrewfrenir
@andrewfrenir 2 года назад
The best video about BFS I've watched! Thanks I already understand it! :D
@yolowex6876
@yolowex6876 2 года назад
The first half was totally understandable. and the other half... also understandable
@matheuscosta5330
@matheuscosta5330 3 года назад
this video is a miracle of learning
@panagiotistzakis6799
@panagiotistzakis6799 Год назад
Thanks for your time sir ...the best and simple explanation .
@VOLTDOGmusic
@VOLTDOGmusic 5 лет назад
Great video! Do you mind explaining how the for loop in the reconstructPath method works? Specifically, for(at = e; at != null; at = prev[at]) How is this being updated to continue thru the loop? Thanks again, William!
@WilliamFiset-videos
@WilliamFiset-videos 5 лет назад
Yeah, the prev array at index i (i.e prev[i]) contains the index of the node used to get to node i. To reconstruct the path we work backwards from the end node 'e' until we reach the start node. The start node does not have a parent so that's why we have 'at != null' as the end condition. Each iteration of the loop you trace back one node, this is 'at = prev[at]'.
@VOLTDOGmusic
@VOLTDOGmusic 5 лет назад
@@WilliamFiset-videos Thanks William! Really appreciate the reply! Keep up the great work!!
@bl4ck21
@bl4ck21 4 года назад
@@WilliamFiset-videos thanks I also got stuck there
@softwarecraftsman3091
@softwarecraftsman3091 2 года назад
@@bl4ck21 In the first iteration, at =e. In the second iteration, at = prev[at]. Each time, at is incrementally progressed to prev[at].
@efrainm4649
@efrainm4649 2 года назад
This was extremely useful. Thanks! Keep working this way!
@zeekcom12
@zeekcom12 2 года назад
Holy crap the queue example is perfect
@xeniaioannidou8811
@xeniaioannidou8811 4 года назад
Very good explanation and it is nice that you added pseudocode !!!!
@shanedetsch
@shanedetsch 3 года назад
Should not the reconstructPath function definition have ( if at == s { break; } ) in the for loop?
@aayush5474
@aayush5474 3 года назад
I could listen to your voice all day
@jonathanbenavidesvallejo2870
@jonathanbenavidesvallejo2870 4 года назад
You are a legend! Best explanation ever!
@angiishere
@angiishere 2 года назад
I am late to the Party but i want to say: Great Tutorial! Exactly what i needed!
@unlucky-777
@unlucky-777 2 года назад
Thanks for the easy and understandable explanation
@anhmai81
@anhmai81 3 месяца назад
this is an awesome explanation. Thank you very much.
@biaojin5188
@biaojin5188 4 года назад
hi thanks for the very clear explaination, but I cannot find the code where we are trying to find the Min or max path from S to E
@meeba-dev
@meeba-dev 3 года назад
Thank you very much William. You are the best!
@aditya7955
@aditya7955 6 лет назад
Awesome videos william. can you maybe discuss this problem. there are 'n' nodes and 'm' edges in a graph. each node may or may not contain certain number of a item. all nodes have same item but different number of that item. we have to go from source to destination in minimum time collecting 'k' number of this item. each edge is weighted,weights may or may not be same. there are no self loops. edges are bidirectional.
@WilliamFiset-videos
@WilliamFiset-videos 6 лет назад
I'm not sure i'm going to cover that problem per se but can you provide a link to the problem?
@rodrigo10239
@rodrigo10239 4 года назад
Best explanation possible. Thanks a lot!
@tkstudiox
@tkstudiox 4 года назад
Great video! Thaaanks for the clear explanation.
@RobertCorrington
@RobertCorrington 3 года назад
The visited queue would contain ALL of the neighbors that were visited, right? How would simply reversing the visited queue give you the shortest path? There would be visited neighbors in the queue that were not along the shortest path. How do you prune out those suboptimal neighbors?
@FounderBR
@FounderBR 2 года назад
Thank you so much, it helped a lot! Great video and explanation! (Greetings from Brazil!)
@scienceboy20814
@scienceboy20814 4 года назад
How do you know that you are following the shortest path when you reconstruct the path from e? What if there was more than one path to e? Wouldn't the last path to reach e be the one that is set in prev?
@silviogames
@silviogames 4 года назад
since e is put into the visited array, prev would not be overwritten. I also wondered why always the shortest path is found but since the algorithm is filling the search field from s to e, as soon as e is reached, it has to be the shortest path. all resulting paths are parallely searched on step further so the shortest path to e will always emerge.
@An-wd9kk
@An-wd9kk 3 года назад
@@silviogames So I interpret your explanation as that the FIRST path being found is the SHORTEST path. Is this correct? And this is achieved by the layering and queueing concept of BFS. The path found first is the path found at the lowest layer (closest to the source node).
@silviogames
@silviogames 3 года назад
@@An-wd9kk yeah. lets assume there exist 3 paths to the goal but the algorithm will always move one step at a time so the first that wins has to be the shortest. the others will either be same length or longer
@An-wd9kk
@An-wd9kk 3 года назад
@@silviogames yes thank you for your answer.
@emin6626
@emin6626 Год назад
@@silviogames I was trying to understand since two days and you exactly saved me. Thanks for explanation.
@yashshah1764
@yashshah1764 3 года назад
Thank you bhai! I am grateful for your teachings
@FINSuojeluskunta
@FINSuojeluskunta 4 года назад
I think this one could use a little bit better explanation at the start. DFS is pretty obvious and intuitive but this one left me kind of wondering exactly how a BFS gets you the shortest path.
@vikranttandon6253
@vikranttandon6253 4 года назад
Do it with an example, it'll be much more clearer.
@jomalomal
@jomalomal 2 года назад
I completely agree. It took me a while to realize that when constructing the prev array we're basically calculating the shortest path to any given node in the graph from the start one.
@richirossel329
@richirossel329 Год назад
@@jomalomal Everything is probably right in the video but i don't understand what happens (or rather how the right thing would happen) when a node has multiple parent nodes, as only one parent node is is saved in the prev list? And after the first parent node is saved, the "kid" node won't be visited anymore to save any other parent nodes.
@archiexzzz
@archiexzzz 3 года назад
Best explanation
@gabrielearle1678
@gabrielearle1678 3 года назад
thanks man, amazing video. so straightforward and useful!
@robbylinson4868
@robbylinson4868 Год назад
Why do we start at 9 after 0? would we not start at 7? how do we determine the order things are added to the queue
@anhmai81
@anhmai81 3 месяца назад
Thanks!
@momke8169
@momke8169 4 месяца назад
brilliant video thanks
@albert21994
@albert21994 4 года назад
Your videos are the best on graph theory!
@SatishKumar-jb9qm
@SatishKumar-jb9qm 3 года назад
Thank you - this was easy to understand.
@Hajjat
@Hajjat 5 лет назад
Quality vids.. Subscribed. Thanks for your time and effort!
@surfingweb1315
@surfingweb1315 4 месяца назад
we need an order, right ? it goes like we start from the smallest number to the biggest or backward, am i right ?
@Leon-pn6rb
@Leon-pn6rb 2 года назад
It was nice uptill midway, You didn't show, via diagram, the reconstruct path method logic. What happens after 3:00 ?
@MrSanjaychetwani
@MrSanjaychetwani Год назад
Thank you, this was very helpful!
@nickharalampopoulos
@nickharalampopoulos 5 лет назад
Excellent video! Just a question. The prev array will contain ALL the visited nodes. I can not see how the reconstruct method will return the fastest path. Can anyone explain please?
@WilliamFiset-videos
@WilliamFiset-videos 5 лет назад
True, the prev array contains all nodes, but we're only reconstructing the shortest path between s and e. When we reconstruct the path we begin at e and add the node we used to get to e when we did the BFS (this is prev [e]), then we do the same thing and add prev[prev[e]] to shortest path and so on until we reach s. This will not visit all nodes -- except in the worst case (e.g your graph is a a straight line)
@gruuvy8067
@gruuvy8067 4 года назад
@@WilliamFiset-videos Hi, this is a little bit late, but I am having trouble understanding how we know which node was the one that led to e, when "prev" seems to hold all the nodes?
@nmamano
@nmamano 4 года назад
@@gruuvy8067 The BFS search creates what is called a "BFS tree". The root is the starting node s, and the edges in the tree represent that from a node we visited another node. "prev" maps each node to its parent in the BFS tree. By starting at a node e and following the sequence of parents in the BFS tree, we arrive at the start node s in the shortest number of steps.
@roberthoffenheim7861
@roberthoffenheim7861 3 года назад
@@gruuvy8067 In the prev array, you start with searching for the value of the e'th (e is the ending node) index, this value is the node preceding e in the shortest path from s to e. Use that value as the next index to search for in the prev array and so on till you reach the start node s.
@sector1734
@sector1734 2 года назад
@@roberthoffenheim7861 why not come to a grinding halt when you hit the end node in function 'solve' - instead of doing all nodes in the try, which seems inefficient
@ut9910
@ut9910 3 года назад
Awesome explanation easy to understand , animations are great to follow along.Liked 👍and subscribed
@LakshmikanthAyyadevara
@LakshmikanthAyyadevara 4 года назад
best explanation!!!!!! may god bless you
@kamalulazmim3820
@kamalulazmim3820 3 года назад
Very clear, thank you so much!
@ParasFtl
@ParasFtl 2 года назад
How can we be sure that this is the shortest path?
@hezziacGames
@hezziacGames 4 месяца назад
Been a whole year 🤣 idek
@xxozmozxx
@xxozmozxx 5 лет назад
thank you sir very helpful but if you talk about algorithm analysis more it would be better.
@FireboxTrainingCourses
@FireboxTrainingCourses 3 года назад
Awesome video - thank you!
@muuubiee
@muuubiee 2 года назад
"pseudocode" right... that my dear, is called python.
@prajaktadeokule781
@prajaktadeokule781 3 года назад
thanks for the amazing explanation!
@shashankesh
@shashankesh 3 года назад
What if there are multiple shortest path for s to e? And I want to retrieve all of them.
@parasarora5869
@parasarora5869 5 лет назад
thank you so much !! 😄 ... awesome video 👍
@rakeshv1490
@rakeshv1490 2 года назад
Great videos. Thank you so much.
@kartikkalani6306
@kartikkalani6306 Год назад
Thank you sir🙏
@Junglemunky
@Junglemunky 11 месяцев назад
When adding the root node's neighbours to the queue, why does it not go in an order (e.g. smallest to largest or vice versa). Is this algorithm just trying to visit every node in the graph as quick as it can?
@WilliamFiset-videos
@WilliamFiset-videos 11 месяцев назад
The algorithm will try to explore the entire graph in a breadth first manner. The order in which you add the roots neighbors to the queue doesn't matter for exploration purposes
@Junglemunky
@Junglemunky 11 месяцев назад
@@WilliamFiset-videos right, thank you 👍
@IamKarthraj
@IamKarthraj Год назад
Cant thank enough for this !!!
@JishnuLOL
@JishnuLOL Год назад
Just keep it up. Nice videos
@ic6406
@ic6406 9 месяцев назад
Animation for path memorizing/reconstruction would be highly appreciated
@parkerbelholland1037
@parkerbelholland1037 2 года назад
Around 4:50 you mention "value at index i". Sorry, what is the index i? Just trying to understand
@karthicksabhapathy993
@karthicksabhapathy993 4 года назад
Hi, i have a doubt. Since the values are marked from 0-12, graph.get(node) works perfectly considering the node value is the index value. What if the values aren't like this? Instead of graph.get(node), do we run a for loop to find? Please help & Nice video btw. :)
@arvindojha1101
@arvindojha1101 4 года назад
you can map the node value while constructing the the graph using adjacency list or adj matrix.
@happysquirrelwhats-tube8768
@happysquirrelwhats-tube8768 2 года назад
Best of the best! thank you
@vinittodai911
@vinittodai911 2 года назад
One of the best!
@ezlyfe9762
@ezlyfe9762 4 года назад
someone i can understand thank god
@ramansarabha871
@ramansarabha871 Год назад
Thanks! You're godsend!
@farruhhabibullaev5316
@farruhhabibullaev5316 4 года назад
Best explanation!
@curiousmind2330
@curiousmind2330 Год назад
Can you please help me...which tool you used for making graphs....I have to make them for my project and your diagrams are very clear 😀
@WilliamFiset-videos
@WilliamFiset-videos Год назад
Keynote
@curiousmind2330
@curiousmind2330 Год назад
@@WilliamFiset-videos thank you so much
@g3nko0
@g3nko0 2 года назад
I didn't get it how path recreation in your code sample helps to find shortest path, looks like you just traverse it back as it was stored but there could be multiple ways to reach the same cell on the way, especially in case with diagonals and its not evident in your code how you address such issue. I am not seeing it in area about writing into the prev table and not at area where the previous node is read from it. So basically it should be dijkstra.
@adamhughes9938
@adamhughes9938 4 года назад
Am I missing something or did this not actually talk about how to get the shortest path from BFS? Or did I just lose track? I followed the initial visualization (very helpful) but that didn't show the shortest path right?
@euclid9492
@euclid9492 4 года назад
If you look in reconstructPath towards the end around @7:00 and observe that first for loop closely, it starts at the end node, records it and goes to its parent in prev, then it calls that parents prev until null and the only one that should have null listed in prev is the original node s. So by only jumping from child to parent, from end to start this IS the shortest path once we reverse it.
@An-wd9kk
@An-wd9kk 3 года назад
@@euclid9492 I don't understand your "only jumping from child to parent" argument. It only implies that the path is non-cyclic or straightforward. It does not imply shortest path. Both path a->b->c and a->d->f->c satisfy that we jump from parent to child, but the former is clearly the shorter path.
@euclid9492
@euclid9492 3 года назад
@@An-wd9kk That is correct if we are only looking at the reconstruct path function. What we need to remember though, is how we mapped the child to parent INITIALLY in the phase before that. We check a nodes immediate neighbors first so there is no way to get shorter than that. Once a node is visited, it’s parent is recorded and will not be overwritten. Because of this, sure a longer path could exist, but because of the way we stepped out checking immediate neighbors first, the path that we get will be guaranteed to be the shortest path. I had to follow this out on a whiteboard before it clicked, if you have time, I’d recommend doing the same! Hope that clears it up a bit.
@excitingfruit
@excitingfruit 3 года назад
@@euclid9492 Thank you
@richirossel329
@richirossel329 Год назад
@@euclid9492 Everything is probably right in the video but i don't understand what happens (or rather how the right thing would happen) when a node has multiple parent nodes, as only one parent node is is saved in the prev list? And after the first parent node is saved, the "kid" node won't be visited anymore to save any other parent nodes.
@petrotkach8757
@petrotkach8757 3 года назад
Hello! Why don't you check neighbours for null here 5:42?
@shahidsiddiqui7152
@shahidsiddiqui7152 3 года назад
beautiful explanation :)
@rohitkinha3566
@rohitkinha3566 Год назад
How do u create suuch presentation
@apidas
@apidas 3 года назад
the reconstruct path is not very clear. why you use an array of n and fill with null in between and how you reconstruct them in your for loop
@jff711
@jff711 2 года назад
Thank you!
@geneieesqueda8323
@geneieesqueda8323 2 года назад
At 2:07, why is 9 visited first instead of 7?
@timarnold5510
@timarnold5510 2 года назад
it seems you are going through all nodes in the tree in the solve function. why not come to a halt when you reach the node 'E' ?
@timarnold5510
@timarnold5510 2 года назад
your pseudo code looks a bit similar to what is on wiki, except on the wiki page they stop as soon as they reach the goal. you are making a tree from the entire graph which seems not efficient. just stop when you get to the end node.
@lkilgoretrout
@lkilgoretrout 2 года назад
Cool video. Your variable names are super confusing though.
@oleksandrtkach416
@oleksandrtkach416 3 года назад
Complexity O(V + E) for directed graph, right? For undirected O(V + 2E). Correct me if I am wrong)
@roberthoffenheim7861
@roberthoffenheim7861 3 года назад
Big O takes care of the constants :)
@briannguyen5057
@briannguyen5057 3 года назад
very helpful!
@anwarulbashirshuaib5673
@anwarulbashirshuaib5673 3 года назад
5:27 shouldn't you add the node you just dequeued to the visited list, so that it won't get added to the queue again in the following iterations?
@siddharthshukla4338
@siddharthshukla4338 3 года назад
We have marked it as visited before starting the while loop
@bhanuchirutha
@bhanuchirutha 3 года назад
explanation is ok code is complicated
@jubjubfriend64
@jubjubfriend64 4 года назад
Can you explain why it's not O(nlogn + m)? is it because each time you add or remove a node from a queue it's logx time (rather than logn)? so you're effectively doing n number of logx operations which round down to n number of primitive operations? ... like log(|Q|) < log(N) < N
@WilliamFiset-videos
@WilliamFiset-videos 4 года назад
Adding and removing from the queue is O(1). I think you're confusing a queue with a priority queue.
@jubjubfriend64
@jubjubfriend64 4 года назад
@@WilliamFiset-videos Right! sorry I was somehow only thinking of priority queues (binomial and binary heaps) forgot about the properties of a simple linear queue! Thanks a bunch William!!
@gvsharma2643
@gvsharma2643 4 года назад
This is awesome
@huidihu7498
@huidihu7498 3 года назад
you are a legend
@akashkakumani4036
@akashkakumani4036 5 лет назад
Just a question, why not make prev a hash table? and then we can even get rid of visited. If the presence of a node is in the prev table, then it's already been visited.
@WilliamFiset-videos
@WilliamFiset-videos 5 лет назад
When you have a fixed number of elements which can be indexed an array serves as a faster hashmap with builtin indexing.
@thefreakingmindistaken
@thefreakingmindistaken 5 лет назад
@@WilliamFiset-videos Cant we do this. Create a Hashmap. then put something like map.put(s, new LinkedList) and then track all visited in an Array. In this case we will be simply traversing. A bit of generic approach.
Далее
Breadth First Search grid shortest path | Graph Theory
16:51
Depth First Search Algorithm | Graph Theory
10:20
Просмотров 458 тыс.
Прохожу маску ЭМОЦИИ🙀 #юмор
00:59
Сказала дочке НЕТ!
00:24
Просмотров 733 тыс.
OG Buda - Сабака (A.D.H.D)
02:19
Просмотров 96 тыс.
Learn Depth First Search in 7 minutes ⬇️
7:41
Просмотров 79 тыс.
Lecture 13: Breadth-First Search (BFS)
50:48
Просмотров 701 тыс.
Dijkstra's Shortest Path Algorithm | Graph Theory
24:47
Breadth First Search (BFS): Visualized and Explained
10:41
How Dijkstra's Algorithm Works
8:31
Просмотров 1,3 млн
The hidden beauty of the A* algorithm
19:22
Просмотров 860 тыс.