Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
ソーティングと貪欲法
ソーティング
●データを規則に従って並べ替えること
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...
ボゴソート
●ネタソートアルゴリズム
●ソートができるまで配列をシャッフルし続ける
●計算量
●平均
●最悪
●   ぐらいまでしか間に合わない
O(n×n!)
O(∞)
n=10
競技プログラミングでのソート
●大抵の言語には標準ライブラリにソートがある
●C++: std::sort, C: qsort
●使い方はググってください
●実際速い
●ソートアルゴリズムについての知識が役に立つ
問題が出ることがある
●ソート...
貪欲法
●その時々で最善と思われる選択肢を選ぶ方法
●「有利さ」で降順にソートして先頭から選ぶ
●適用できる問題とできない問題がある
●ナップサック問題は貪欲法ではうまく行かない
貪欲法
● 円を1円玉、5円玉、…、500円玉でぴったり
払うとき、必要な硬貨の最小枚数は何枚?
●大きい硬貨から順に使えるだけ使っていく
●100円玉を5枚使うより500円玉を使った方がいい
n
例) 977 = 500×1 + 100×4 ...
貪欲法がうまく行かない例
● 円を 円玉、 円玉、…、 円玉でぴったり
払うとき、必要な硬貨の最小枚数は何枚?
●大きい硬貨から払って行くとうまく行かない
●動的計画法で解く
n a1 a2 am
例) n=15,a1=10,a2=7,a3=1...
Upcoming SlideShare
Loading in …5
×

ソーティングと貪欲法

4,756 views

Published on

競技プログラミング練習会2014 Normalで使ったスライドです。様々なソーティングアルゴリズムと貪欲法について説明しています。

Published in: Technology
  • Be the first to comment

ソーティングと貪欲法

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

×