次の問題を検討してください。
してみましょう -wheelのインデックス化循環的にリンクされたリストとして定義される整数。例えば…
{3、4、9、-1、6}
…5輪で、位置0に3、位置1に4と続きます。ホイールは回転の操作をサポートするため、1ステップの回転で上記のホイールが…
{6、3、4、9、-1}
…今度は位置0に6、位置1に3と続きます。LETの順序付き集合である異なる -wheels。いくつかのといくつかの整数、次のような一連の回転を見つけます…
つまり、ホイールを行列としてレイアウトした場合、すべての列の合計はます。は、解がすべての要素の回転まで一意になるように構築されていると想定します(つまり、1つの解を取得し、すべてのホイールを同じステップ数だけ回転させることで構成される正確に一意の解があります)。
この問題の簡単な解決策は、考えられるすべての回転を単にチェックすることです。そのための擬似コードを以下に示します。
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)
これはかなり遅いソリューションです(ようなもの)。私はこの問題をより速く実行することが可能であるかどうか、そしてそれに名前があるかどうか疑問に思っています。