離散システム特論 整列(sorting)アルゴリズム 2.

Slides:



Advertisements
Similar presentations
逐次ソート 2011/05/16. ソート(sort) 順序集合の要素a 1 … a n の上下関係を整 える 一般的には、整数の集合 N を考えればよ い ソートの計算量が問題となる どのような入力に対し、どのようなアル ゴリズムが最適か?
Advertisements

4.3 マージソート.
4.ソート問題とアルゴリズム 4-1.ソート問題について 4-2.簡単なソートアルゴリズム 4-3.高度なソートアルゴリズム
7/10 if 文課題 力作が多くて感心! 演習1:キーボードから2つの整数を入力し、小さい方の数字を 表示せよ。
データ構造とアルゴリズム論 第5章 整列(ソート)のアルゴリズム
ヒープソートの演習 第13回.
アルゴリズムイントロダクション第2章 主にソートに関して
4.ソート 4-1.ソート問題について 4-2.簡単なソートアルゴリズム 4-3.高度なソートアルゴリズム
アルゴリズムとデータ構造 2012年6月27日
第12回 ソート(3): シェルソート、クイックソート
アルゴリズムとデータ構造1 2008年7月22日
アルゴリズムとデータ構造 第8回 ソート(3).
第10回 整列 ~ バブルソート,挿入ソート,選択ソート~
第11回 整列 ~ シェルソート,クイックソート ~
アルゴリズムとデータ構造1 2005年7月8日
第11回 整列 ~ バケットソート,基数ソート,ヒープソート~
2009/10/30 整列アルゴリズム (2) 第5講: 平成21年10月30日 (金) 4限 E252教室 コンピュータアルゴリズム.
第7講: 平成19年11月2日 (金) 4限 E252教室 クイックソートと オーダー記法.
算法数理工学 第1回 定兼 邦彦.
4-3:高度なソートアルゴリズム① (分割統治法にもとづくソート)
情報知能学科「アルゴリズムとデータ構造」
4.整列のアルゴリズム.
第10回 ソート(1):単純なソートアルゴリズム
情報工学概論 (アルゴリズムとデータ構造)
データ構造とアルゴリズム 分割統治 ~ マージソート~.
岩井 儀雄 コンピュータ基礎演習  ー探索、整列ー 岩井 儀雄
ヒープソートの復習.
アルゴリズムとデータ構造 第7回探索のためのデータ構造(1) 2015/11/18 アルゴリズムとデータ構造 2015.
第11回 整列 ~ シェルソート,クイックソート ~
算法数理工学 第1回 定兼 邦彦.
二分探索木によるサーチ.
2009/11/6 整列アルゴリズムの復習 第6講: 平成21年11月6日 (金) 4限 E252教室 コンピュータアルゴリズム.
アルゴリズムとデータ構造1 2006年6月16日
情報工学概論 (アルゴリズムとデータ構造)
アルゴリズムとデータ構造1 2005年7月15日
ソートアルゴリズムの種類 選択ソート (selection sort) バブルソート (bubble sort)
2011/06/21-24 情報知能学科「アルゴリズムとデータ構造」 担当:白井英俊
情報工学概論 (アルゴリズムとデータ構造)
わんくま同盟茶藝部顧問 Microsoft MVP for VC episthmh
アルゴリズムとデータ構造 第3章 ヒープ 6月10日分
クイックソート.
大岩 元 慶応大学環境情報学部 再帰 データ構造とプログラミング(8) 大岩 元 慶応大学環境情報学部
25. Randomized Algorithms
基本情報技術概論(第6回) 埼玉大学 理工学研究科 堀山 貴史
アルゴリズムとプログラミング (Algorithms and Programming)
先進的計算基盤システムシンポジウム SACSIS2007併設企画 マルチコアプログラミングコンテスト 「Cellスピードチャレンジ2007」
復習その1+α JBuilderの使い方を思い出す。 配列とGUI
復習+α JBuilderの使い方を思い出す。 配列とGUI 再帰とマージソート 木と二分木の探索
プログラミング 4 整列アルゴリズム.
2009/10/23 整列アルゴリズム (1) 第4講: 平成21年10月23日 (金) 4限 E252教室 コンピュータアルゴリズム.
情報とコンピュータ 静岡大学工学部 安藤和敏
プログラミング 4 木構造とヒープ.
アルゴリズムとデータ構造1 2006年7月11日
アルゴリズムとデータ構造 2011年6月23日
プログラミング演習Ⅲ- Sorting Quick Sort and Merge Sort
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分の復習
データ構造とアルゴリズム (第5回) 静岡大学工学部 安藤和敏
アルゴリズムとデータ構造 2011年6月16日
基本情報技術概論(第6回) 埼玉大学 理工学研究科 堀山 貴史
ヒープソートの復習 第12回.
情報工学概論 (アルゴリズムとデータ構造)
ソートのプログラムの流れ 配列の中身を小さい順に並び替える a[1],a[2],…a[n]の値を順に出力する
アルゴリズムとデータ構造 2012年6月25日
ヒープソート.
ヒープソート.
アルゴリズムとデータ構造 2013年6月20日
参考:大きい要素の処理.
プログラミング論 バイナリーサーチ 1.
ファーストイヤー・セミナーⅡ 第10回 if文による選択処理(2).
Presentation transcript:

離散システム特論 整列(sorting)アルゴリズム 2

参考文献 大森克史・木村春彦・広瀬貞樹 著 「アルゴリズムの基礎」 共立出版(1997) 大森克史・木村春彦・広瀬貞樹 著 「アルゴリズムの基礎」 共立出版(1997) 渡邊敏正 著 「データ構造と基本アルゴリズム」 共立出版(2000)

整列とは 全順序集合Sが与えられたとき,Sのすべての要素をその全順序に従って並べ替えること. 簡単のため,n個の整数の集合をSとし,通常の数字の大小関係で小さい数から大きい数へ並べ替えるとする(昇順ソート ascending sort).

ソーティングアルゴリズム 選択法 (selection sort) バブルソート (bubble sort) 挿入法 (insertion sort) クイックソート (quick sort) O(n2) ヒープソート (heap sort) マージソート (merge sort) O(n log n) ソーティングアルゴリズムの限界 バケットソート (bucket sort) 基数ソート(radix sort)

マージソート (merge sort) 分割統治法 入力を2つに分割して,分割した各々を整列した後に,それらを統合する.分割した部分の整列にも再びマージソートを用いる.つまり,再帰的にソートが行われる. 分割統治法 divide-and -conquer method

マージソートの擬似コード s=1, t=n; mergesort(s, t){ // sからtの要素をソート if (s ≠ t){    A1 = mergesort(s, (s+t)/2);   //sから半分までをソートしてA1にしまう A2 = mergesort( (s+t)/2+1, t);  //半分からtまでをソートしてA2にしまう.    merge (A1, A2); //A1とA2をあわせる }

マージソートの例 (4,10,5,2,1,7,9,3,8,6) 分割 (4,10,5,2,1)(7,9,3,8,6) 分割 (4,10,5,2,1)(7,9,3,8,6) 分割 ((4,10,5)(2,1))((7,9,3)(8,6)) 分割 (((4,10)(5))((2)(1)))(((7,9)(3))((8)(6))) 分割((((4)(10))(5))((2)(1)))((((7)(9))(3))((8)(6))) 統治(((4,10)(5))((2)(1)))(((7,9)(3))((8)(6))) 統治((4,5,10)(1,2))((3,7,9)(6,8)) 統治(1,2,4,5,10)(3,6,7,8,9)

マージソートの例(統治) (1,2,4,5,10)    (3,6,7,8,9) 1 2 3 4 5 6 7 8 9 10

マージソートの計算量 T(n):マージソートの計算量 統治 T(n) 2T(n/2)+n (n2) 1 (n=1) より  2{2T(n/22)+n/2}+n = 22T(n/22) + 2n 22 {2T(n/23)+n/22} +2n = 23T(n/23) + 3n …  2kT(n/2k) + kn (k = log n) よって,T(n) = n+n log n =O(n log n)

ソーティングアルゴリズムの下限 2つの要素の大小比較が基本操作のアルゴリズム → アルゴリズムの判断の分岐数は2  → アルゴリズムの判断の分岐数は2 計算のいかなる進行もまとめて,決定木(decision tree)で表せる. 各頂点は,それまでの計算によって獲得された状態. 2要素の比較がその状態から出る2本の枝 葉がソートされた状態

2要素の比較はどれでもよい.名付けをかえればよいので. 決定木 {a, b, c}のソート 2要素の比較はどれでもよい.名付けをかえればよいので. abc, acb, bac, bca, cab, cba その時点で考え得る状態 a<b no yes bac bca cba abc acb cab yes ソートされた状態 yes no no a<c a<c bac bca cba abc acb cab yes yes no no b<c b<c bca cba abc acb

決定木の深さの下限 葉はすべてのソートされた状態に対応 ...総数は n! 最悪の場合(運の悪い問題例)では,決定木の深さ分の比較が必要. abc, acb, bac, bca, cab, cba abc acb cab bac bca cba yes no a<b a<c b<c 葉の数がn!の決定木(2分木)の深さは最低でもどのくらいか?

決定木の深さの下限(2) 深さdの2分木の葉の数は,高々2d 2d  n! を満たす最小のdをみつければよい. Stirlingの公式: N! ≒ √2πn nn e-n より,d ≒n log n ソーティングアルゴリズムはO(nlog n)より早くならない.(ヒープソートは最適.) 一般的にアルゴリズムの下限を示すのは大変. バケットソート,基数ソートは比較以上の情報がある.

クイックソート(quick sort) 1つの要素aを基準とし,aよりも小さい要素をaの左にaよりも大きい要素をaの右に分割する.分割した部分の整列も再帰的にソートを行う. マージソートと同じで分割統治法.ただし, 分割は等分ではない 統治の操作は必要ない

基準値による分割の擬似コード a1からan-1をanを基準値にして分割.a0は十分小さな値が入っていると仮定 left :=1, right:=n-1; while(left<right) { while (aright > an){ right:=right-1; } while (aleft < an){ left:=left+1; swap (aleft, aright); swap (aleft, an);

クイックソートの例(1) (4,10,5,2,1,7,9,3,8,6) 基準値 right left (4,3,5,2,1,7,9,10,8,6) 基準値 left right

クイックソートの例(2) (4,3,5,2,1,6,9,10,8,7) (4,3,5,2,1,7,9,10,8,6) 基準値 right left (4, 3, 5, 2, 1) (9, 10, 8, 7) あとはよろしく

クイックソートの計算量 基準値をソートする部分の最小値が常に選ばれてしまうと,選択法と変わらない. ↓ 最悪時間計算量はO(n2) 平均時間計算量はO(n log n)

クイックソートの平均時間計算量 T(n):n個のデータをクイックソートする平均時間 T(n) = T(m1)+T(m2)+n-1, ただし,m1+m2=n-1 (m1, m2):(0, n-1), (1, n-2), …, (n-1, 0) が等確率におこるとすると,

クイックソートの平均計算量(2) S(n)=T(n)-2とおくと, nS(n) = n(n+1)+2(S(0)+S(1)+…+S(n-1)) よって, S(n) 2(n+1)Hn+1 =O(nlog n) 引き算すると, nS(n) = (n+1)S(n-1)+2n

レポート課題 講義で取り上げなかったソーティングアルゴリズムについて調べ,計算量の算定もせよ. 講義で扱ったソーティングアルゴリズムを3つ選び,それを自分でプログラムし,様々な入力に対する実行時間の比較をせよ. 2004年2月期大学院入試問題計算機科学II(整列の問題)を解け.http://www.sk.tsukuba.ac.jp/SSE/admission/pastexams.htmlより入手