2017-01-05 2 views
0

から要素からの和Xを検索する。これは私の問題である:4つのdifferens配列

所定数xおよび4つの配列A、B、C及びD、N個のそれぞれから、いくつかの数Aが存在するかどうかを決定Bからのb、Cからのc、およびDからのdは、x = a + b + c + dである。比較、追加、スワップがあります。最悪の場合の実行時間がn^4未満のこの問題を解決する効率的なアルゴリズムを設計します。

私はどこから始めたらいいのか分からず、助けていただければ幸いです!

+0

あなたはそのためのすべての組み合わせを見つける必要があるのですか? – Pirate

+1

x = a + b + c + dを満たすものだけをすべて検索する必要はありません。最悪の場合の実行時間がn^4未満のものがあれば、すべての組み合わせをチェックすると解を見つけることができます。私は彼らがそれを改善したいと思うと思う。 –

答えて

2

あなたは、次の手順を実行できますAとBとCとDについても同様との間のすべてのペアを加算することにより

  1. アレイ対の和を作成AB = A + B、CD = C + Dを(AB及びはO(n^2)
  2. ソート配列AB、CD - - N はO(n^2ログ()CDは、n^2つの要素毎)のアレイである。)このアプローチのuser58697から(クレジット以前I複雑さが増していくと思ったのとは違うアプローチを提案しましたが、彼は私の間違いを指摘しました)。
  3. ABIは=(N^2-1)CDI、= 0
  4. はABは[ABI] + CD [CDI]、条件及びインクリメント/デクリメント指数をチェック調査ダイス

    1. 計算合計= AB [ABI] + CD [cdi]
    2. 合計がxの場合、SUCH COMBINATION EXISTS! (ストップ・アルゴリズム)
    3. 場合和< X:増分CDI(++ CDI)
    4. 場合和> X:デクリメントABI(--abi)
    5. (ABI < 0)場合、または(CDI> = N^2):そのような組み合わせは存在しない! (アルゴリズムを停止する)
    6. 4.1に戻る。

    私たちはインデックスステップ4を行うたびにどちらかでインクリメントまたはデクリメント(またはアルゴリズムが停止した)ので、ステップ4では、最大2 *をやっているのn^2回(両方の配列全体の要素の数) - O(N^2)

したがって、すべてのすべてで、我々が持っているはO(n^2ログ(N))

+1

右のアイデアですが...最小値を計算するのは 'O(n)'なので、マージフェーズは 'O(n^3)'です。優先度キューを使用すると 'O(n^2 log(n))'になります。これは、はるかに簡単なアプローチによっても達成されます。ステップ1をスキップします。線形配列として 'AB = A + B'を計算し、それをソートする。 「CD」と同じ。手順3と4を実行してください。 – user58697

+0

あなたは最小限の権利について、私はそれを更新します。しかし、n^2サイズの配列をソートすることはO(n^2 log(n^2))であるので、優先度キューはO(n^2 log –

+1

'log(n^2)= 2 log(n)'です。それは漸近定数にのみ影響します。 – user58697

関連する問題