主要说明
我们计算,它是需要注意的重要店里没有
“最佳路径的距离combination of k cities
”
,但
“最优路径的距离为combination of k cities
AND的end-point city from this combination
”。
理解该公式将有助于理解以下公式中前两个乘数的含义。
第一阶段
第一阶段的操作数为:
∑k>=2(n−1k−1)choose city combinationof size = k−1⋅(k−1)choose city to be the lastfrom k−1 citiesin chosen combination⋅((n−1)−(k−1))choose citythat is not in chosen combinationto add to path
总和中缺少上标for all k>=2 that is valid for binomial coefficient
。因此,最后一个有效且不为空的总和项将是
这意味着我们的总和未捕获最后的选择城市连接到第一个城市。有个城市可以连接第一个城市。所以最后我们将这个术语加到总和上。k=n−1
(n−1n−2)⋅(n−2)⋅1
n−1
让转换公式形成您提供的形式,该形式也在
Held-Karp Wikipedia页面上。
∑k>=2(n−1k−1)⋅(k−1)⋅((n−1)−(k−1))=∑k>=2(n−1)!(k−1)!(n−k)!⋅(k−1)⋅(n−k)=∑k>=2(n−1)!k!(n−1−k)!⋅k⋅(k−1)=∑k>=2(n−1k)⋅k⋅(k−1)
操纵二项式系数会导致:
因此,第一个操作数相位是∑k>=2(n−1k)⋅k⋅(k−1)=∑k>=2(n−1)!k!(n−1−k)!⋅k⋅(k−1)=∑k>=2(n−3)!(k−2)!(n−3−(k−2))!⋅(n−1)⋅(n−2)=(n−1)⋅(n−2)∑k>=2(n−3k−2)=(n−1)⋅(n−2)⋅2n−3
(n−1)⋅(n−2)⋅2n−3+(n−1)
第二阶段
第二阶段是在计算距离的同时,通过我们在第一阶段所做的标记来恢复最佳路径。
对于每一个最优路径“为combination of k cities
AND为end-point city from this combination
”我们已保存了第二个到最后的城市。
回溯最佳路径,我们需要问一些数据结构返回第二个到最后一个城市“为combination of k cities
AND的end-point city from this combination
”。因此,此数据结构必须类似于
Map<combination of k cities, Map<last city, second-to-last city>>
。作为索引,combination of k cities
我们可以使用例如binary_string[city id]=1 if city id is in combination
。因此,我们需要查看的所有元素combination of k cities
以识别组合并为我们的数据结构建立索引。这给了我们第二阶段的操作数:
∑k>=2n−1k=(n)(n−1)2−1