Do you want to learn python from me with a lot of interactive quizzes, and exercises? Here is my project-based python learning course: codebasics.io/courses/python-for-beginner-and-intermediate-learners
This is the only video that I had to watch 2nd time in order to understand. But it is because of the complexity of Graph and my friends tell me that even if you get it in 2nd try, the video maker has done a great job. Thanks Daval, your tutorials are the best.
Thank you for your efforts. As a self-taught learner who had no background in CS until a year ago, videos such as yours are what's helping me believe I can succeed in a new career field.
After completion of data structures sir please dont forget to make videos on algorithms using python because this is really rare to find someone ...your work is awesome please keep going ..we truly rely on you.
I know sir you teach python stuff but never really thought you are this good..I am trying to have this thing in my head for the interviews and the way you taught is beyond excellent..you got a new subscriber..
Wow! You put in a great deal of effort into these videos! Thank you so much! Please, please give us some exercises or problems we can solve on graphs: directed, undirected and weighted types. I've had so much fun working on the previous exercises in this series.
If you have already a method called "get_paths" for getting all possible routes, then you can get the shortest_path by reusing that same method too. This will also show the all possible shortest routes rather than showing just one. "Shortest Path between Mumbai and New York: [['Mumbai', 'Paris', 'New York'], ['Mumbai', 'Dubai', 'New York']]" def get_shortest_path(self, start, end): total_paths = self.get_paths(start,end) shortest_paths = [] for i in total_paths: if len(i) == len(min(total_paths)): shortest_paths.append(i)
return shortest_paths ALSO A BIG THANK YOU @codebasics FOR SHARING ALL YOUR KNOWLEDGE AND HELPING US.
Superb....I have learnt all data structures from your playlist. Your videos are interesting and attractive. THANK YOU SO SO MUCH ❤️❤️❤️❤️ LOVE FROM ANDHRA PRADESH...❤️❤️
this is merging two list in to a single list at the beginning path has a value lets assume "mumbai", second time the sart has another node suppose it is "new york" hence path would be ["mumbai"]+["ne york"] = ["mumbai","new york"]@@faisalabdulkadir9439
Hello, this series has been really helpful in my coding preparation, especially for understanding how to implement different data structures with Python. Could you please upload more videos on graph and also exercises related to it? Your exercises are really amazing:)
Yes Deepika I am actively working on this series. It will have many more videos , your one stop solution for all data structure and algo knowledge. Stay tuned! 👍
One Doubt Sir because I am absolutely a beginner in this. Why we are creating our data in tuples first and then migrating to a dictionary. Why can't we directly declare our values in a dictionary?
Sir your explanation is damn good..we need algorithm also like how to use greedy ,dynamic programming, divide and conquer, branch and bound ,bit manipulation etc..pleaseeeee sirrr
Hi prof, i hope you are very well. We all hope that you consider making other videos about graph and its implementation (EX: weighted graph, graph using adjacancy matrix, ...) And thank you for all your effort, i wish you a great day.
To prevent people from spending 30 mins troubleshooting like me, this is a key difference in the get_paths() method and get_shortest_path() method: get_paths(): if start == end: return [path] get_shortest_path(): if start == end: return path get_paths() returns it's path variable converted to list form, which then allows it to build onto the previous list (Because we're adding additional paths (lists) to eachother). Not the case in get_shortest_path() which is replacing the existing path with a new one, if the new one is shorter than the others. Spent a while trying to figure out why it was returning [['Mumbai','Paris','Dubai','New York']] as the shortest path only to realize it was a list of lists, which had a len==1
Have a look to my code, I tried to implement it before seeing yours, then it worked then checked yours and found it hard to understand haha : def get_paths(self, start, end, path=[ ]): path = path + [start] if start == end: return [path] if start not in self.dict_graph: return [ ] paths = [ ] for node in self.dict_graph[start]: paths += self.get_paths(node, end, path) return paths I think mine looks clear ...
What a great tutorial!! Thanks a lot for another excellent video. I've subscribed to your channel due to the quality of the content and for creating such great visualisations to help us understand these topics. Thanks for sharing.
for weighted graphs can we just sort out the values by the weights in descending and then visit them one by one giving the highest weight the priority??
Hi, just wanted to know that for getting the shortest path, can I just call get_path method and return the list with minimum length. And great videos very nicely explained.
Hey, It is a great tutorial. But I'm wondering why necessarily we have to create a method to find the shortest path when we can easily find it using an instance variable. For example, we could create self.shortest_path and set it to None. Then in the get_paths method, we could update it by simply finding the smallest length of the list inside the paths list. This way it would return both the paths like Mumbai-Paris_NewYork and Mumbai-Dubai-NewYork because their length is three. Also, it would make the coding a lot easier as well.
self in this case is the entire graph of all nodes. To find the shortest path between two specific nodes within that graph, I don't think it makes too much sense to have an attribute self.shortest_path as you'd want to figure out the shortest path between two nodes within the graph, not the shortest path on the entire graph (Which will always be len == 1). But I agree that this would have been easily done by just using the get_paths method, though I'd guess he wanted to show another example of recursion for educational reasons.
Wow...looks interesting. I must be related to PERT -CPM methods of scheduling [from mathematics/Operations research] similarly, I found Tree data structure analogous to decision tree in ML
Hi Grate video. I think the code to getpaths needs one small change to accommodate paths between 'newyork' and 'torento'. path=path+[start] # if start not in self.graphs_dict: # return [] if start==end: return [path] paths=[] if start in self.graphs_dict: for node in self.graphs_dict[start]: if node not in path: new_paths=self.paths(node,end,path) for i in new_paths: paths.append(i) return paths Please correct me if am wrong. Thanks in advance
Thank you for providing such useful content for Non-CS background learners. I want to suggest one edit in a code that is in the get_path() using for loop for appending p from new_paths to paths(list) can't we directly use paths = paths+new_paths and then return paths it might decrease the time complexity as there will be addition operation to list instead of nested for loops in get_path function reducing the time complexity.
edit I tried to calculate the time required to execute both the codes: Actual code time = 0.000984668 Suggested code time = 0.0007658 P.S I am not criticizing just asking as I have learned about time complexity from your tutorials only.
Sir i'm new in your youtube channel and found your videos really helpful and informative... But sir i wanna a request to you that is i'm so much interested in competitive programming and solving algorithms so can you plz make a video on that it will be really helpful if you do Btw thanks for this awesome videos :)
I will upload probably 10, more tutorials on graph alone. There are many concepts to cover such graph traversal, dijikstra's algo, graph representation etc, wanted to start with something simple and cover advanced topics as we go
Hi.. This is amazing.. Thank you for making these videos.. I just wanted to crosscheck something with you. In the get_shortest_path() method, will it be a good idea to call the get_paths() method, sort the returned list, and print the paths that have the least length?.. Or will it have any downside to it, which I might be missing..
Hi I have an issue at time 11.41min of the video as I am unable to run the code on my code editor which is visual studio code. I end up getting: ValueError: too many values to unpack (expected 2)
Do you want to learn python from me with a lot of interactive quizzes, and exercises? Here is my project-based python learning course: codebasics.io/courses/python-for-beginner-and-intermediate-learners
my favorite tree is the trie i use it for everything !
This is the only video that I had to watch 2nd time in order to understand. But it is because of the complexity of Graph and my friends tell me that even if you get it in 2nd try, the video maker has done a great job. Thanks Daval, your tutorials are the best.
👍🙏
Thank you for your efforts. As a self-taught learner who had no background in CS until a year ago, videos such as yours are what's helping me believe I can succeed in a new career field.
parben apni inshallah
After completion of data structures sir please dont forget to make videos on algorithms using python because this is really rare to find someone ...your work is awesome please keep going ..we truly rely on you.
Yes sure. I am going to make this series complete by covering almost all the concepts in DS and algorithms
I know sir you teach python stuff but never really thought you are this good..I am trying to have this thing in my head for the interviews and the way you taught is beyond excellent..you got a new subscriber..
Sir, please make a playlist on Algorithms with Python.
Love from India🇮🇳
You made data structures like a elementary school subject. I feel so comfortable when you are teaching it sir❤❤
Glad it was helpful!
pls can u explain why he did path = path + [start] and how does it work recursively?
Wow! You put in a great deal of effort into these videos! Thank you so much!
Please, please give us some exercises or problems we can solve on graphs: directed, undirected and weighted types.
I've had so much fun working on the previous exercises in this series.
This is hands down the best intro to graphs in python I've come across. Amazing work, dude!
This playlist helped me understand DSA more deeply. Thanks for making it look more easy.
Glad it was helpful!
If you have already a method called "get_paths" for getting all possible routes, then you can get the shortest_path by reusing that same method too. This will also show the all possible shortest routes rather than showing just one.
"Shortest Path between Mumbai and New York: [['Mumbai', 'Paris', 'New York'], ['Mumbai', 'Dubai', 'New York']]"
def get_shortest_path(self, start, end):
total_paths = self.get_paths(start,end)
shortest_paths = []
for i in total_paths:
if len(i) == len(min(total_paths)):
shortest_paths.append(i)
return shortest_paths
ALSO A BIG THANK YOU @codebasics FOR SHARING ALL YOUR KNOWLEDGE AND HELPING US.
pls can u explain why he did path = path + [start] and how does it work recursively?
Thank you, awaiting for graphs.....and waiting for Algos.....and also you are the best DSA teacher out there
Your efforts never waste... alwayzzz will give thumbs up....
Bro you are helping me a lot on passing my DS class. Thanks so much
Sir You are really doing a great job, lectures are excellent .Keep up the good work.
Superb....I have learnt all data structures from your playlist. Your videos are interesting and attractive.
THANK YOU SO SO MUCH ❤️❤️❤️❤️
LOVE FROM ANDHRA PRADESH...❤️❤️
Thanks and welcome
I've implemented this long ago but did not know this was called Graph. Thanks for deep insights.
pls can u explain why he did path = path + [start] and how does it work recursively?
this is merging two list in to a single list at the beginning path has a value lets assume "mumbai", second time the sart has another node suppose it is "new york" hence path would be ["mumbai"]+["ne york"] = ["mumbai","new york"]@@faisalabdulkadir9439
What a wonderful and patience video!!!!!! Thanks again!!!! 🤸♂️
Sometimes you explain complex things very simply with more basic data.
Finally, I can say I know DSA ..........
thank you sir for such a good explanation
Mauj kardi
This was one of the best DSA series I have seen! It has helped me a lot!!
pls can u explain why he did path = path + [start] and how does it work recursively?
Thank you a lot for this fantastic course
Hello, this series has been really helpful in my coding preparation, especially for understanding how to implement different data structures with Python. Could you please upload more videos on graph and also exercises related to it? Your exercises are really amazing:)
Yes Deepika I am actively working on this series. It will have many more videos , your one stop solution for all data structure and algo knowledge. Stay tuned! 👍
Thank you for breaking it all down clearly
☺️👍
please make a detailed video for all the concepts of graph
Thanks a lot, sir this help me alot
It's really about recursion. If you understand recursion well it's not difficult to understand otherwise it's a struggle.
hello , thanks for your efforts ,
but did you upload the part for weighted graphs ?
One Doubt Sir because I am absolutely a beginner in this. Why we are creating our data in tuples first and then migrating to a dictionary. Why can't we directly declare our values in a dictionary?
Sir your explanation is damn good..we need algorithm also like how to use greedy ,dynamic programming, divide and conquer, branch and bound ,bit manipulation etc..pleaseeeee sirrr
yes i am going to add many more tutorials in this series.
Hi prof, i hope you are very well.
We all hope that you consider making other videos about graph and its implementation (EX: weighted graph, graph using adjacancy matrix, ...)
And thank you for all your effort, i wish you a great day.
Absolutely fantastic series BIG thumb's up sir.
Hopefully make a playlist of Algorithms as well😍
sure i will add algo videos
Sir jald bhut sare problem ke saath bnaiye video
Waiting for more videos on graphs
In recursion,
For loop goes to index 1 in grap_dict, after append mum, par, dub, ny
...Beauty...
Very helpful Sir. I was wondering if you would come up with more videos and exercises related to graph theory and its implementation.
pls can u explain why he did path = path + [start] and how does it work recursively?
To prevent people from spending 30 mins troubleshooting like me, this is a key difference in the get_paths() method and get_shortest_path() method:
get_paths():
if start == end:
return [path]
get_shortest_path():
if start == end:
return path
get_paths() returns it's path variable converted to list form, which then allows it to build onto the previous list (Because we're adding additional paths (lists) to eachother). Not the case in get_shortest_path() which is replacing the existing path with a new one, if the new one is shorter than the others.
Spent a while trying to figure out why it was returning [['Mumbai','Paris','Dubai','New York']] as the shortest path only to realize it was a list of lists, which had a len==1
pls can u explain why he did paths = paths + [start]
Thanks for the video sir! I'm glad I have finished all the basic knowledge in data structure( Of course I have done the excercise lol)
love this playlist. Keep continuing this!. Thank you
best DS tutorials 💯💯
line 5 to 10 can be reduced as below :)
for start, end in self.edges:
self.graph_dict.setdefault(start, []).append(end)
print(self.graph_dict)
pls can u explain why he did path = path + [start] and how does it work recursively?
Sir please make all further videos related to the graph
Have a look to my code, I tried to implement it before seeing yours, then it worked then checked yours and found it hard to understand haha :
def get_paths(self, start, end, path=[ ]):
path = path + [start]
if start == end:
return [path]
if start not in self.dict_graph:
return [ ]
paths = [ ]
for node in self.dict_graph[start]:
paths += self.get_paths(node, end, path)
return paths
I think mine looks clear ...
amazing explanation, thank you very much.
Glad it was helpful!
It was very well explained and I liked it very much..... Well Explained
Is there any video on BFS and DFS???
Have you made a graph algorithems specific course (in python)?
Please Make Some More Videos on Graph.
Very nice explanation!!! Any more graph videos teaching traversals?
Great video. Thanks!
Sir please make a video on artificial intelligence coding.........
Only for u I have understood machine learning from ur video...❤️❤️❤️🔥
Pls Continue with Weighted graphs , DFS and BFS in Graphs
Nicely explained.
Great video as usual,Thanks
I was hoping for the exercise! Anyways, thank you for all your efforts, learnt a lot from you and specially those exercises, thank you sir!
More graph videos please 🙏
Great Educational content ❤
I am happy this was helpful to you.
Excellent tutorial! good explanation very easy to understand! Thanks for creating this.
😊👍
Thanks for the clear video
Glad it was helpful!
Please reply to me if you have made more videos on graph.
I didn't find them
Thank you for your efforts. Great help!
Maaan !!! Recursion is a hard concept to wrap your head around. Please suggest some source to practice this skill.
Thank You :>
is there any chance you could extend by adding visualization of these graphs?
Thx for tutorial and are you going to add new videos about graph ?
Can you make a Java algorithm playlist? Java is my first language that's why it's easier for me understand.
whats the need of creating paths when it gives the same thing as in new_paths?
You are doing a great job. Thanks so much
Did you ever cover weighted graphs?
What a great tutorial!! Thanks a lot for another excellent video. I've subscribed to your channel due to the quality of the content and for creating such great visualisations to help us understand these topics. Thanks for sharing.
Thanks for the sub!
Nice explanation
sir your series is great and you are doing such a good work for students like us :) God Bless you immensely.
I am happy this was helpful to you.
for weighted graphs can we just sort out the values by the weights in descending and then visit them one by one giving the highest weight the priority??
hello sir loved your video, please let me know when the series on weighted graph and algo will come
Hi, For the shortest path, can we just call get_paths(start, end) and return the one with the shortest length among those?
is it convinient to find shortest_path by first finding list of all possible paths and then fetch the element which has lowest length
Hello Sir, can you please create a video developing of project using only DSA ?
Hi, just wanted to know that for getting the shortest path, can I just call get_path method and return the list with minimum length. And great videos very nicely explained.
Yes I was thinking the same as well.
The question is which way is more computation intense. Do you happen to find an answer to this?
thanku sir keep uploading such videos ....loved your effort
Hey, It is a great tutorial. But I'm wondering why necessarily we have to create a method to find the shortest path when we can easily find it using an instance variable. For example, we could create self.shortest_path and set it to None. Then in the get_paths method, we could update it by simply finding the smallest length of the list inside the paths list. This way it would return both the paths like Mumbai-Paris_NewYork and Mumbai-Dubai-NewYork because their length is three. Also, it would make the coding a lot easier as well.
self in this case is the entire graph of all nodes. To find the shortest path between two specific nodes within that graph, I don't think it makes too much sense to have an attribute self.shortest_path as you'd want to figure out the shortest path between two nodes within the graph, not the shortest path on the entire graph (Which will always be len == 1).
But I agree that this would have been easily done by just using the get_paths method, though I'd guess he wanted to show another example of recursion for educational reasons.
love your video and waiting for more
Wow...looks interesting. I must be related to PERT -CPM methods of scheduling [from mathematics/Operations research]
similarly, I found Tree data structure analogous to decision tree in ML
When will we see more videos on graphs?
Hi
Grate video. I think the code to getpaths needs one small change to accommodate paths between 'newyork' and 'torento'.
path=path+[start]
# if start not in self.graphs_dict:
# return []
if start==end:
return [path]
paths=[]
if start in self.graphs_dict:
for node in self.graphs_dict[start]:
if node not in path:
new_paths=self.paths(node,end,path)
for i in new_paths:
paths.append(i)
return paths
Please correct me if am wrong.
Thanks in advance
That was helpful! Thank you!
Glad it was helpful!
This is good.Thanks.
Glad you like it!
Can I use djikstra algorithm with this format?
Sir how many videos will be there in this series!??
Thank you for providing such useful content for Non-CS background learners. I want to suggest one edit in a code that is in the get_path() using for loop for appending p from new_paths to paths(list) can't we directly use paths = paths+new_paths and then return paths it might decrease the time complexity as there will be addition operation to list instead of nested for loops in get_path function reducing the time complexity.
edit I tried to calculate the time required to execute both the codes:
Actual code time = 0.000984668
Suggested code time = 0.0007658
P.S I am not criticizing just asking as I have learned about time complexity from your tutorials only.
Hey nice video buddy, thank you very much for the video!
Glad you liked it!
Sir i'm new in your youtube channel and found your videos really helpful and informative...
But sir i wanna a request to you that is i'm so much interested in competitive programming and solving algorithms so can you plz make a video on that it will be really helpful if you do
Btw thanks for this awesome videos :)
Missed the excericse for this Video :( Waiting for future videos on Graphs
is it ok if we get shortest path using getpaths method. LIke after getting list of all paths, can I take a list which is having lesser cities
Hey Dhaval, I hope your health's great now. Great vid, could've done with a little more theory though. cheers!
I will upload probably 10, more tutorials on graph alone. There are many concepts to cover such graph traversal, dijikstra's algo, graph representation etc, wanted to start with something simple and cover advanced topics as we go
@@codebasics Great!
very good!
very nice
Hi.. This is amazing.. Thank you for making these videos.. I just wanted to crosscheck something with you. In the get_shortest_path() method, will it be a good idea to call the get_paths() method, sort the returned list, and print the paths that have the least length?.. Or will it have any downside to it, which I might be missing..
I have same question as well. Did you find the answer?
4:23 Mumbai --> Boston ---> Hartford ---> New York should be 5300, not 5120. Correct?
Hi I have an issue at time 11.41min of the video as I am unable to run the code on my code editor which is visual studio code. I end up getting:
ValueError: too many values to unpack (expected 2)
nice one!
for shortest_path is it inefficient if u just use min(get_paths ... , key=len)
Can anyone please explain me how shortest_path is working out here ? Unable to understand that
Can anyone tell me the software sir used for compiling the code and debugging it? Plzs ,TThanks
pycharm community edition. You can download it for free.. just google it
@@codebasics Thanks sir!!!