これまでの私のベストショット:
配送車は、一連の配送 (d 1、d 2、...d n ) を行う必要があり、任意の順序で配送できます。つまり、集合 D = {d 1、 d 2 ,...d n } は有効なソリューションですが、特定のソリューションは、ルートの一端にある基地局を出る前に決定する必要があります (たとえば、パッケージを車両の LIFO に積み込む必要があると想像してください)。 )。
さらに、さまざまな順列のコストは同じではありません。これは、d i-1と d iの間を移動した距離の 2 乗の合計として計算できます。ここで、d 0は基地局と見なされます。ただし、方向の変更を伴うセグメントには 3 倍の費用がかかることに注意してください。 (これが鉄道または気送管で行われており、後退すると他の交通が妨げられると想像してください)。
D基地局からの距離 (つまり、abs(di-djは 2 つの配送間の距離) として表される配送のセットと、各順列を連続して生成)するイテレーター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)) と比較すると、.
私の質問: もっともらしい問題の説明を思いつくことができますか?それは、不注意な人をより悪い(または別の方法でひどい) ソート アルゴリズムの実装に自然に導くようなものです。