再帰挿入ソートの繰り返し


9

CLRSからこの問題を試しました(ページ39、2.3-4)

挿入ソートは次のように再帰的な手続きとして表現できます。ソートするA[1... n]には、再帰的にソートしてA[1... n-1]からA[n]、ソートされた配列に挿入しA[1... n-1]ます。この再帰バージョンの挿入ソートの実行時間の再帰を記述します。

私が形成した再発は

T(n)={Θ(1)if n=1,T(n1)+Θ(n)if n>1.

私の推論

  • の基本ケースでは、リストはソートされるため、作業は発生せず、時間が一定になります。n=1
  • 他のすべてのケースでは、時間はシーケンスのソートとそのシーケンスA[1...n-1]への挿入に依存します。したがって、それはそれらの合計、すなわちます。T(n1)+Θ(n)

再発関係が正しいか知りたい。そうでない場合、間違いは何ですか?どのようにして再発関係を正しく定式化するのですか?


1
あなたは私たちの参照質問に興味があるかもしれません。特に、「実行時」の概念はあいまいであり、 -termsによる再帰は物事を置く最も良い方法ではありません。また、再帰を解決するためのいくつかの種類が議論されてきました。ここでは、「はい」または「いいえ」の質問は一般的に望ましくないことに注意してください。(質問が古いことに注意してください。コメントは参照用に残しています。)Θ
ラファエル

回答:


6

あなたが提供した説明によると、再発は正しいです。T(n)=
と思われるかもしれません。それ Binary-Searchを使用して挿入場所を見つけることができるため、実際に要素を挿入するには、最悪の場合、すべての要素を遠ざける必要があります。

{1, n=1T(n1) + Θ(log n), otherwise}


線形検索はO(n)、バイナリ検索を行うことで行われO(log n)ます。しかし、最悪の場合、すべての要素が移動する必要があるO(n)ため、全体的に複雑になるのではO(n)ないでしょうか。では、なぜという用語n != 1はのO(log n)代わりにになっているのO(n)ですか?
Aseem Bansal 2013

2
あなたが正しい、それはまさに私が言ったことです。要素の移動は、O(n)をとる正確ため、上記の式が間違っている
HCF

もっと注意深く読むべきだ。回答ありがとうございます。
Aseem Bansal 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.