プログラミングコンテストチャレンジブック 3-5 その2
第3章 3-5 の途中からです。
- 行列累乗
- フィボナッチ数列 - フィボナッチ数列の n 項目の mod 1000 を求める問題
- さらっとフィボナッチ数列の一般項が出てきてる。けど桁があふれるのでこのまま解くのは難しい
- 漸化式を行列とベクトルの積で表現する → 行列の累乗を求めればよい
- 行列の累乗も繰り返し二乗法を使って高速に計算できる
- Blocks - ブロックの4色の塗り分けの場合の数(の mod)を計算
- 同じように漸化式を立てて行列の累乗問題に落とせる
- グラフの長さkのパスの総数
- 名前の通りの問題。これも漸化式を立てて行列の累乗問題にする
- Matrix Power Series
- 今度は行列の累乗和というそのままの問題。ただし和を取らないといけない
- [[A 0]; [I I]] という行列を導入することで、この行列の累乗を計算して A の累乗和が得られる
- フィボナッチ数列 - フィボナッチ数列の n 項目の mod 1000 を求める問題
- データ構造を用いて高速化
- Minimizing maximizer
- n 個の数列から最大値を得る Maximizer という装置があって、これが部分列の sort を行なう部品のパイプラインとしてできている。あるMaximizer を与えられた時に正しく動作するように sorter の数を最小にする(いくつか取り除く)
- 最大値が数列の最初にあった時に動作すれば常に正しく動く
- 漸化式の更新する部分にセグメント木を利用すれば高速にできる
- Minimizing maximizer
3-5 はこれで終わりです。3-6 はかなり長いですしまだ4章の上級編もあるので、本書はかなり先が長いですね。