【42生向け】cpp09-ex02 マージインサーションソートとヤコブスタール数列
この記事の目的
この記事はレビュー時のマージインサーションソートにおいてなぜヤコブスタール数列が必要になるのかの説明が簡単になるように図解する記事です。
ロジックの全てを説明するものではなく、主要な部分については省略しています。
二分探索
二分探索をすることで
要素数を比較回数の要素数効率が最もいい
ヤコブスタール数列とは
よく知られているフィボナッチ数の漸化式は
であり、今回のヤコブスタール数列は
他にも色々な兄弟がいるみたいだ。
| 数列の種類 | 漸化式 | スタート | 数列の例 |
|---|---|---|---|
| フィボナッチ数 | 0, 1 | 0, 1, 1, 2, 3, ... | |
| ヤコブスタール数 | 0, 1 | 0, 1, 1, 3, 5, ... | |
| リュカ数 | 2, 1 | 2, 1, 3, 4, 7, ... | |
| ペル数 | 0, 1 | 0, 1, 2, 5, 12, ... | |
| トリボナッチ数 | 0, 0, 1 | 0, 0, 1, 1, 2, ... |
最初の挿入する要素
mainchainの要素を
最初にmainchainと比較して挿入する要素は
比較する対象は
比較回数2回の挿入が終わると次は比較回数3回の一番indexが大きい要素から挿入をしていく。
比較回数が更新されるとき
比較回数が更新されるときの最初に挿入される要素のindexがヤコブスタール数列になる。
比較回数が更新されるとき(更新された比較回数を

図の中で黄色くなっている部分が
この黄色くなっているの右端の要素が比較回数が更新されるときに最初に挿入する要素となる。
ヤコブスタール数列が出現する
比較回数2回の最初の要素のindexを

これを計算式にすると
同じように比較回数4回の最初に挿入する要素にとって色付きの部分は

これを計算式にすると
これは連続する二つの項の和が公比が2の等比数列になっていることを表している。
また、漸化式を計算すると、
移項して
ヤコブスタール数列が出てきた
Discussion