Skip to content

c-bata/Algorithm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Algorithm

フォルダ説明

  • Algorithms, DataStructuresフォルダ
    • 大学編入対策にアルゴリズムやデータ構造の考え方ソースコードをメモ
  • ProconChallengeBook
    • プログラミングコンテストチャレンジブック第2版の問題

アルゴリズム役立ち資料

アルゴリズム勉強内容まとめ

データ構造

リスト
スタック
キュー
ヒープ

ソーティング

ソーティング

バブルソート
単純挿入法
単純選択法
クイックソート
マージソート
ヒープソート
バケットソート

ソーティングの分類

ソーティングの考え方には大きく「逐次添加法」「分割統治法」「データ構造の利用」の3つがある.

  • 逐次添加法:整列済みの要素を1つずつ増やしていく.(例)バブルソート,単純選択法,単純挿入法
  • 分割統治法:大きな問題を小さな部分問題に分割して,各問題ごとに求めた解を結合することによって,全体の解を求める.(例)クイックソート,マージソート
  • データ構造の利用:ソートの効率を上げるためにデータ構造を利用する.(例)ヒープソート

オーダ記法(O記法)

オーダは,アルゴリズムの評価に用いる計算量を表す方法の一つ.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)となる.

計算量の評価に用いられている関数の大小関係も覚えておくと後々の説明時に楽になる.

$$O(1) < O(\log{2}{n}) < O(n) < O(n \times \log{2}{n}) < O(n^2) < O(2^n) < O(n!)$$

一般に計算量っていうとアルゴリズムの実行時間を表す尺度で正確には時間計算量のことを指している.これに対し,アルゴリズムの実行に必要な領域の大きさを表すものを領域計算量という.

各ソーティングアルゴリズムの計算量の比較

編入試験ではおそらく計算によって解かないといけない。でも対して難しくないので暗記しておいて損はないと思う.

  • クイックソート:平均計算量:math:O(n\log{2}{n}),最悪計算量:math:O(n^2)
  • マージソート:計算量:math:{O(n\log{2}{n})
  • ヒープソート:計算量:math:{O(n\log{2}{n})

About

アルゴリズムやデータ構造の考え方 & ソースコードをメモ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published