- Algorithms, DataStructuresフォルダ
- 大学編入対策にアルゴリズムやデータ構造の考え方ソースコードをメモ
- ProconChallengeBook
- プログラミングコンテストチャレンジブック第2版の問題
ソーティングの考え方には大きく「逐次添加法」「分割統治法」「データ構造の利用」の3つがある.
- 逐次添加法:整列済みの要素を1つずつ増やしていく.(例)バブルソート,単純選択法,単純挿入法
- 分割統治法:大きな問題を小さな部分問題に分割して,各問題ごとに求めた解を結合することによって,全体の解を求める.(例)クイックソート,マージソート
- データ構造の利用:ソートの効率を上げるためにデータ構造を利用する.(例)ヒープソート
オーダは,アルゴリズムの評価に用いる計算量を表す方法の一つ.O(ビッグ・オー)という記号を使う.
たとえばデータ数nが2倍,3倍, ... と増加していった時に,実行時間が:math:2^2, 3^2
倍と増加して行く場合は:math:O(n^2)
であるという.
ここで大事なのはO記法では定数や計数を除外した上で,最も増加率の大きな項だけで評価するということ.
だから計算量を表す関数が:math:f(n)=2^n+n^2
であっても:math:n^2
より:math:2^n
の方が増加率が大きいので,計算量は:math:O(2^n)
となる.
計算量の評価に用いられている関数の大小関係も覚えておくと後々の説明時に楽になる.
一般に計算量っていうとアルゴリズムの実行時間を表す尺度で正確には時間計算量のことを指している.これに対し,アルゴリズムの実行に必要な領域の大きさを表すものを領域計算量という.
編入試験ではおそらく計算によって解かないといけない。でも対して難しくないので暗記しておいて損はないと思う.
- クイックソート:平均計算量:math:
O(n\log{2}{n})
,最悪計算量:math:O(n^2)
- マージソート:計算量:math:
{O(n\log{2}{n})
- ヒープソート:計算量:math:
{O(n\log{2}{n})