循環リスト内の類似インデックスの合計


8

次の問題を検討してください。

してみましょう -wheelのインデックス化循環的にリンクされたリストとして定義される整数。例えば…kk

{3、4、9、-1、6}

…5輪で、位置0に3、位置1に4と続きます。ホイールは回転の操作をサポートするため、1ステップの回転で上記のホイールが…

{6、3、4、9、-1}

…今度は位置0に6、位置1に3と続きます。LETの順序付き集合である異なる -wheels。いくつかのといくつかの整数、次のような一連の回転を見つけます…WNkNkWNkt

 0<kΣNWN=t

つまり、ホイールを行列としてレイアウトした場合、すべての列の合計はます。は、解がすべての要素の回転まで一意になるように構築されていると想定します(つまり、1つの解を取得し、すべてのホイールを同じステップ数だけ回転させることで構成される正確に一意の解があります)。tWNkkW

この問題の簡単な解決策は、考えられるすべての回転を単にチェックすることです。そのための擬似コードを以下に示します。

function solve(wheels, index)
    if wheels are solved:
        return true
    if index >= wheels.num_wheels:
        return false
    for each position 1..k:
        if solve(index + 1) is true:
            return true
        else:
            rotate wheels[index] by 1

solve(wheels, 0)

これはかなり遅いソリューションです(ようなもの)。私はこの問題をより速く実行することが可能であるかどうか、そしてそれに名前があるかどうか疑問に思っています。Ok


最終的なホイールを設定するまで、部分的な解決策が正しい解決策につながるかどうかを実際に判断できるようには見えないため、これはNP完全である可能性があると思います...まだ証明はありませんが。考えたら答えを追加します。
マットルイス

回答:


3

この回答のほとんどについて、私は問題の決定バージョンについて説明します。このバージョンでは、最大で1つの解を持つインスタンス(「約束」)が与えられ、解があるかどうかを決定する必要があります。

PARTITIONを問題(運動)に減らすことができます。(PARTITIONは、整数のセットを等しい合計で2つの部分に分割できるかどうかを決定する問題です。)確かに、これは必ずしも解が一意であるという条件を満たすわけではありません。

さらに工夫することで、SATを(直接)問題の(決定バージョン)に減らすことができます。おそらくSATインスタンスに一意のソリューションがある場合、結果のインスタンスもそうなるように、これを行うことができます。あなたの問題。その場合、NP = RPでない限り、決定バージョンはポリタイムで解決できないことがわかります。

問題の決定バージョン(より正確には、promiseバージョン)がポリタイムで解決できない場合、どのアルゴリズムもポリタイムのすべてのYESインスタンスを解決できないことに注意してください。解決した場合、割り当てられた実行時間まで実行できます。ソリューションを確認します(アルゴリズムが時間内に停止した場合)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.