SlideShare ist ein Scribd-Unternehmen logo
1 von 29
計算機科学基礎講座
「計算量とメトリクス」


わんくま同盟茶藝部顧問

   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

Weitere ähnliche Inhalte

Was ist angesagt?

Rでisomap(多様体学習のはなし)
Rでisomap(多様体学習のはなし)Rでisomap(多様体学習のはなし)
Rでisomap(多様体学習のはなし)Kohta Ishikawa
 
kagami_comput2016_08
kagami_comput2016_08kagami_comput2016_08
kagami_comput2016_08swkagami
 
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)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 MatricesScalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
Scalable Partial Least Squares Regression on Grammar-Compressed Data MatricesYasuo Tabei
 
ゼロから作るDeepLearning 3.3~3.6章 輪読
ゼロから作るDeepLearning 3.3~3.6章 輪読ゼロから作るDeepLearning 3.3~3.6章 輪読
ゼロから作るDeepLearning 3.3~3.6章 輪読KCS Keio Computer Society
 
kagamicomput201704
kagamicomput201704kagamicomput201704
kagamicomput201704swkagami
 
PosGIS/pgRoutingとRの連携による道路ネットワーク分析(埼玉大学・国府田様)
PosGIS/pgRoutingとRの連携による道路ネットワーク分析(埼玉大学・国府田様)PosGIS/pgRoutingとRの連携による道路ネットワーク分析(埼玉大学・国府田様)
PosGIS/pgRoutingとRの連携による道路ネットワーク分析(埼玉大学・国府田様)OSgeo Japan
 
Sort
SortSort
Sortoupc
 
20131109 TokyoR#35 Rでネットワーク解析とGIS
20131109 TokyoR#35 Rでネットワーク解析とGIS20131109 TokyoR#35 Rでネットワーク解析とGIS
20131109 TokyoR#35 Rでネットワーク解析とGISMed_KU
 

Was ist angesagt? (13)

T77 episteme
T77 epistemeT77 episteme
T77 episteme
 
Rでisomap(多様体学習のはなし)
Rでisomap(多様体学習のはなし)Rでisomap(多様体学習のはなし)
Rでisomap(多様体学習のはなし)
 
kagami_comput2016_08
kagami_comput2016_08kagami_comput2016_08
kagami_comput2016_08
 
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
 
Packing
PackingPacking
Packing
 
Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
Scalable Partial Least Squares Regression on Grammar-Compressed Data MatricesScalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
 
量子情報18
量子情報18量子情報18
量子情報18
 
ゼロから作るDeepLearning 3.3~3.6章 輪読
ゼロから作るDeepLearning 3.3~3.6章 輪読ゼロから作るDeepLearning 3.3~3.6章 輪読
ゼロから作るDeepLearning 3.3~3.6章 輪読
 
kagamicomput201704
kagamicomput201704kagamicomput201704
kagamicomput201704
 
PosGIS/pgRoutingとRの連携による道路ネットワーク分析(埼玉大学・国府田様)
PosGIS/pgRoutingとRの連携による道路ネットワーク分析(埼玉大学・国府田様)PosGIS/pgRoutingとRの連携による道路ネットワーク分析(埼玉大学・国府田様)
PosGIS/pgRoutingとRの連携による道路ネットワーク分析(埼玉大学・国府田様)
 
Sort
SortSort
Sort
 
会津合宿2015Day3:D問題
会津合宿2015Day3:D問題会津合宿2015Day3:D問題
会津合宿2015Day3:D問題
 
20131109 TokyoR#35 Rでネットワーク解析とGIS
20131109 TokyoR#35 Rでネットワーク解析とGIS20131109 TokyoR#35 Rでネットワーク解析とGIS
20131109 TokyoR#35 Rでネットワーク解析とGIS
 

Andere mochten auch

ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11えぴ 福田
 
Episteme variadic template
Episteme variadic templateEpisteme variadic template
Episteme variadic templateえぴ 福田
 
.NETラボ 2013-12-21 LT
.NETラボ 2013-12-21 LT.NETラボ 2013-12-21 LT
.NETラボ 2013-12-21 LTえぴ 福田
 

Andere mochten auch (6)

T45 episteme
T45 epistemeT45 episteme
T45 episteme
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11
 
Episteme unique_ptr
Episteme unique_ptrEpisteme unique_ptr
Episteme unique_ptr
 
Episteme variadic template
Episteme variadic templateEpisteme variadic template
Episteme variadic template
 
Yokohama6 epi
Yokohama6 epiYokohama6 epi
Yokohama6 epi
 
.NETラボ 2013-12-21 LT
.NETラボ 2013-12-21 LT.NETラボ 2013-12-21 LT
.NETラボ 2013-12-21 LT
 

Ähnlich wie T69 episteme

コンピューターの整列処理におけるデータ操作の時間的共起分析
コンピューターの整列処理におけるデータ操作の時間的共起分析コンピューターの整列処理におけるデータ操作の時間的共起分析
コンピューターの整列処理におけるデータ操作の時間的共起分析yamahige
 
短距離古典分子動力学計算の 高速化と大規模並列化
短距離古典分子動力学計算の 高速化と大規模並列化短距離古典分子動力学計算の 高速化と大規模並列化
短距離古典分子動力学計算の 高速化と大規模並列化Hiroshi Watanabe
 
HiroshimaR6_Introduction
HiroshimaR6_IntroductionHiroshimaR6_Introduction
HiroshimaR6_IntroductionSAKAUE, Tatsuya
 
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタつくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ京大 マイコンクラブ
 
kagamicomput201801
kagamicomput201801kagamicomput201801
kagamicomput201801swkagami
 
LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門Yuichiro Kobayashi
 
kagami_comput2016_01
kagami_comput2016_01kagami_comput2016_01
kagami_comput2016_01swkagami
 
Rubyの御先祖CLUのお話(原本)
Rubyの御先祖CLUのお話(原本)Rubyの御先祖CLUのお話(原本)
Rubyの御先祖CLUのお話(原本)洋史 東平
 
Rを用いた外国語教育データの整理・要約
Rを用いた外国語教育データの整理・要約Rを用いた外国語教育データの整理・要約
Rを用いた外国語教育データの整理・要約Yusaku Kawaguchi
 
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)Kensuke Otsuki
 
国際的な相互運用とオープン技術- 日時と文字 -
国際的な相互運用とオープン技術- 日時と文字 -国際的な相互運用とオープン技術- 日時と文字 -
国際的な相互運用とオープン技術- 日時と文字 -yamahige
 
一口で何度もおいしい?DSL
一口で何度もおいしい?DSL一口で何度もおいしい?DSL
一口で何度もおいしい?DSLYou&I
 
国際的な相互運用とオープン技術 - 日時と文字 -
国際的な相互運用とオープン技術 - 日時と文字 -国際的な相互運用とオープン技術 - 日時と文字 -
国際的な相互運用とオープン技術 - 日時と文字 -yamahige
 
kagamicomput201701
kagamicomput201701kagamicomput201701
kagamicomput201701swkagami
 
ソフトウェア自動チューニング研究紹介
ソフトウェア自動チューニング研究紹介ソフトウェア自動チューニング研究紹介
ソフトウェア自動チューニング研究紹介Takahiro Katagiri
 
kagami_comput2015_1
kagami_comput2015_1kagami_comput2015_1
kagami_comput2015_1swkagami
 
kagami_comput2016_14
kagami_comput2016_14kagami_comput2016_14
kagami_comput2016_14swkagami
 

Ähnlich wie T69 episteme (20)

コンピューターの整列処理におけるデータ操作の時間的共起分析
コンピューターの整列処理におけるデータ操作の時間的共起分析コンピューターの整列処理におけるデータ操作の時間的共起分析
コンピューターの整列処理におけるデータ操作の時間的共起分析
 
短距離古典分子動力学計算の 高速化と大規模並列化
短距離古典分子動力学計算の 高速化と大規模並列化短距離古典分子動力学計算の 高速化と大規模並列化
短距離古典分子動力学計算の 高速化と大規模並列化
 
HiroshimaR6_Introduction
HiroshimaR6_IntroductionHiroshimaR6_Introduction
HiroshimaR6_Introduction
 
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタつくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
 
kagamicomput201801
kagamicomput201801kagamicomput201801
kagamicomput201801
 
LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門
 
kagami_comput2016_01
kagami_comput2016_01kagami_comput2016_01
kagami_comput2016_01
 
Rubyの御先祖CLUのお話(原本)
Rubyの御先祖CLUのお話(原本)Rubyの御先祖CLUのお話(原本)
Rubyの御先祖CLUのお話(原本)
 
Tuning, etc.
Tuning, etc.Tuning, etc.
Tuning, etc.
 
Rを用いた外国語教育データの整理・要約
Rを用いた外国語教育データの整理・要約Rを用いた外国語教育データの整理・要約
Rを用いた外国語教育データの整理・要約
 
210122 msi dp
210122 msi dp210122 msi dp
210122 msi dp
 
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
 
国際的な相互運用とオープン技術- 日時と文字 -
国際的な相互運用とオープン技術- 日時と文字 -国際的な相互運用とオープン技術- 日時と文字 -
国際的な相互運用とオープン技術- 日時と文字 -
 
一口で何度もおいしい?DSL
一口で何度もおいしい?DSL一口で何度もおいしい?DSL
一口で何度もおいしい?DSL
 
国際的な相互運用とオープン技術 - 日時と文字 -
国際的な相互運用とオープン技術 - 日時と文字 -国際的な相互運用とオープン技術 - 日時と文字 -
国際的な相互運用とオープン技術 - 日時と文字 -
 
HiroshimaR5_Intro
HiroshimaR5_IntroHiroshimaR5_Intro
HiroshimaR5_Intro
 
kagamicomput201701
kagamicomput201701kagamicomput201701
kagamicomput201701
 
ソフトウェア自動チューニング研究紹介
ソフトウェア自動チューニング研究紹介ソフトウェア自動チューニング研究紹介
ソフトウェア自動チューニング研究紹介
 
kagami_comput2015_1
kagami_comput2015_1kagami_comput2015_1
kagami_comput2015_1
 
kagami_comput2016_14
kagami_comput2016_14kagami_comput2016_14
kagami_comput2016_14
 

T69 episteme