0

したがって、クイックソートを使用して配列をソートする場合は、クイックソートを使用して O(nlogn) で実行できます。一度ソートすると、バイナリ検索風のアルゴリズムを使用して O(logn) の配列に新しい要素を挿入できます。

私の質問は、並べ替えられた配列に O(logn) 時間で挿入できる場合、並べ替えアルゴリズムが少なくとも O(nlogn) である必要があることを証明する方法はありますか?

言い換えれば、2 つのアルゴリズムの実行時間の間に関係はありますか?

4

3 に答える 3

1

さて、順序を維持する挿入が O(log n) であるということは、配列に各要素を順番に挿入するだけで、O(n log n) で並べ替え操作を実行できることを意味します。ただし、これはおそらく、実際に求めていることとは逆です。O(n log n) ソートがあることを証明していますが、より高速なソートの可能性を否定するものではありません。

于 2012-11-06T08:26:04.093 に答える
1

いいえ: バブルソート (O(n²)) を使用して配列をソートすることは可能です。その後、同じアルゴリズムを使用して O(log(n)) 時間で挿入することも可能です。

于 2012-11-06T08:24:59.950 に答える
0

まず、特別な条件を必要とする一部の並べ替えアルゴリズムでは、時間の複雑さが低下する可能性があります。たとえば、O(n+k) (k は配列内の最大数) の複雑さを持つカウント ソートや、O(n*k) (k は配列内の最大桁数) の複雑さを持つ基数ソートなどです。要素)。
O(nlogn) の境界は、比較アルゴリズムに適用されます。

第二に、質問に答えるには、いいえ(悲しいことに)。davmac が言ったように、挿入と並べ替えの関係は逆です。

比較の下限がある理由は、正しい順序を見つけるために少なくとも nlogn の比較が必要だからです。詳細については、比較ソート アルゴリズムに関するこの wiki ページを参照してください。教授は挿入とは何の関係もないことに注意してください(教授は実際には挿入を想定していません)。

于 2012-11-13T15:50:54.703 に答える