2017-04-24 61 views
-4

我只是无法理解此搜索算法的伪代码的一行。你对这个伪代码做了什么?

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

在Python中,C是“数组”,S是一个列表,并且j是一个数字或者说是具有数的列表的单个元件,我不知道。但我和dij第一次出现在这条线上。我不明白这是怎么回事,或者世界上有什么S - {j}的意思?

我应该只是将其转换为python脚本,但伪代码没有意义。我也没有太多的Python经验。

+0

'S'是一组,'{}Ĵ '是一个集合,'S - {j}'是一个集合差分操作。我猜'dij'的意思是'd * i * j'。 –

+0

我猜想S- {j}是减法,dij是从i到j的距离。很明显,我是一个变量,其范围超过了S中的元素。但更多的上下文将有必要回答,而不会猜测。 –

+0

'S'很可能应该是一个集合,而不是一个列表。 'C'绝对不是一个数组;这是一个功能。 – user2357112

回答

1

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

j结尾的最短汉密尔顿路径,在访问j前访问一些ii最小化通过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 
+0

更接近'i≠j'的模拟将是'如果我!= j'。 –

+0

@AlexHall我做了改变。我不确定它是否更好 - 当然,如果你知道Python的语法,但platatomi似乎是一个初学者。 –