1つの配列が他の配列のソートバージョンかどうかを確認する決定論的線形時間アルゴリズム


19

次の問題を考慮してください。

入力:長さnの 2つの配列Aおよびここで、Bはソート順です。BnB

クエリは:ないAB(その多重度)と同じ項目が含まれていますか?

この問題の最速の決定論的アルゴリズムは何ですか?
それらをソートするよりも速く解決できますか?この問題は確定的な線形時間で解決できますか?


1
FWIWの確率論的アプローチは、順序に依存しないハッシュ関数を使用したハッシュです。カーターとウェグマンは、これに関するオリジナルの論文の1つを書いた(sciencedirect.com/science/article/pii/0022000081900337)が、決定論的アルゴリズムを示唆するその論文の引用には何も見なかった(これまで)。
KWillets

1
引用する記述は、チューリングマシンモデルに関するものであり、理論的にのみ興味深いものです。アルゴリズムは通常、RAMモデルに関して分析されます。
ユヴァルフィルマス

ああ、それが私が探しているモデルです。質問を調整しました。
アルバートヘンドリックス

配列内の項目を合計してから、合計を比較してみませんか?タイトルに関して、それは線形であり、「ある配列は他の配列のソートされたバージョンですか?'。チューリングマシンモデルではなく、実用的なソリューションであることを認識しています。
-atayenel

1
@AlbertHendriks(ほとんどの場合チューリングマシンでは配列を並べ替えることはできませんO(nlogn)。SATのいくつかの下限(cs.cmu.edu/~ryanw/automated-lbs.pdfなど)は、実際にはRAMマシン用です。誤解を招く以前のコメントで申し訳ありません。
ユヴァルフィルマス

回答:


14

計算モデルを指定していないので、比較モデルを想定します。

配列した特殊なケース考えるリストから取得され 、{ 1 2 } × { 3 4 } × × { 2 N - 1 2 N } つまり、i番目の要素は2 i 1または2 iのいずれかです。B

{1,2}×{3,4}××{2n1,2n}.
i2i12i

アルゴリズムがBに同じ要素が含まれていると結論付けた場合、アルゴリズムはBの各要素をAの対応する要素と比較したと主張します。確かに、このアルゴリズムは、と結論付けているとし、ABは同じ要素を含むが、決しての最初の要素と比較Bを中にその対応にA。最初の要素を切り替えると、答えは異なりますが、アルゴリズムはまったく同じように進みます。これは、アルゴリズムが最初の要素(およびその他の要素)をAの対応する要素と比較する必要があることを示しています。ABBAABBAA

これは、Bに同じ要素が含まれている場合、これを検証した後、アルゴリズムはAのソートされた順序を知っていることを意味します。したがって、少なくともnが必要です。葉が異なるため、時間はΩ n log n かかりますABAn!Ω(nlogn)


P=Ω(nlogn)

@AlbertHendriks、これはソートの下限を示すために使用されるモデルと同じです。つまり、実行できる操作は比較のみであり、それ以上の操作はできないということです。これはあなたの質問に答えると思います。
カベ

[Cntd]並べ替えを行う場合でも、より強い境界はありません!また、n lg nよりも速くソートできる場合は、n lg nよりも速く問題を解決するためにそれを使用できます。
カベ

1
@AlbertHendriks、整数をソートするための線形時間アルゴリズムについて知っていますか?CLRSで調べてください。あなたのケースは、線形時間でソートできるケースの1つかもしれません。
カベ

6
O(nloglogn)O(nloglogn)

10

O(logn)O(1)nO(1)

a1,,anb1,,bn1/n

i=1n(xai)=i=1n(xbi).
px0
i=1n(x0ai)i=1n(x0bi)(modp).
配列が等しい場合、テストは常に合格するため、配列が異なる場合に集中しましょう。特に、いくつかの係数はゼロではありません。ため大きさを有する、この係数は大き有するが最大であり、ように素数をサイズの係数。私たちは、少なくとものセットを選択した場合、この手段素数少なくともサイズの(例えば)、その後、ランダムプライム用このセットのそれは、少なくとも確率で開催すること i=1n(xai)i=1n(xbi)ai,binO(1)2nnO(n)=nO(n)O(n)Ω(n)n2pn2p11/n
i=1n(xai)i=1n(xbi)0(modp).
を法と するランダムな、確率これを目撃します(最大次数の多項式は最大根を持つため)。x0p1n/p11/nnn

結論として、少なくとも異なる素数のセットの中からおよそサイズのランダムと、法とするランダムすると、配列に同じ要素が含まれていない場合、テストは失敗します確率。は一定数の機械語に収まるため、テストの実行には時間がかかります。pn2n2x0p1O(1/n)O(n)p

多項式時間素数テストを使用し、サイズが約の素数の密度が、時間ランダムな素数選択できます。を法とするランダム選択はさまざまな方法で実装できます。この場合、完全に均一なランダムは必要ないため、簡単になります。n2Ω(1/logn)p(logn)O(1)x0px0

結論として、アルゴリズムは時間で実行され、配列に同じ要素が含まれる場合は常にYESを出力し、配列に同じ要素が含まれない場合は確率 NOを出力します。任意の定数に対してエラー確率をに改善できます。O(n)1O(1/n)1O(1/nC)C


1
このアルゴリズムはランダム化されていますが、実際に機能するように他の回答のいくつかにアイデアを実装する方法を説明しています。また、ハッシュテーブルアプローチよりも利点があります。
ユヴァルフィルマス

OPは、ハッシュテーブルを使用する予想される線形時間アルゴリズムを好まなかったため、確率アルゴリズムを好まないと思います。
カベ

カヴェ、あなたは正しい。しかし、もちろんこの解決策も興味深いものであり、維持する必要があり、確率論的アルゴリズムの場合を解決します。また、私が探しているモデルを使用していると思います。
アルバートヘンドリックス

1
表記O(1 / n)が正しいかどうか疑問に思っています。もちろん、私はあなたの意味を知っていますが、big-Oの定義により、これはO(1)と同等だと思います。
アルバートヘンドリックス

2
どういたしまして。これは、十分な大きさのに対してで区切られた量です。これはよりも良い保証です。C/nnO(1)
ユヴァルフィルマス

-3

私は別のアルゴリズム(または少なくともそのようなアルゴリズムのスキーム)を提案します

スキームは、値(「整数」と仮定)が間の(狭い?)範囲内にあると仮定します[min,max]

  1. 二つの配列をスキャンする時、我々は見つけることができるとの両方の値これらが異なる場合、アレイは、互いの置換ではなく、それらの多数のO(n)minmax

  2. min両方の配列のすべての値から減算します(ここでは、1つの配列が既にソートされた順序にある​​という事実は考慮されていません。おそらくこれは改善できます)

  3. 配列内の値が質量を表し、大きさそれぞれに加速度/速度を適用すると仮定します(これは、特定の場合に大きさ改善できます)。1c>1

  4. 最大値に達するまで質量を移動しますmax-min。これは複雑さを持ちます。これにより、同じ値その多重度の両方を見つけることができます。これらが異なる場合、配列は互いの順列ではありません。それ以外の場合、配列は互いの順列であると判断します。O((maxmin)n)

上記のアルゴリズムスキームは、多くの実際的な状況で(決定論的に)非常に高速であることに注意してください

上記のアルゴリズムスキームは、「移動質量」を使用する線形時間ソートアルゴリズムのバリエーションです。「移動質量」分類アルゴリズムの背後にある物理的直感は次のとおりです。

各アイテムの値が実際にその質量の大きさを表していると仮定し、すべてのアイテムを一列に並べて同じ加速力を加えることを想像してください。

次に、各アイテムは、その質量に関連する距離まで移動し、距離が大きくなるほど距離が小さくなり、その逆も同様です。次に、ソートされたアイテムを取得するには、移動距離の逆順でアイテムを収集するだけです。

このアルゴリズムは線形時間で決定論的です、初期加速力と移動距離(または待機時間)の量が値の分布(つまり、「質量」、上記の係数)。また、グリッドに移動するアイテムのスペースを離散化して、アルゴリズムの速度を一定にすることもできます(そして、同じセル内の異なるアイテムをソートするには高速ソートルーチンを使用します)。maxmin

この点で、上記のアルゴリズムは数値ベースのソートアルゴリズムに類似しています(たとえば、radix-sortcounting-sort

このアルゴリズムはあまり意味がないかもしれないと思うかもしれませんが、少なくとも一つのことを示しています。つまり、物理レベルでの「基本的」に、任意の数をソートすることは、アイテム数の線形時間操作です。


移動距離と逆の順序でアイテムを収集するという点では、それは実装レベルでの比較に変換されないでしょうか。その時点で「距離」をソートする必要はありませんか?
JustAnotherSoul
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.