QuickSort()関数が最初に呼び出されたときの比較
lower<=upper&&data[lower]<=div
lower<=upper&&data[upper]>div
の実行回数
は、
回である。そして、再帰
呼び出しにより、
個と
個の場合の
QuickSort()が呼び出されることにな
る。
個の時のトータルの比較回数を
として、これらの関係は、
|
(1) |
となる。もちろん、
と
は、
〜
の値を取りうる。そして、
sort[]に格納されている値がランダムであれば、同じ確率で
〜
の値をとる。さ
らに、
と
の和は
になることはクイックソートのアルゴリズムから自明
である。したがって、
の期待値は、
となる。この漸化式から、
を求めることになるが、計算は結構大変である。まず、
式(
2)を
と変形しておく。つぎに、この式の
を
にした場合の式
を利用する。式(
3)から式(
4)の辺々を差し引いて整理す
ると、
|
|
(5) |
となる。さらに、整理を進めると
|
|
(6) |
となる。両辺を、
で割ると、
となる。ここで、
を
と置くと、
|
(8) |
となり、階差数列を用いて容易に計算できる。すなわち、
|
(9) |
である。
より、
となるので、
となる。ここで、
が大きい場合、
は
に近
づくことが知られている
4。
はオイラー数と言われる定数で、その値は0.577
である。したがって、
が大きい場合、
|
(11) |
となる。右辺の
は他の項に比べて大きな値を取る
5。したがって、
|
(12) |
となる。
の定義から、
|
(13) |
となる。
はsort[]の要素の比較回数を表す。したがって、が大きい場合の比較回数は、
となる。
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成17年10月27日