負でない整数のリストが与えられた場合、リストNの数値の合計がX残りの と等しいかどうかをチェックするアルゴリズムを提案しますN-X。
言い換えれば、集合全体を含む部分和問題のより単純なケースです。
試みられた解決策
リストの要素を降順に並べ替えます。変数SUMを最初の要素に初期化します。最初の要素 (最大、 ) を削除しa(1)ます。現在のリストの要素を示すa(n)ようにします。n-th
リストには複数の要素がありますが、
またはのいずれか最も近いものに等しく
SUMします。(最も近い平均が最小である場合)。SUM + a(1)SUM - a(1)a(2)|a(2) - SUM_POSSIBLE|を削除し
a(1)ます。
がまたはにSUM等しい場合、線形和が存在します。-a(1)a(1)
問題
上記のアルゴリズムを解決できないようです。正しい場合は、証明が必要です。それが間違っている場合 (より可能性が高い)、線形時間でこれを行う方法はありますか?
PS: 私が何か間違ったことをしているなら、許してください:S