壊れやすいオブジェクトのリストのマージ


19

背景: Chao Xuは先ほど次の質問を投稿しました:「各要素が回比較されるように、ソートネットワークに還元しない既知の比較ソートアルゴリズムはありますか?O(logn)」私たちは問題に少しこだわっているようです。2009年にValentin Polishchukと同じ問題について話し合いましたが、どこにも行き当たりませんでした。

新鮮なアイデアを得るために、私は同様のフレーバーを持ち、完全に些細ではない可能な限り単純な質問を考え出そうとしました。したがって、次の質問。


質問:ソートされたリストが2つあり、それぞれに要素があります。各要素がO 1 回だけ比較されるようにリストをマージできますか?nO(1)

当然、出力はすべての要素を含むソートされたリストである必要があります。2n

[これは些細なことが判明し、答えは「いいえ」です。]


質問2:ソートされたリストが2つあり、各リストには要素があります。少数の要素破棄することが許可されている場合、各要素がO 1 回だけ比較されるようにリストをマージできますか?nO(1)

より正確には、出力が含まれてソートされたリストであるべきであるの要素を、そして「ごみ箱」が含まれているT N 要素。値T n )をどれだけ小さくできますか?T n = nを取得するのは簡単です。T n = n / 100のようなものは、簡単に実行できるはずです。しかし、T n = o n2nT(n)T(n)T(n)T(n)=nT(n)=n/100T(n)=o(n)


ノート:

  • ここでは比較モデルを使用します。決定論的アルゴリズムのみ、最悪の場合の保証に興味があります。

  • 両方のリストには正確に要素があることに注意してください。私たちが持つつのリストがあった場合n個の要素として、別の1つの要素を、答えは「ノー」、明らかです。ただし、両方のリストが長い場合、「ロードバランシング」を実行できる可能性があるようです。nn1

  • 今回は、あらゆる種類のアルゴリズムが有効です。アルゴリズムが構築ネットワークとしてソートネットワークを使用している場合、それはまったく問題ありません。

  • 開始点として、各要素を最大200回比較する単純なアルゴリズムを次に示します。標準のマージアルゴリズムを使用するだけで、リストの先頭のカウンターを維持します。200に達したら、要素を破棄します。これで、破棄する各要素について、出力配列に200個の要素が正常に配置されました。したがって、を達成しています。T(n)=n/100


8
「1つのリストにn個の要素があり、別のリストに1個の要素がある場合、答えは明らかに「いいえ」です。」各リストにn個の要素がある場合は、より一般的な問題ではありませんか?たとえば、最初の要素を除く2番目のリストのすべての要素が最初のリストのすべての要素よりもはるかに大きいと約束されている場合、これは最初の問題に還元されませんか?
ロビンコタリ

@ロビン:そうだから、私は重要な質問を思い付かなかった、ありがとう。すべての要素をソートすることを要求する場合、観察により下限が得られるようです。質問を少し増やしてみましょう...Ω(logn)
ユッカスオメラ

そして、誰かが質問2で一見奇妙な定義のポイントが何であるか疑問に思った場合、非常に小さくすることができれば、おそらくマージソートのようなものを使用して元の問題をほぼ解決し、ごく一部を心配することができます後でゴミ箱の要素の。T(n)
ユッカスオメラ

回答:


5

いいえ、そのようなアルゴリズムは存在できません。

要素ごとの比較が許可されていると仮定します。t

2t2t+1t+1

nn/2tn/2t

to(n)

補足として、すべての要素が他のリストの周囲の部分のサイズの大まかな対数と比較されるアルゴリズムによって、この境界を一致させることが可能であると思われます。これに興味がある場合は、詳細を検討してみます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.