集合Mが与えられた場合、両方ともMに属する数のペア(a、b)があるかどうかを調べ、a + b = xです。ここで、xは以前に指定されたパラメーターです。この問題は、分割統治をO(n * log n)で使用して解決する必要があります。おそらく、問題を2つの半分のサイズのサブ問題に分割してから、結果をO(n)で再結合する必要があります。
与えられた問題の擬似コードまたはそれを解決するためのヒントが欲しいのですが。
集合Mが与えられた場合、両方ともMに属する数のペア(a、b)があるかどうかを調べ、a + b = xです。ここで、xは以前に指定されたパラメーターです。この問題は、分割統治をO(n * log n)で使用して解決する必要があります。おそらく、問題を2つの半分のサイズのサブ問題に分割してから、結果をO(n)で再結合する必要があります。
与えられた問題の擬似コードまたはそれを解決するためのヒントが欲しいのですが。
これが要件に適合するかどうかはわかりませんが、次のようになります。
分割統治ソートはO(n lg n)であり、ソートされたセットのステップスルーはO(n)であるため、全体の複雑さはO(n lg n)です。
Ed:Mではなくxに合計します。
Mを(D&Iを使用してO(n log n)で)ソートすると、正しい合計のペアがあるかどうかを線形時間でチェックできます。(ヒント:2つのポインター)。
それがD&Iソリューションとしてカウントされないと思われる場合は、チェックステップを並べ替えの結合ステップに折りたたんで、一致するものが見つかったら早期に終了することができます。
追加:結合中にチェックを行うと、O(n)の代わりにO(n log n)の加算と比較のステップを実行することになりますが、もちろん、定数を除いて漸近ランタイムを悪化させることはありません要素。