我只是无法理解此搜索算法的伪代码的一行。你对这个伪代码做了什么?
C(S, j) = min{C(S − {j},i) + dij : i ∈ S, i ≠ j}
在Python中,C是“数组”,S是一个列表,并且j是一个数字或者说是具有数的列表的单个元件,我不知道。但我和dij第一次出现在这条线上。我不明白这是怎么回事,或者世界上有什么S - {j}的意思?
我应该只是将其转换为python脚本,但伪代码没有意义。我也没有太多的Python经验。
我只是无法理解此搜索算法的伪代码的一行。你对这个伪代码做了什么?
C(S, j) = min{C(S − {j},i) + dij : i ∈ S, i ≠ j}
在Python中,C是“数组”,S是一个列表,并且j是一个数字或者说是具有数的列表的单个元件,我不知道。但我和dij第一次出现在这条线上。我不明白这是怎么回事,或者世界上有什么S - {j}的意思?
我应该只是将其转换为python脚本,但伪代码没有意义。我也没有太多的Python经验。
C(S, j)
是S
中最短哈密顿路径的长度,以顶点j
结尾。哈密尔顿路径是穿过S
中的顶点的路径,该路径只经过每个点一次。 C
由递归关系定义,当您在代码中表示它时,它将转换为Python函数。
以j
结尾的最短汉密尔顿路径,在访问j
前访问一些i
。 i
最小化通过S
的顶点的最短哈密顿路径,不包括j
加上从i
到j
的距离。
即:
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
更接近'i≠j'的模拟将是'如果我!= j'。 –
@AlexHall我做了改变。我不确定它是否更好 - 当然,如果你知道Python的语法,但platatomi似乎是一个初学者。 –
'S'是一组,'{}Ĵ '是一个集合,'S - {j}'是一个集合差分操作。我猜'dij'的意思是'd * i * j'。 –
我猜想S- {j}是减法,dij是从i到j的距离。很明显,我是一个变量,其范围超过了S中的元素。但更多的上下文将有必要回答,而不会猜测。 –
'S'很可能应该是一个集合,而不是一个列表。 'C'绝对不是一个数组;这是一个功能。 – user2357112