ソーティングと貪欲法

3,058 views
2,810 views

Published on

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

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,058
On SlideShare
0
From Embeds
0
Number of Embeds
698
Actions
Shares
0
Downloads
8
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

ソーティングと貪欲法

  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枚

×