0

質問に行き詰まっており、一般的な方向性のヒント/ポイントが必要です (答えを求めるのではありません)。

この質問は、ほぼソートされたシーケンスを指定して、時間 O(n) で正しい順序を生成する分割統治アルゴリズムの詳細を求めています。

ほぼソートされているということは、リストが与えられたということです

x_1、x_2、.... x_n

ソートされたリストが

y_1、y_2、... y_n

そして、すべての i、j <= n について、このプロパティが尊重されます。

x_i == y_j && |ij| <= ルート(n)

私の頭に浮かんだ唯一のことは、リストを各レベルでルート(n)グループに分割することでした(これにより、最初の分割では最大でルート(n)の長さになります)が、どこにあるのかよくわかりません再帰的に元に戻すときに、一度に root(n) 個の要素を結合する必要があるためです。

また、再帰の複雑さの方程式は次のようになることもわかりました。

T(n) = ルート(n) * T(n/ルート(n)) + d * ルート(n)

これにより、master's theoremO(n) 時間であることが証明できます。

だから、私は分割で正しい方向に進んでいるように見えますが、特別な方法で分割する必要があるのか​​ 、それとも特定の方法で比較する必要があるのか​​\u200b\u200bわかりません。

編集:おそらくこれが正しい答えでした。

アルゴリズムは次のとおりです。n > 1 の場合、シーケンスの 2 つの (近似) 半分のそれぞれを再帰的に並べ替えます。これで、すべての要素が正しい位置に配置されました。ただし、中央から √n の位置にある要素を除きます (これが正しい理由がわかりますか?)。そのため、これらの位置の要素をマージします。T(n) を n 個の要素のソートに使用する時間とすると、n > 1 の場合、次のようになります。

T(n)≤2T(⌈n=2⌉) +c * √n

√(n) = n .5および .5 < 1 = log 2 2 なので、分割統治の再帰のマスター定理は、T(n)∈O(n) を教えてくれます。

両方の半分をソートする時間は O( n2 * log( n2 )) であり、結果として O(n*logn) になり、最終的なマージは O(√ n * √n) これは O(n) であり、合計 O(n*logn + n) -> O(n*logn) となります

4

3 に答える 3

1

比較ベースの並べ替えでそれを実行できるとは思いませんO(n)

ソートされた配列が √n 個のバケットに分割され、各バケット内の要素がシャッフルされる単純化された問題を考えてみましょう。各要素がその最終スポットから √n 位置を超えてはならないという条件が満たされます。

これを解決するには、各バケットをソートする必要があります。任意のO(n*logn)並べ替えを使用すると、√n * (√n*log√n) になります。これは (1/2)*n*logn で、まだO(n*logn)です。

この単純化された問題は でしか解決できないため、比較ベースの並べ替えを使用してO(n*logn)元の問題を解決することは不可能であると結論付けています。O(n)

たとえば、すべての要素が特定の範囲内の整数であることがわかっている場合、比較ベースの並べ替えに制限されなくなり、 pigeon sortO(n)などの非比較ベースの並べ替えを使用して問題を解決できる可能性があります。

于 2012-02-29T01:57:15.590 に答える
1

このようなアルゴリズムを使用すると、リストを連結する (必要に応じて要素を装飾する) だけで、r 個の項目の r 個のリストを O(r*r) 時間で並べ替えることができます。ただし、O(r*r*ln(r)) または O(n * ln(n)) (n = r * r の場合) よりも優れた結果は得られないことが知られています。

元の質問が少し違うか、元の質問をあなたに与えた人が複雑さを計算するときに間違いを犯したと思います。たとえば、リストが 2 つに分割されている場合、両方の部分がまだほとんどソートされていると仮定します。(2 つおきの要素を取得するなど、この方法でリストを分割する方法はありますが、リストのすべてのパーティションがこのプロパティを持つわけではありません。)

于 2012-03-01T21:54:46.153 に答える
0

最初の手がかり:T(n)= root(n)* T(n / root(n))+ d * root(n)は正しくありません。これは再帰関数であるため、T(root(n))には当てはまりません。

于 2012-02-28T21:40:38.523 に答える