データ構造とアルゴリズム 分割統治 ~ マージソート~.

Slides:



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

区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
4.3 マージソート.
4.ソート問題とアルゴリズム 4-1.ソート問題について 4-2.簡単なソートアルゴリズム 4-3.高度なソートアルゴリズム
離散システム特論 整列(sorting)アルゴリズム 2.
ヒープソートの演習 第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教室 コンピュータアルゴリズム.
算法数理工学 第1回 定兼 邦彦.
4-3:高度なソートアルゴリズム① (分割統治法にもとづくソート)
情報知能学科「アルゴリズムとデータ構造」
4.整列のアルゴリズム.
アルゴリズムとデータ構造 --- 理論編 --- 山本 真基
第10回 ソート(1):単純なソートアルゴリズム
情報処理Ⅱ 2005年12月9日(金).
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
アルゴリズムとデータ構造 2011年6月13日
アルゴリズムとデータ構造 補足資料7-3 「単純選択ソートselsort.c」
岩井 儀雄 コンピュータ基礎演習  ー探索、整列ー 岩井 儀雄
①データ構造 ②アルゴリズム ③プログラム言語 ④マークアップ言語
ヒープソートの復習.
データ構造と アルゴリズム 第八回 知能情報学部 新田直也.
アルゴリズム入門.
第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
アルゴリズムとデータ構造1 2005年7月1日
クイックソート.
大岩 元 慶応大学環境情報学部 再帰 データ構造とプログラミング(8) 大岩 元 慶応大学環境情報学部
アルゴリズムとプログラミング (Algorithms and Programming)
先進的計算基盤システムシンポジウム SACSIS2007併設企画 マルチコアプログラミングコンテスト 「Cellスピードチャレンジ2007」
復習その1+α JBuilderの使い方を思い出す。 配列とGUI
復習+α JBuilderの使い方を思い出す。 配列とGUI 再帰とマージソート 木と二分木の探索
プログラミング 4 整列アルゴリズム.
アルゴリズムとデータ構造1 2005年6月24日
2009/10/23 整列アルゴリズム (1) 第4講: 平成21年10月23日 (金) 4限 E252教室 コンピュータアルゴリズム.
プログラミング 4 探索と計算量.
アルゴリズムとデータ構造1 2006年7月11日
アルゴリズムとデータ構造 2011年6月23日
プログラミング演習Ⅲ- Sorting Quick Sort and Merge Sort
Data Clustering: A Review
全体ミーティング (5/23) 村田雅之.
アルゴリズムとデータ構造 2012年6月11日
アルゴリズムとプログラミング (Algorithms and Programming)
基本情報技術概論(第5回) 埼玉大学 理工学研究科 堀山 貴史
ヒープソートの復習 第12回.
アルゴリズムとデータ構造 --- 理論編 --- 山本 真基
ソートのプログラムの流れ 配列の中身を小さい順に並び替える a[1],a[2],…a[n]の値を順に出力する
アルゴリズムとデータ構造 2012年6月25日
参考:大きい要素の処理.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
データ構造と アルゴリズムI 第三回 知能情報学部 新田直也.
情報処理Ⅱ 第8回:2003年12月9日(火).
Presentation transcript:

データ構造とアルゴリズム 分割統治 ~ マージソート~

本日の内容 分割統治 マージソート

分割統治(divide-and-conquer) もとの問題を小規模な部分問題に分割した後に解き、部分問題の解を統合することで全体の解を得ようとする方法 分割の対象は、変数の集合や定義領域 再帰的に反復して実行される 例) クイックソート、マージソート

クイックソート a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 2 1 4 5 9 3 6 レベル2 v=2 1 2 v=5 4 3 9 6 5 1 2 終了 4 3 9 6 5 レベル3 v=4 3 4 v=9 5 6 9 3 4 終了 5 6 9 終了 レベル4 v=6 5 6 5 6 終了 レベル5 ソート終了

マージソート(merge sort)(p.120) マージ(併合)を利用してデータを整列 要素をシーケンシャルアクセスしながら整列可能  →連結リストや外部記憶上のデータの整列に利用可    (外部整列,外部ソート) 計算量 常にO (n log n) 整列済のデータ列x, yをマージ 5 9 18 x 3 5 9 13 18 a 3 13 y

マージソートの原理 データ列を真ん中で2つの部分列x, yに分割 部分列x, yをそれぞれ整列する 整列済みの部分列x, yをマージする 分割統治 データ列を真ん中で2つの部分列x, yに分割 部分列x, yをそれぞれ整列する 整列済みの部分列x, yをマージする

マージソートの疑似コード void merge_sort(int a[], int l, int r) { int middle; if (要素が1つ以下) 終了; middle = (l + r) / 2; /*中央位置を算出*/ merge_sort(a, l, middle); /*前半を整列*/ merge_sort(a, middle + 1, r); /*後半を整列*/ 前半と後半をマージする; }

マージソートの概念図 55 13 3 45 74 87 46 30 分割 55 13 3 45 74 87 46 30 分割 55 13 3 45 74 87 46 30 分割 55 13 3 45 74 87 46 30 マージ 13 55 3 45 74 87 30 46 マージ 3 13 45 55 30 46 74 87 マージ 3 13 30 45 46 55 74 87

クイックソートとの比較 クイックソート O(n log n) 最悪でO(n2) マージソート O(n log n) 軸vより小さい部分と大きい部分になるように入れかえる 分割する 分割した部分に対して再帰的に処理を行う O(n log n) 最悪でO(n2) マージソート 分割する 分割した部分に対して再帰的に処理を行う マージする O(n log n) 配列で実装する場合,作業用のメモリ領域が余分に必要(教科書では配列A1,A2)

マージソートの問題点 配列を用いて実装する場合,作業用の領域として整列するデータと同じ大きさの領域が必要 作業用の配列にコピーする手間が無視できない a 5 9 18 3 13 20 コピー 作業用配列 A1 5 9 18 A2 3 13 20 マージ a 3 5 9 13 18 20

外部整列(外部ソート,external sort) ※ 外部記憶上のデータを整列すること 内部記憶 外部記憶 アクセス速度 高速 低速 容量 小 大 アクセス方式 ランダム シーケンシャル(磁気テープ) (磁気ディスク) 内部記憶 (メモリ) 外部記憶 (磁気テープなど) 整列したい データ 2 5 1 6 7 10 40 3 4 35 入りきらない

マージソートを利用した外部整列※ 長さ2の連 (run)にまとめる テープ1: 28 3 93 10 54 65 30 テープ1: 28 3 93 10 54 65 30 テープ2: 31 5 96 40 85 9 テープ3: テープ4: 28 31 93 96 54 85 30 3 5 10 40 9 65 長さ4の連 (run)にまとめる テープ1: テープ2: 3 5 28 31 9 54 65 85 10 40 93 96 30

マージソートを利用した外部整列(続き) 長さ8の連 (run)にまとめる テープ3: テープ4: 3 5 10 28 31 40 93 96 30 54 65 85 長さ16の連 (run)にまとめる テープ1: テープ2: 3 5 9 10 28 30 31 40 54 65 85 93 96

整列アルゴリズムの分類 バブルソート O(n2) 挿入ソート 選択ソート クイックソート O(n log n) ヒープソート 名称 計算量 内部/外部 安定/不安定 備考 バブルソート O(n2) 内部 安定 挿入ソート 選択ソート 不安定 クイックソート O(n log n)  最悪O(n2) ヒープソート O(n log n) マージソート 外部 ビンソート O(n) データに制限有 基数ソート O(mn)