Skip to content

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

Merged
merged 3 commits into from
Mar 11, 2025

Conversation

TripleCamellya
Copy link
Contributor

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:

  1. Implementation of queue improved bellman ford algorithm.
  2. Add tests for queue improved bellman ford algorithm.
  3. Add choices for shorted path algorithm and related comment.

Related to #628

@@ -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].
Copy link
Member

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?

Copy link
Contributor Author

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.

Copy link
Member

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?

Copy link
Contributor Author

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.

Copy link
Contributor Author

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 $O(kE)$, where $k$ is the average number of times each vertex is enqueued.

Copy link
Member

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.

Copy link
Contributor Author

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 TripleCamellya changed the title feat: add queue improved bellman ford algorithm feat: replace Bellman Ford Algorithm with queue version Mar 11, 2025
@czgdp1807 czgdp1807 enabled auto-merge (squash) March 11, 2025 08:44
@czgdp1807
Copy link
Member

@TripleCamellya Since, this PR is going to go in. Let's take out time and meet. What's your email ID?

@czgdp1807 czgdp1807 merged commit f34b7d6 into codezonediitj:main Mar 11, 2025
7 checks passed
@TripleCamellya
Copy link
Contributor Author

@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.

@TripleCamellya TripleCamellya deleted the spfa branch March 11, 2025 08:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants