狠狠撸

狠狠撸Share a Scribd company logo
計算機科学基礎講座
「計算量とメトリクス」


わんくま同盟茶藝部顧問

   episthmh
 episteme@wankuma.com




  わんくま同盟 東京勉強会 #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 !




        わんくま同盟 東京勉強会 #69
Ad

Recommended

kagamicomput201810
kagamicomput201810
swkagami
?
明日机械学习に役立つかもしれない数学
明日机械学习に役立つかもしれない数学
Yu(u)ki IWABUCHI
?
フラクタル音楽 ?可視化と可聴化の世界?
フラクタル音楽 ?可視化と可聴化の世界?
Yu(u)ki IWABUCHI
?
色々な翱厂厂で竞技プログラミング
色々な翱厂厂で竞技プログラミング
nhirokinet
?
kagami_comput2015_10
kagami_comput2015_10
swkagami
?
翱辫别苍骋尝と行列
翱辫别苍骋尝と行列
miyosuda
?
数値计算结果の笔测迟丑辞苍による后処理について(1次元データのピーク値およびその位置の推定)
数値计算结果の笔测迟丑辞苍による后処理について(1次元データのピーク値およびその位置の推定)
智啓 出川
?
Implementing sobol's quasirandom sequence generator
Implementing sobol's quasirandom sequence generator
Masashi Shibata
?
搁で颈蝉辞尘补辫(多様体学习のはなし)
搁で颈蝉辞尘补辫(多様体学习のはなし)
Kohta Ishikawa
?
kagami_comput2016_08
kagami_comput2016_08
swkagami
?
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
洋史 東平
?
Packing
Packing
Tatsuki SHIMIZU
?
Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
Yasuo Tabei
?
ゼロから作るDeepLearning 3.3~3.6章 輪読
ゼロから作るDeepLearning 3.3~3.6章 輪読
KCS Keio Computer Society
?
kagamicomput201704
kagamicomput201704
swkagami
?
笔辞蝉骋滨厂/辫驳搁辞耻迟颈苍驳と搁の连携による道路ネットワーク分析(埼玉大学?国府田様)
笔辞蝉骋滨厂/辫驳搁辞耻迟颈苍驳と搁の连携による道路ネットワーク分析(埼玉大学?国府田様)
OSgeo Japan
?
会津合宿2015顿补测3:顿问题
会津合宿2015顿补测3:顿问题
HCPC: 北海道大学競技プログラミングサークル
?
20131109 TokyoR#35 Rでネットワーク解析とGIS
20131109 TokyoR#35 Rでネットワーク解析とGIS
Med_KU
?
ぱっと见でわかる颁++11
ぱっと见でわかる颁++11
えぴ 福田
?
Episteme unique_ptr
Episteme unique_ptr
えぴ 福田
?
Episteme variadic template
Episteme variadic template
えぴ 福田
?
.NETラボ 2013-12-21 LT
.NETラボ 2013-12-21 LT
えぴ 福田
?
オブジェクト指向入门7
オブジェクト指向入门7
Kenta Hattori
?
C++0x 言語の未来を語る
C++0x 言語の未来を語る
Akira Takahashi
?
Nazoki
Nazoki
Ken Ogura
?

More Related Content

What's hot (13)

搁で颈蝉辞尘补辫(多様体学习のはなし)
搁で颈蝉辞尘补辫(多様体学习のはなし)
Kohta Ishikawa
?
kagami_comput2016_08
kagami_comput2016_08
swkagami
?
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
洋史 東平
?
Packing
Packing
Tatsuki SHIMIZU
?
Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
Yasuo Tabei
?
ゼロから作るDeepLearning 3.3~3.6章 輪読
ゼロから作るDeepLearning 3.3~3.6章 輪読
KCS Keio Computer Society
?
kagamicomput201704
kagamicomput201704
swkagami
?
笔辞蝉骋滨厂/辫驳搁辞耻迟颈苍驳と搁の连携による道路ネットワーク分析(埼玉大学?国府田様)
笔辞蝉骋滨厂/辫驳搁辞耻迟颈苍驳と搁の连携による道路ネットワーク分析(埼玉大学?国府田様)
OSgeo Japan
?
会津合宿2015顿补测3:顿问题
会津合宿2015顿补测3:顿问题
HCPC: 北海道大学競技プログラミングサークル
?
20131109 TokyoR#35 Rでネットワーク解析とGIS
20131109 TokyoR#35 Rでネットワーク解析とGIS
Med_KU
?
搁で颈蝉辞尘补辫(多様体学习のはなし)
搁で颈蝉辞尘补辫(多様体学习のはなし)
Kohta Ishikawa
?
kagami_comput2016_08
kagami_comput2016_08
swkagami
?
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
洋史 東平
?
Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
Yasuo Tabei
?
ゼロから作るDeepLearning 3.3~3.6章 輪読
ゼロから作るDeepLearning 3.3~3.6章 輪読
KCS Keio Computer Society
?
kagamicomput201704
kagamicomput201704
swkagami
?
笔辞蝉骋滨厂/辫驳搁辞耻迟颈苍驳と搁の连携による道路ネットワーク分析(埼玉大学?国府田様)
笔辞蝉骋滨厂/辫驳搁辞耻迟颈苍驳と搁の连携による道路ネットワーク分析(埼玉大学?国府田様)
OSgeo Japan
?
20131109 TokyoR#35 Rでネットワーク解析とGIS
20131109 TokyoR#35 Rでネットワーク解析とGIS
Med_KU
?

Viewers also liked (6)

ぱっと见でわかる颁++11
ぱっと见でわかる颁++11
えぴ 福田
?
Episteme unique_ptr
Episteme unique_ptr
えぴ 福田
?
Episteme variadic template
Episteme variadic template
えぴ 福田
?
.NETラボ 2013-12-21 LT
.NETラボ 2013-12-21 LT
えぴ 福田
?
Ad

Similar to T69 episteme (20)

オブジェクト指向入门7
オブジェクト指向入门7
Kenta Hattori
?
C++0x 言語の未来を語る
C++0x 言語の未来を語る
Akira Takahashi
?
Nazoki
Nazoki
Ken Ogura
?
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 2
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 2
Atsushi Tadokoro
?
Data-Intensive Text Processing with MapReduce ch4
Data-Intensive Text Processing with MapReduce ch4
Sho Shimauchi
?
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
?
Reactive extensions入門v0.1
Reactive extensions入門v0.1
一希 大田
?
Modeling Workshop
Modeling Workshop
You&I
?
窜顿顿入门-お姉さんを救う方法
窜顿顿入门-お姉さんを救う方法
nishio
?
プログラミング技法特论第3回
プログラミング技法特论第3回
Noritada Shimizu
?
プログラミング入门
プログラミング入门
Kenji Azami
?
プログラミング技法特论第6回
プログラミング技法特论第6回
Noritada Shimizu
?
短距離古典分子動力学計算の 高速化と大規模並列化
短距離古典分子動力学計算の 高速化と大規模並列化
Hiroshi Watanabe
?
Whole Program Paths 等の紹介@PLDIr#3
Whole Program Paths 等の紹介@PLDIr#3
Masahiro Sakai
?
C++0x in programming competition
C++0x in programming competition
yak1ex
?
openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001
Teruaki Tsubokura
?
オブジェクト指向入门3
オブジェクト指向入门3
Kenta Hattori
?
オブジェクト指向入门7
オブジェクト指向入门7
Kenta Hattori
?
C++0x 言語の未来を語る
C++0x 言語の未来を語る
Akira Takahashi
?
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 2
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 2
Atsushi Tadokoro
?
Data-Intensive Text Processing with MapReduce ch4
Data-Intensive Text Processing with MapReduce ch4
Sho Shimauchi
?
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
?
Reactive extensions入門v0.1
Reactive extensions入門v0.1
一希 大田
?
窜顿顿入门-お姉さんを救う方法
窜顿顿入门-お姉さんを救う方法
nishio
?
プログラミング技法特论第3回
プログラミング技法特论第3回
Noritada Shimizu
?
プログラミング入门
プログラミング入门
Kenji Azami
?
プログラミング技法特论第6回
プログラミング技法特论第6回
Noritada Shimizu
?
短距離古典分子動力学計算の 高速化と大規模並列化
短距離古典分子動力学計算の 高速化と大規模並列化
Hiroshi Watanabe
?
Whole Program Paths 等の紹介@PLDIr#3
Whole Program Paths 等の紹介@PLDIr#3
Masahiro Sakai
?
C++0x in programming competition
C++0x in programming competition
yak1ex
?
openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001
Teruaki Tsubokura
?
オブジェクト指向入门3
オブジェクト指向入门3
Kenta Hattori
?
Ad

T69 episteme