-
Notifications
You must be signed in to change notification settings - Fork 313
feat: replace Bellman Ford Algorithm with queue version #629
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
pydatastructs/graphs/algorithms.py
Outdated
@@ -700,6 +700,8 @@ def shortest_paths(graph: Graph, algorithm: str, | |||
'bellman_ford' -> Bellman-Ford algorithm as given in [1]. | |||
|
|||
'dijkstra' -> Dijkstra algorithm as given in [2]. | |||
|
|||
'queue_improved_bellman_ford' -> Queue Improved Bellman-Ford algorithm as given in [3]. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Instead of a new one, let's just use Queues in Bellman Ford algorithm itself? Any specific for not doing so?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Instead of a new one, let's just use Queues in Bellman Ford algorithm itself? Any specific for not doing so?
Adding modifications for original Bellman Ford algorithm? Like changing bellman_ford(graph: Graph, start: str, target: str) -> bellman_ford(graph: Graph, start: str, target: str, use_queue=False).
Or change original Bellman Ford to queue version.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If Queue version is always better then use Queue only. What's the difference between running times with and without queues?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The queue-based Bellman-Ford algorithm mainly reduces the number of times relaxation is needed. Especially on sparse graphs, it can significantly decrease the number of edges that need to be checked.
However, in the worst case, its time complexity is the same as that of the Bellman-Ford algorithm without using a queue.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On sparse graphs, the complexity is approximately
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So let's always use a queue. Change the original bellman ford implementation.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK. I'll make the modifications and change PR's name to "feat: replace Bellman Ford Algorithm with queue version"
@TripleCamellya Since, this PR is going to go in. Let's take out time and meet. What's your email ID? |
Thanks! My email is acrossthewallfhh@gmail.com. |
Implementing queue improved bellman ford algorithm.
Also known as the “shortest path faster algorithm”.
For the Bellman-Ford algorithm, each iteration requires relaxing all edges. For a vertex v that has a distance value that has not changed since the last time the edges out of v were relaxed, then there is no need to relax the edges out of v a second time.
Changes in PR:
Related to #628