到目前为止我最好的镜头:
运送车辆需要进行一系列运送(d 1 ,d 2 ,...d n),并且可以按任何顺序进行 - 换句话说,集合 D = {d 1的所有可能排列, d 2 ,...d n } 是有效的解决方案——但具体的解决方案需要在路线的一端离开基站之前确定(假设需要在车辆 LIFO 中装载包裹,例如)。
此外,各种排列的成本也不相同。它可以计算为 d i -1和 d i之间行进距离的平方和,其中 d 0被视为基站,但需要注意的是,任何涉及方向改变的段的成本是其 3 倍(想象一下这是在铁路或气动管上发生的,并且备份会干扰其他交通)。
给定一组传递
D
表示为它们与基站的距离(所以abs(d
i-d
j)
是两个传递之间的距离)和一个permutations(D)
将连续产生每个排列的迭代器,找到一个成本小于或等于任何排列的排列其他排列。
现在,从这个描述中直接实现可能会导致这样的代码:
function Cost(D) ...
function Best_order(D)
for D1 in permutations(D)
Found = true
for D2 in permutations(D)
Found = false if cost(D2) > cost(D1)
return D1 if Found
这是 O(n*n!^2),例如非常糟糕——尤其是与有洞察力的人通过简单地对 D 进行排序会发现的 O(n log(n)) 相比。
我的问题:你能想出一个合理的问题描述,它自然会导致粗心的人进入更糟糕(或不同程度糟糕)的排序算法实现吗?