次の問題を考慮してください。
入力:長さnの 2つの配列およびここで、Bはソート順です。
クエリは:ないと(その多重度)と同じ項目が含まれていますか?
この問題の最速の決定論的アルゴリズムは何ですか?
それらをソートするよりも速く解決できますか?この問題は確定的な線形時間で解決できますか?
次の問題を考慮してください。
入力:長さnの 2つの配列およびここで、Bはソート順です。
クエリは:ないと(その多重度)と同じ項目が含まれていますか?
この問題の最速の決定論的アルゴリズムは何ですか?
それらをソートするよりも速く解決できますか?この問題は確定的な線形時間で解決できますか?
回答:
計算モデルを指定していないので、比較モデルを想定します。
配列した特殊なケース考えるリストから取得され 、{ 1 、2 } × { 3 、4 } × ⋯ × { 2 N - 1 、2 N } 。 つまり、i番目の要素は2 i − 1または2 iのいずれかです。
アルゴリズムがとBに同じ要素が含まれていると結論付けた場合、アルゴリズムはBの各要素をAの対応する要素と比較したと主張します。確かに、このアルゴリズムは、と結論付けているとし、AとBは同じ要素を含むが、決しての最初の要素と比較Bを中にその対応にA。最初の要素を切り替えると、答えは異なりますが、アルゴリズムはまったく同じように進みます。これは、アルゴリズムが最初の要素(およびその他の要素)をAの対応する要素と比較する必要があることを示しています。
これは、とBに同じ要素が含まれている場合、これを検証した後、アルゴリズムはAのソートされた順序を知っていることを意味します。したがって、少なくともnが必要です。葉が異なるため、時間はΩ (n log n )かかります。
結論として、少なくとも異なる素数のセットの中からおよそサイズのランダムと、法とするランダムすると、配列に同じ要素が含まれていない場合、テストは失敗します確率。は一定数の機械語に収まるため、テストの実行には時間がかかります。
多項式時間素数テストを使用し、サイズが約の素数の密度が、時間ランダムな素数選択できます。を法とするランダム選択はさまざまな方法で実装できます。この場合、完全に均一なランダムは必要ないため、簡単になります。
結論として、アルゴリズムは時間で実行され、配列に同じ要素が含まれる場合は常にYESを出力し、配列に同じ要素が含まれない場合は確率 NOを出力します。任意の定数に対してエラー確率をに改善できます。
私は別のアルゴリズム(または少なくともそのようなアルゴリズムのスキーム)を提案します
スキームは、値(「整数」と仮定)が間の(狭い?)範囲内にあると仮定します
二つの配列をスキャンする時、我々は見つけることができるとの両方の値とこれらが異なる場合、アレイは、互いの置換ではなく、それらの多数のmin
max
min
両方の配列のすべての値から減算します(ここでは、1つの配列が既にソートされた順序にあるという事実は考慮されていません。おそらくこれは改善できます)
配列内の値が質量を表し、大きさそれぞれに加速度/速度を適用すると仮定します(これは、特定の場合に大きさ改善できます)。
最大値に達するまで質量を移動しますmax-min
。これは複雑さを持ちます。これにより、同じ値とその多重度の両方を見つけることができます。これらが異なる場合、配列は互いの順列ではありません。それ以外の場合、配列は互いの順列であると判断します。
上記のアルゴリズムスキームは、多くの実際的な状況で(決定論的に)非常に高速であることに注意してください。
上記のアルゴリズムスキームは、「移動質量」を使用する線形時間ソートアルゴリズムのバリエーションです。「移動質量」分類アルゴリズムの背後にある物理的直感は次のとおりです。
各アイテムの値が実際にその質量の大きさを表していると仮定し、すべてのアイテムを一列に並べて同じ加速力を加えることを想像してください。
次に、各アイテムは、その質量に関連する距離まで移動し、距離が大きくなるほど距離が小さくなり、その逆も同様です。次に、ソートされたアイテムを取得するには、移動距離の逆順でアイテムを収集するだけです。
このアルゴリズムは線形時間で決定論的ですが、初期加速力と移動距離(または待機時間)の量が値の分布(つまり、「質量」、上記の係数)。また、グリッドに移動するアイテムのスペースを離散化して、アルゴリズムの速度を一定にすることもできます(そして、同じセル内の異なるアイテムをソートするには高速ソートルーチンを使用します)。
この点で、上記のアルゴリズムは数値ベースのソートアルゴリズムに類似しています(たとえば、radix-sort、counting-sort)
このアルゴリズムはあまり意味がないかもしれないと思うかもしれませんが、少なくとも一つのことを示しています。つまり、物理レベルでの「基本的」に、任意の数をソートすることは、アイテム数の線形時間操作です。