SlideShare a Scribd company logo
1 of 13
Download to read offline
ソーティングと貪欲法
ソーティング
●データを規則に従って並べ替えること
23 51 35 92 62 81 36 53 68 31
23 31 35 36 51 53 62 68 81 92
ソーティング
●様々なアルゴリズムがある
●バブルソート
●選択ソート
●挿入ソート
●マージソート
●クイックソート
などなど…
バブルソート
●隣の要素と比較して、大小関係が正しくなかっ
たら入れ替える、ということをくりかえす
●計算量
●平均
●最悪
O(n2
)
O(n2
)
選択ソート
●まだソートしていない部分から最小値を取って
きてソートした部分に追加する、ということを
くりかえす
●計算量
●平均
●最悪
O(n2
)
O(n2
)
挿入ソート
●まだソートしていない部分の先頭の値をソート
済みの部分の適切な場所に挿入する、というこ
とをくりかえす
●計算量
●平均
●最悪
● が小さい時は非常に高速なのでよく使われる
O(n2
)
O(n2
)
n
マージソート
●配列を前後2分割して、それぞれを再帰的に
マージソートしたあと、2つのソート済み配列
をマージする
●計算量
●平均
●最悪
O(nlog(n))
O(nlog(n))
クイックソート
●適当な要素を基準値として、それより小さいも
のを配列の前の方に、大きいものを後ろの方に
動かし、前の方、後ろの方で再帰的にクイック
ソートする
●計算量
●平均
●最悪
●平均的にはマージソートより定数倍速い
O(n2
)
O(nlog(n))
ボゴソート
●ネタソートアルゴリズム
●ソートができるまで配列をシャッフルし続ける
●計算量
●平均
●最悪
●   ぐらいまでしか間に合わない
O(n×n!)
O(∞)
n=10
競技プログラミングでのソート
●大抵の言語には標準ライブラリにソートがある
●C++: std::sort, C: qsort
●使い方はググってください
●実際速い
●ソートアルゴリズムについての知識が役に立つ
問題が出ることがある
●ソートアルゴリズムを知っておいて損はない
貪欲法
●その時々で最善と思われる選択肢を選ぶ方法
●「有利さ」で降順にソートして先頭から選ぶ
●適用できる問題とできない問題がある
●ナップサック問題は貪欲法ではうまく行かない
貪欲法
● 円を1円玉、5円玉、…、500円玉でぴったり
払うとき、必要な硬貨の最小枚数は何枚?
●大きい硬貨から順に使えるだけ使っていく
●100円玉を5枚使うより500円玉を使った方がいい
n
例) 977 = 500×1 + 100×4 + 50×1
+ 10×2 + 5×1 + 1×2
11枚
貪欲法がうまく行かない例
● 円を 円玉、 円玉、…、 円玉でぴったり
払うとき、必要な硬貨の最小枚数は何枚?
●大きい硬貨から払って行くとうまく行かない
●動的計画法で解く
n a1 a2 am
例) n=15,a1=10,a2=7,a3=1
15 = 10×1 + 1×5 6枚
15 = 7×2 + 1×1 3枚

More Related Content

More from 京大 マイコンクラブ

More from 京大 マイコンクラブ (20)

Geometry with Unity
Geometry with UnityGeometry with Unity
Geometry with Unity
 
セミコロンレスc++
セミコロンレスc++セミコロンレスc++
セミコロンレスc++
 
エンジニアと健康
エンジニアと健康エンジニアと健康
エンジニアと健康
 
女の子になれなかった人のために
女の子になれなかった人のために女の子になれなかった人のために
女の子になれなかった人のために
 
Pietで競プロしよう
Pietで競プロしようPietで競プロしよう
Pietで競プロしよう
 
もし太陽のコアがIntelCoreだったら
もし太陽のコアがIntelCoreだったらもし太陽のコアがIntelCoreだったら
もし太陽のコアがIntelCoreだったら
 
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
 
ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会
 
No SSH (@nojima; KMC関東例会)
No SSH (@nojima; KMC関東例会)No SSH (@nojima; KMC関東例会)
No SSH (@nojima; KMC関東例会)
 
DTM練習会2017第1.5回 「伴奏の付け方」
DTM練習会2017第1.5回 「伴奏の付け方」DTM練習会2017第1.5回 「伴奏の付け方」
DTM練習会2017第1.5回 「伴奏の付け方」
 
hideya流 テストプレイ観察術
hideya流 テストプレイ観察術hideya流 テストプレイ観察術
hideya流 テストプレイ観察術
 
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編
 
Altseed
AltseedAltseed
Altseed
 
C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回
 
C#でゲームを作る2016 第7回
C#でゲームを作る2016 第7回C#でゲームを作る2016 第7回
C#でゲームを作る2016 第7回
 
C#でゲームを作る2016 第5回
C#でゲームを作る2016 第5回C#でゲームを作る2016 第5回
C#でゲームを作る2016 第5回
 
C#でゲームを作る2016 第3回
C#でゲームを作る2016 第3回C#でゲームを作る2016 第3回
C#でゲームを作る2016 第3回
 
C#でゲームを作る2016 第1回
C#でゲームを作る2016 第1回C#でゲームを作る2016 第1回
C#でゲームを作る2016 第1回
 
文字コード基礎論A
文字コード基礎論A文字コード基礎論A
文字コード基礎論A
 

ソーティングと貪欲法