4.3 マージソート.

Slides:



Advertisements
Similar presentations
区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
Advertisements

4.ソート問題とアルゴリズム 4-1.ソート問題について 4-2.簡単なソートアルゴリズム 4-3.高度なソートアルゴリズム
離散システム特論 整列(sorting)アルゴリズム 2.
ヒープソートの演習 第13回.
アルゴリズムイントロダクション第2章 主にソートに関して
アルゴリズムとデータ構造1 2008年7月22日
2 分探索木 Binary Search Tree 実行可能な操作 計算量 木の高さは,最悪 O(n) n = |A| : 要素の個数
アルゴリズムとデータ構造 第8回 ソート(3).
第10回 整列 ~ バブルソート,挿入ソート,選択ソート~
2分探索.
第11回 整列 ~ シェルソート,クイックソート ~
アルゴリズムとデータ構造 2013年6月18日
第11回 整列 ~ バケットソート,基数ソート,ヒープソート~
2009/10/30 整列アルゴリズム (2) 第5講: 平成21年10月30日 (金) 4限 E252教室 コンピュータアルゴリズム.
On the Enumeration of Colored Trees
算法数理工学 第1回 定兼 邦彦.
Problem G : Entangled Tree
4-3:高度なソートアルゴリズム① (分割統治法にもとづくソート)
集中講義(九州大学数理学研究院) バイオ構造データに対する数理モデルと アルゴリズム(3) + 数理談話会 木構造および画像データの文法圧縮
4.整列のアルゴリズム.
アルゴリズムとデータ構造 --- 理論編 --- 山本 真基
第10回 ソート(1):単純なソートアルゴリズム
アルゴリズムとデータ構造 2012年6月14日
情報工学概論 (アルゴリズムとデータ構造)
東京大学大学院情報理工学系研究科 数理情報学専攻 定兼 邦彦 2016年4月7日
動的ハフマン符号化の例 入力:ABCDEからなる文字列 出力:動的に作ったハフマン木.
データ構造とアルゴリズム 分割統治 ~ マージソート~.
アルゴリズムとデータ構造 --- 理論編 --- 山本 真基
エージェントを管理するボスの苦悩 問題 n人のエージェントを部下に持つボスがいる. エージェントは出張・帰還を頻繁に繰り返す.
ヒープソートの復習.
アルゴリズムとデータ構造 2011年6月14日
アルゴリズムとデータ構造 第7回探索のためのデータ構造(1) 2015/11/18 アルゴリズムとデータ構造 2015.
第11回 整列 ~ シェルソート,クイックソート ~
算法数理工学 第1回 定兼 邦彦.
二分探索木によるサーチ.
7-3.高度な木 (平衡木) AVL木 平衡2分木。回転操作に基づくバランス回復機構により平衡を保つ。 B木
2009/10/16 いろいろなデータ構造 第3講: 平成21年10月16日 (金) 4限 E252教室 コンピュータアルゴリズム.
算法数理工学 第3回 定兼 邦彦.
定兼邦彦 今井浩 東京大学理学系研究科 情報科学専攻
アルゴリズムとデータ構造1 2005年7月26日
アルゴリズムとデータ構造1 2006年6月16日
情報工学概論 (アルゴリズムとデータ構造)
ソートアルゴリズムの種類 選択ソート (selection sort) バブルソート (bubble sort)
2011/06/21-24 情報知能学科「アルゴリズムとデータ構造」 担当:白井英俊
情報工学概論 (アルゴリズムとデータ構造)
わんくま同盟茶藝部顧問 Microsoft MVP for VC episthmh
アルゴリズムとデータ構造 第3章 ヒープ 6月10日分
第9回 優先度つき待ち行列,ヒープ,二分探索木
大岩 元 慶応大学環境情報学部 再帰 データ構造とプログラミング(8) 大岩 元 慶応大学環境情報学部
離散数学 07. 木 五島.
基本情報技術概論(第6回) 埼玉大学 理工学研究科 堀山 貴史
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング 4 整列アルゴリズム.
情報とコンピュータ 静岡大学工学部 安藤和敏
プログラミング 4 木構造とヒープ.
アルゴリズムとデータ構造1 2006年7月11日
プログラミング演習Ⅲ- Sorting Quick Sort and Merge Sort
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分の復習
第9回 優先度つき待ち行列,ヒープ,二分探索木
アルゴリズムとデータ構造 2012年7月2日
基本情報技術概論(第5回) 埼玉大学 理工学研究科 堀山 貴史
アルゴリズムとデータ構造 2011年6月28日
基本情報技術概論(第6回) 埼玉大学 理工学研究科 堀山 貴史
ヒープソートの復習 第12回.
情報工学概論 (アルゴリズムとデータ構造)
アルゴリズムとデータ構造 2013年7月2日
ヒープソート.
ヒープソート.
参考:大きい要素の処理.
Presentation transcript:

4.3 マージソート

マージソート ソートしたいデータを前半、後半に分割 前後半をマージソートでソート 前半と後半をマージ (合併) 6 2 5 3 4 7 1 前半と後半をマージ (合併) 6 2 5 3 4 7 1 8 2 3 5 6 1 4 7 8

マージソート ソートしたいデータを前半、後半に分割 前後半をマージソートでソート 前半と後半をマージ (合併) 前半と後半をマージ (合併) nデータのマージソートで必要な比較回数をT(n)で表す ⇒ n ⇒ T(n/2)×2 6 2 5 3 4 7 1 8 T(n/2) T(n/2) 6 2 5 3 2 3 5 6 1 4 7 8 4 7 1 8

T(n) = 2T(n/2) + n - 1 ⇒ O(n log n) マージソート ソートしたいデータを前半、後半に分割 前後半をマージソートでソート 前半と後半をマージ (合併) nデータのマージソートで必要な比較回数をT(n)で表す ⇒ n ⇒ T(n/2)×2 ⇒ n T(n) = 2T(n/2) + n - 1 ⇒ O(n log n) 6 2 5 3 4 7 1 8 T(n/2) T(n/2) 2 2 3 5 6 3 5 6 1 1 4 7 8 4 7 8 n - 1

再帰方程式の計算 T(n) = 2T(n/2) + n = 2(2T(n/4) + n/2) + n = 2(2(2T(n/8) + n/4) + n/2) + n … = 2log n + (n + ・・・+ n) = n + (n + ・・・+ n) = c・n log n

4.4 ヒープソート

ヒープとは この部分木で一番 大きい値は根の14 この部分木で一番 大きい値は根の10 16 14 10 11 9 3 8 6 4 2 どの部分木でもその中で 一番大きい値は根にある

ヒープとは 10 2 4 8 9 5 6 7 3 1 h[i]⇔v 6 14 11 4 2 9 3 8 10 16 h[2i]⇔vの左の子

ヒープソート 先ずヒープを作る 以下の操作をデータが無くなるまで繰り返す ヒープの根のデータを取り出し、並べる 壊れたヒープを修復する 16 先ずヒープを作る   以下の操作をデータが無くなるまで繰り返す ヒープの根のデータを取り出し、並べる 壊れたヒープを修復する 16 14 10 11 9 3 8 4 2 6

ヒープソート 先ずヒープを作る 以下の操作をデータが無くなるまで繰り返す ヒープの根のデータを取り出し、並べる 壊れたヒープを修復する 14 先ずヒープを作る   以下の操作をデータが無くなるまで繰り返す ヒープの根のデータを取り出し、並べる 壊れたヒープを修復する 14 11 10 16 6 9 3 8 4 2

ヒープソート 先ずヒープを作る 以下の操作をデータが無くなるまで繰り返す ヒープの根のデータを取り出し、並べる 壊れたヒープを修復する 11 先ずヒープを作る   以下の操作をデータが無くなるまで繰り返す ヒープの根のデータを取り出し、並べる 壊れたヒープを修復する 11 9 10 16 14 6 2 3 8 4

ヒープソート 先ずヒープを作る 以下の操作をデータが無くなるまで繰り返す ヒープの根のデータを取り出し、並べる 壊れたヒープを修復する 10 先ずヒープを作る   以下の操作をデータが無くなるまで繰り返す ヒープの根のデータを取り出し、並べる 壊れたヒープを修復する 10 9 8 16 14 11 6 2 3 4

ヒープソート 先ずヒープを作る 以下の操作をデータが無くなるまで繰り返す ヒープの根のデータを取り出し、並べる 壊れたヒープを修復する 9 先ずヒープを作る   以下の操作をデータが無くなるまで繰り返す ヒープの根のデータを取り出し、並べる 壊れたヒープを修復する 9 6 8 16 14 11 10 4 2 3

ヒープソート 先ずヒープを作る 以下の操作をデータが無くなるまで繰り返す ヒープの根のデータを取り出し、並べる 壊れたヒープを修復する 8 先ずヒープを作る   以下の操作をデータが無くなるまで繰り返す ヒープの根のデータを取り出し、並べる 壊れたヒープを修復する 8 6 3 16 14 11 10 9 4 2

ヒープソート 先ずヒープを作る 以下の操作をデータが無くなるまで繰り返す ヒープの根のデータを取り出し、並べる 壊れたヒープを修復する 16 先ずヒープを作る   以下の操作をデータが無くなるまで繰り返す ヒープの根のデータを取り出し、並べる 壊れたヒープを修復する 16 14 11 10 9 8 6 4 3 2

ヒープソート 最悪時間計算量 ⇒ O(n log n) ⇒ O(n) 先ずヒープを作る 以下の操作をデータが無くなるまで繰り返す O(n) 先ずヒープを作る   以下の操作をデータが無くなるまで繰り返す ヒープの根のデータを取り出し、並べる 壊れたヒープを修復する O(n) ⇒ O(log n) 最悪時間計算量  ⇒ O(n log n) 6 14 11 4 2 9 3 8 10 16 O(log n)

ヒープの構築 ⇒ O(n) 先ずヒープを作る 以下の操作をデータが無くなるまで繰り返す O(n) ⇒ O(log n) 先ずヒープを作る   以下の操作をデータが無くなるまで繰り返す ヒープの根のデータを取り出し、並べる 壊れたヒープを修復する O(n) ⇒ O(log n) 2 8 10 11 4 16 9 6 3 14

ヒープの構築 ⇒ O(n) 先ずヒープを作る 以下の操作をデータが無くなるまで繰り返す O(n) ⇒ O(log n) 先ずヒープを作る   以下の操作をデータが無くなるまで繰り返す ヒープの根のデータを取り出し、並べる 壊れたヒープを修復する O(n) ⇒ O(log n) 2 8 10 11 4 16 9 6 3 14

ヒープの構築 ⇒ O(n) 先ずヒープを作る 以下の操作をデータが無くなるまで繰り返す O(n) ⇒ O(log n) 先ずヒープを作る   以下の操作をデータが無くなるまで繰り返す ヒープの根のデータを取り出し、並べる 壊れたヒープを修復する O(n) ⇒ O(log n) 2 8 10 11 14 16 9 6 3 4

ヒープの構築 ⇒ O(n) 先ずヒープを作る 以下の操作をデータが無くなるまで繰り返す O(n) ⇒ O(log n) 先ずヒープを作る   以下の操作をデータが無くなるまで繰り返す ヒープの根のデータを取り出し、並べる 壊れたヒープを修復する O(n) ⇒ O(log n) 2 8 10 11 14 16 9 6 3 4

ヒープの構築 ⇒ O(n) 先ずヒープを作る 以下の操作をデータが無くなるまで繰り返す O(n) ⇒ O(log n) 先ずヒープを作る   以下の操作をデータが無くなるまで繰り返す ヒープの根のデータを取り出し、並べる 壊れたヒープを修復する O(n) ⇒ O(log n) 2 8 16 11 14 10 9 6 3 4

ヒープの構築 ⇒ O(n) 先ずヒープを作る 以下の操作をデータが無くなるまで繰り返す O(n) ⇒ O(log n) 先ずヒープを作る   以下の操作をデータが無くなるまで繰り返す ヒープの根のデータを取り出し、並べる 壊れたヒープを修復する O(n) ⇒ O(log n) 2 14 16 11 8 10 9 6 3 4

ヒープの構築 ⇒ O(n) 先ずヒープを作る 以下の操作をデータが無くなるまで繰り返す O(n) ⇒ O(log n) 先ずヒープを作る   以下の操作をデータが無くなるまで繰り返す ヒープの根のデータを取り出し、並べる 壊れたヒープを修復する O(n) ⇒ O(log n) 16 14 10 11 8 2 9 6 3 4

ヒープ構築がO(n)である証明 高さrの位置にある頂点の数は高々    個

ヒープ構築がO(n)である証明 高さrの位置にある頂点の数は高々    個

ヒープ構築がO(n)である証明 高さrの位置にある頂点の数は高々    個

ヒープ構築がO(n)である証明 高さrの位置にある頂点の数は高々    個

ヒープ構築がO(n)である証明 高さrの位置にある頂点の数は高々    個 高さrの位置でかかるコスト

ヒープ構築がO(n)である証明 高さrの位置にある頂点の数は高々    個 高さrの位置でかかるコスト 全体のコスト = = O(n)