【问题标题】:What is INT_MAX in Dijkstra's Algorithm?Dijkstra 算法中的 INT_MAX 是什么?
【发布时间】:2016-04-10 21:10:08
【问题描述】:

我正在尝试实现 Dijkstra 的算法,并且我非常了解如何在基本层面上做到这一点,但让我感到困惑的一件事是 INT_MAX。这是我正在遵循的算法:

Dijkstra(start, end)
     startV = search(start)
     endV = search(end)
     startV.solved = true
     startV.distance = 0
     solved = {startV} //list of solved vertices
     while (!endV.solved)
         minDistance = INT_MAX
         solvedV = NULL
         for s in solved
            for y in s.adjacent
              if(!y.solved)
                  dist = s.distance + y.distance
                  if(dist < minDistance)
                      solvedV = y
                      minDistance = dist
                      parent = s
     solvedV.distance = minDistance
     solvedV.parent = parent
     solvedV.solved = true

     solved.add(solvedV)

如果您试图找到最短路径,为什么要使用称为 INT_MAX 的东西来计算称为 minDistance 的东西?你如何找到INT_MAX?如果它完全影响答案,我正在使用 C++,我的顶点是结构。但它是家庭作业,所以没有答案的代码。

【问题讨论】:

  • INT_MAX 表示可能的最大整数。
  • 为什么不把这个名字打进谷歌呢?
  • @The Paramagnetic Croissant 我做了,但我没有发现任何有用的东西。 @harold,你的意思是说minDistance 是一种边界,只是一个任意大的数字?
  • 这只是minDistance 跟踪到目前为止找到的最小值,所以你用不能 的最小值来初始化它,以确保它得到适当的更新。
  • 您“没有找到任何有用的东西”?谷歌搜索INT_MAXliterally tells you the answer。来吧。

标签: c++ algorithm dijkstra


【解决方案1】:

INT_MAX 是一个常数,表示int 可以存储的最大可能值。 它位于“limits.h”中 http://www.cplusplus.com/reference/climits/

当您想找到某物的最短距离时,您希望将当前评估的距离与“到目前为止”找到的最短距离进行比较,看看是否找到了更短的距离。 这通常涉及从最长可能的距离作为临时起点,这样您找到的任何距离都会自动变短。

如您所见,再往下,有一个声明 if (dist &lt; minDistance),它在 第一次时始终是 true,因为有效地保证任何有效距离都比最大可能距离值,INT_MAX

在许多类似的算法中都使用了相同的想法,您希望找到最高或最低值:我们初始化为最差的可能值(根据上下文),以便接受找到的第一个有效值。

考虑一下如果我们不写INT_MAX 而是写其他一些较小的数字会发生什么。结果是您输入的值相当于一个虚假值,该值将有效地与您正在测试的真实值竞争。因此,您始终希望保证初始“假”值无法与任何真实值进行比较。

此外,如果在算法结束时找到的最短距离仍然等于INT_MAX,那么您就知道函数/算法根本找不到有效距离。例如,该函数可能只返回minDistance,而没有其他任何内容,然后调用者可以检查它是否等于INT_MAX,以了解函数是否成功。 (我并不是暗示这将是最好的设计。)

const int result(getMinDistance(whatever));
if (result == INT_MAX) // no real "minDistance" was actually found.
else ... // found some real "minDistance" value.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-14
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多