你对这个伪代码有什么看法?

时间:2017-04-24 18:52:34

标签: python algorithm search

我只是无法理解这个搜索算法的一行伪代码。

C(S, j) = min{C(S − {j},i) + dij : i ∈ S, i ≠ j} 

在python中,C是一个'数组',S是一个列表,j是一个数字或一个数字的单个元素,我不确定。但是我和dij第一次出现在这条线上。我不明白这是怎么回事,或世界上什么是S - {j}的意思?

我应该将其转换为python脚本,但伪代码没有意义。我对python也没有多少经验。

1 个答案:

答案 0 :(得分:1)

C(S, j)S中以顶点j结尾的最短哈密顿路径的长度。哈密​​尔顿路径是通过S中的顶点的路径,其通过每个点恰好一次。 C由递归关系定义,当您在代码中表达它时,它将转换为Python函数。

j结尾的最短哈密尔顿路径,在访问i之前访问了一些ji最小化通过S的顶点的最短哈密顿路径,不包括j加上ij的距离。

那是:

C(S, j) = min(C(S-{j}, i) + dist(i, j) for i in S if i!=j))

此处(以及您的文档中)S-{j}表示设置减法 - 即S没有元素j

您在文档中的内容只是编写此递归关系的另一种方式。

你也错过了基本情况:当你只有一个顶点时,最短路径从那个顶点开始,长度为零:

C({j}, j) = 0