2

O(n)よりもうまく解決できるかどうかを確認したいアルゴリズムの問​​題があります。

n 要素のテーブル T を指定しました。ここで、各要素はタプル (s_i、e_i) であり、N に s_i、e_i があり、s_i < e_i です。つまり、各タプルはある種の間隔です。N の t0、t1 および t0 < t1 で、特定の間隔 [t0、t1] と重なるすべての間隔を見つける必要があります。さらに、2 つのソートされたリスト S および E が利用可能で、それぞれ s 値または e 値と、T のそれぞれのエントリを指すインデックス i を含みます。リストはそれぞれ s 値または e 値でソートされます。(s と e の両方の値が一意であると仮定しましょう。)

問題:

s_i <= t1 および e_i >= t0 である T 内の各間隔/タプル (s_i、e_i) を見つける必要があります。

これまでの私の考え:

区間境界のいずれかを適用することで、いくつかの要素を除外できます。つまり、S で t1 を検索するか、E で t0 を検索します。これにより、残りの要素のリスト L が得られます。

L <- {e in E | e >= t0} or L <- {s in S | s <= t1}

ただし、どの検索を実行しても、L の要素数に下限はありません。さらに、前に実行した検索に応じて、それぞれ s <= t1 または e >= t0 の場合、L のすべての要素をチェックする必要があります。

このソリューションの複雑さは O(n) です。

ただし、k は区間 [t0, t1] と重なる要素の最大数であるとしましょう。k << n と仮定すると、L の適切な検索を選択することで少なくとも n/2 要素を除外できるため、複雑さは O(n/2) になります。それでも O(n/2) は O(n) の中にあります。

この問題を解決するためのより良いアプローチを考えられますか?

(この質問を自由に改善してください。あまり明確ではないかもしれません。ありがとう)

4

2 に答える 2

2

について何も知らない場合、結果には N 個の間隔が含まれる可能性があるためk、答えの間隔の数である に勝ることはできません。O(N)

k が N よりもはるかに小さいことがわかっている場合は、より適切な処理を行うことができます。s_i<t0二分探索を使用すると、最後の i0 thatと最初の i1 that を見つけることができますs_i1>t1

e_j0<t0次に、最後の j0 thatと最初の j1 that を見つけますe_j1>t1

結果は max(i0,j0) と min(i1, j1) の間にあります。したがって、O(logN) + O(k) になります。

于 2013-09-14T18:14:44.967 に答える