Seen <- emtpy set # Sums seen so far
Open <- empty set # Sums ending at the last element
for x from 1 to Limit do
if x in Seen then
# quick fail
continue with next x
end
# Build new set
Pending <- empty set
add x to Pending
for each s in Open do
add (s+x) to Pending
end
# Check if these numbers are all unique
if (Pending intersection Seen) is empty then
# If so, we have a new result
yield x
Open <- Pending
Seen <- Seen union Pending
end
end
それは、これまでに見たすべての合計を見て、和が最後の要素で終了。開始位置と終了位置を追跡する必要はありません。
Limit
の値であるN場合、このアルゴリズムは、セット部材チェック及び挿入を想定し、 O(N ログN)を取る O(ログn)、及び交差点/ユニオンされています O(n log n)より遅くならない。
(私は最後の前提に誤解されるかもしれないが)
最初の数値は次のようになります。あなたはそれをブルートフォース場合
1, 2, 4, 5, 8
は、あなたがより良い方法を発見するかもしれません。とにかく何かを学ぶでしょう。 –
シーケンスが増加しますか?もしそうなら、検索はかなり簡単です(O(n^2)、私は思う)。もしそうでなければ、David YawはこれがGolomb Rulerの偽装の問題であることは間違いありません。 – Nemo