私は答えとして短いコメントを書いていたはずですが、私はそれに十分な評判を持っていないと思います。
私は今を考え出すことができる最高のアルゴリズムは、より良い私たちはA + B = Z Oで(n)の場合(またはO(で始まるものとし、このアルゴリズムを説明するために、(N^2)Oでありますnlgn)それがソートされなかった場合)全ての
まず、{A}反復、及び{B}よう+ B = Zを見つけます。あなたがすべてのbを反復するならnaively、これは{(a)}あたりO(n)を要し、O(n^2)の解につながります。しかし、{a}を繰り返し反復する場合、{b}の値は厳密に減少しなければなりません。我々は、このコードのように時間の複雑さを軽減するために、この情報を利用することができる。
for a = first element, b = last element; a != last; a = next a
while ((b != first element) and (a + b > z))
b = previous elemnet of b
if a + b == z
return true
注{B}は一度だけループを通してリスト全体を通過し、それは償却O(N)の複雑さを持っていること。
今は元の問題にこの原理を適用することができ、我々は{A}を反復し、このO(N)アルゴリズムを適用することができる
{B、C} {ZA}を見つけるために、合計複雑O(n * n = n^2)です。
がうまくいけば、より低い複雑で解決策があると、私はO(N^2)が印象的であるとは思わないが、私はちょうど良く1を思い付くことができません。
から
O(n^2)
の全体的な実行時間を与えることは、{A、B、C}否定することはできますか? – wildplasser
はい、すべての要素が整数であるという規定のみです。 – Roni
これは繰り返し作業であり、もしそうなら、何が、配列またはzを変更する可能性が高いのですか? – yacc