了解旅行商的时间复杂性

时间:2012-11-15 19:02:55

标签: traveling-salesman

我已从多个来源和我对该算法的理解中读取它在2 ^ N时间内运行。我的问题是什么原因导致TSP实现这个运行时间?我似乎无法找到伪代码,所以我可以检查它。

1 个答案:

答案 0 :(得分:3)

您的算法可能是包含 - 排除:

使用A*找到通过以下状态空间的最短路径:

  • 状态由城市集的分区定义为“已访问”集,“未访问”集和“当前”节点。
  • 有效转换是将一个节点从“当前”移动到“已访问”而一个从“未访问”移动到“当前”集的转换。它的成本等于从旧“当前”到新“当前”的距离。
  • 起始状态是:没有城市被“访问”,任意城市是“当前”。
  • 完成状态是:没有城市是'未访问的',任何城市都是'当前'。

包含 - 排除的时间复杂性由状态数量给出:恰好有一个“当前”城市(因子n),所有其他城市都是访问过的或未访问过的(因子为{{1 }})。

'A *​​'算法最多只能进入一次状态。对于每个状态,它将探索最多'n'个其他节点并将它们推入优先级队列。优先级队列最多需要“O(n)”时间来执行其操作。

因此,运行时间为2^n = O(2^n * n * n * O(n))。进一步的见解表明,O(2^n * poly(n))等于O(2^n * poly(n))