t69 episteme
TRANSCRIPT
わんくま同盟 東京勉強会 #69
プログラムは
• 「使うひと目線」では– 速い– 小さい
… に越したことはないよね。
わんくま同盟 東京勉強会 #69
アルゴリズムの性能を示す目安
• 「速さ」の指標– 時間計算量 : どんだけ時間を食うか
• 「小ささ」の指標– 空間計算量 : どんだけ記憶域を食うか
わんくま同盟 東京勉強会 #69
O 記法 (O-notation)
• ある計算 / 処理に要する時間 / 空間が T に比例するとき、その時間 / 空間計算量を
O(T) と表記し、
計算量は「 T のオーダー」という。
※ いつも一定の計算量であるなら O(1)
大文字のオミクロン
わんくま同盟 東京勉強会 #69
データ構造と計算量
• データ構造– 可変長配列 : vector– リスト : list– 二分木 : set – ハッシュ表 : unordered_set
それぞれの要素アクセス、挿入 / 削除、検索に要する時間計算量は…
わんくま同盟 東京勉強会 #69
データ構造と時間計算量
N番目の参照 要素の追加 /削除
検索
可変長配列 Ο(1) Ο(N) Ο(N)
リスト Ο(N) Ο(1) Ο(N)
二分木 N/A Ο(logN) Ο(logN)
ハッシュ表 N/A Ο(1) Ο(1)
※ ただし、要素ひとつを格納するのに必要な領域は一般に
可変長配列 < リスト < 二分木 < ハッシュ表
なので、「時間と空間のトレードオフ」
わんくま同盟 東京勉強会 #69
プログラムは
• 「作るひと目線」では– 短い– 単純
… に越したことはないよね。
「長いプログラムは間違っている」「難しいプログラムは間違っている」
わんくま同盟 東京勉強会 #69
作るひと目線でのプログラムの複雑さ
• メトリクス : 「複雑さ / ややこしさ」の指標– 行数 LOC(Lines Of Code)– サイクロマティック複雑度– ネストの深さ– 分岐数 / パス数– etc
わんくま同盟 東京勉強会 #69
サイクロマティック複雑度
わんくま同盟 東京勉強会 #69
サイクロマティック複雑度
わんくま同盟 東京勉強会 #69
わんくま同盟 東京勉強会 #69
わんくま同盟 東京勉強会 #69
わんくま同盟 東京勉強会 #69
わんくま同盟 東京勉強会 #69
わんくま同盟 東京勉強会 #69
わんくま同盟 東京勉強会 #69
わんくま同盟 東京勉強会 #69
わんくま同盟 東京勉強会 #69
わんくま同盟 東京勉強会 #69
わんくま同盟 東京勉強会 #69
わんくま同盟 東京勉強会 #69
わんくま同盟 東京勉強会 #69
わんくま同盟 東京勉強会 #69
わんくま同盟 東京勉強会 #69
コンポーネント間の結合
• 理解性• テスト容易性• 再利用性
を阻害する
わんくま同盟 東京勉強会 #69
わんくま同盟 東京勉強会 #69
わんくま同盟 東京勉強会 #69
60%
10%
わんくま同盟 東京勉強会 #69
Thank you !