patternMinor
Dijkstra's algorithm: why are distances initialized to infinity and not some negative number?
Viewed 0 times
whynumberdijkstrainfinityarealgorithmsomeanddistancesinitialized
Problem
I'm a high schooler who has been self-learning graph algorithms for a month or two now.
I was wondering why the distance array in Dijkstra's algorithm is initialized to infinity (INT_MAX in C++) when it could just be set to a negative number? Since Dijkstra's isn't even used for negative numbers, why isn't the distance array set to some arbitrary negative number (say, -1) and instead a very large number which takes up far more space? It's possible that I'm overestimating the space occupied in memory by a very large INT value.
I'd appreciate any constructive feedback.
I was wondering why the distance array in Dijkstra's algorithm is initialized to infinity (INT_MAX in C++) when it could just be set to a negative number? Since Dijkstra's isn't even used for negative numbers, why isn't the distance array set to some arbitrary negative number (say, -1) and instead a very large number which takes up far more space? It's possible that I'm overestimating the space occupied in memory by a very large INT value.
I'd appreciate any constructive feedback.
Solution
If you read the algorithm closely, you'll not that edge weight relaxation is triggered if
If you used a negative value, you'd have to treat it as a special case which is a lot less nice.
Note that in classic algorithms, we often disregard the size of the stored numbers (RAM model, uniform cost model). If that is not a good model for your application you have to describe more closely how you represent numbers, and in particular infinity. In practice, you can represent infinity either by a special value that is larger than any number (that's the C++ constant you mention), or you just use the maximum weight you see in the input graph plus one.
new_weight < old_weight. This comparison is naturally true if all undiscovered edges are initialized with infinity (or, in programming, the largest representable value), and the algorithm correctly picks up the first "real" value it finds.If you used a negative value, you'd have to treat it as a special case which is a lot less nice.
Note that in classic algorithms, we often disregard the size of the stored numbers (RAM model, uniform cost model). If that is not a good model for your application you have to describe more closely how you represent numbers, and in particular infinity. In practice, you can represent infinity either by a special value that is larger than any number (that's the C++ constant you mention), or you just use the maximum weight you see in the input graph plus one.
Context
StackExchange Computer Science Q#89260, answer score: 4
Revisions (0)
No revisions yet.