クイックソート.

Slides:



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

15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
離散システム特論 整列(sorting)アルゴリズム 2.
4.ソート 4-1.ソート問題について 4-2.簡単なソートアルゴリズム 4-3.高度なソートアルゴリズム
第12回 ソート(3): シェルソート、クイックソート
2 分探索木 Binary Search Tree 実行可能な操作 計算量 木の高さは,最悪 O(n) n = |A| : 要素の個数
高速ソートと 安定結婚問題 平成24年12月14日.
第10回 整列 ~ バブルソート,挿入ソート,選択ソート~
2分探索.
第11回 整列 ~ シェルソート,クイックソート ~
データ構造とアルゴリズム論 第5章 整列(ソート)のアルゴリズム
デスクトップを画像として保存する(1) ① デスクトップの画像をクリップボードへコピーする。
HSPでのミニゲーム作成 早稲田実業学校PC班 Y氏.
第11回 整列 ~ バケットソート,基数ソート,ヒープソート~
2009/10/30 整列アルゴリズム (2) 第5講: 平成21年10月30日 (金) 4限 E252教室 コンピュータアルゴリズム.
第1章 場合の数と確率 第1節 場合の数  2  場合の数 (第1回).
2章 データ構造.
5.チューリングマシンと計算.
5.チューリングマシンと計算.
2種類のプログラミング言語による ロボット操作の研究
第10回 ソート(1):単純なソートアルゴリズム
エクスプローラ ● エクスプローラ: ファイルやフォルダを階層構造で表示してあり、これらを操作するのに便利。
情報工学概論 (アルゴリズムとデータ構造)
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
データ構造とアルゴリズム 第4回 リスト ~ データ構造(1)~.
Proper Interval Graphsの ランダム生成と列挙
ヒープソートの復習.
アルゴリズムとデータ構造 第7回探索のためのデータ構造(1) 2015/11/18 アルゴリズムとデータ構造 2015.
第11回 整列 ~ シェルソート,クイックソート ~
第2章 「有限オートマトン」.
2009/10/16 いろいろなデータ構造 第3講: 平成21年10月16日 (金) 4限 E252教室 コンピュータアルゴリズム.
算法数理工学 第3回 定兼 邦彦.
定兼邦彦 今井浩 東京大学理学系研究科 情報科学専攻
2009/11/6 整列アルゴリズムの復習 第6講: 平成21年11月6日 (金) 4限 E252教室 コンピュータアルゴリズム.
データ構造とアルゴリズム 第6回 キュー ~ データ構造(2)~.
情報工学概論 (アルゴリズムとデータ構造)
ソートアルゴリズムの種類 選択ソート (selection sort) バブルソート (bubble sort)
関係 (relation) 集合Aの要素aとBの要素bとが、ある条件Rを満たすとき「Rの関係にある」といい、aRb と書く。
マイクロソフト Access での SQL 演習 第4回 並べ替え(ソート)
第9回 優先度つき待ち行列,ヒープ,二分探索木
アルゴリズムとデータ構造1 2005年7月1日
クイックソート.
P n ポインタの基礎 5 q m 5 7 int* p; int 型の変数を指すポインタ int* q; int 型の変数を指すポインタ int n=5, m=7; int 型の変数 int array[3]; int* pArray[3]; p = &n; ポインタにアドレスを代入しているのでOK.
アルゴリズムとプログラミング (Algorithms and Programming)
データ構造とアルゴリズム論 第5章 整列(ソート)のアルゴリズム
プログラミング 4 整列アルゴリズム.
2009/10/23 整列アルゴリズム (1) 第4講: 平成21年10月23日 (金) 4限 E252教室 コンピュータアルゴリズム.
データ構造とアルゴリズム論 第5章 整列(ソート)のアルゴリズム
プログラミング 4 木構造とヒープ.
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
情報数理Ⅱ 第11章 データ構造 平成29年1月18日.
アルゴリズムとデータ構造 --- 理論編 --- 山本 真基
シミュレーション論Ⅰ 第7回 シミュレーションの構築と実施.
文字列へのポインタの配列 static char *lines[MAXLINES]; lines[0] NULL
第9回 優先度つき待ち行列,ヒープ,二分探索木
ハフマン符号長の効率的な求め方.
バブルソート,バケツソート,クイックソート
基本情報技術概論(第6回) 埼玉大学 理工学研究科 堀山 貴史
ヒープソートの復習 第12回.
第11回放送授業.
ソートのプログラムの流れ 配列の中身を小さい順に並び替える a[1],a[2],…a[n]の値を順に出力する
情報処理 第13回.
4.プッシュダウンオートマトンと 文脈自由文法の等価性
ドキュメントジェネレータ 詳細仕様 長谷川啓
曖昧なポインタの存在下での Copying Garbage Collection
エクスプローラ ● エクスプローラ: ファイルやフォルダを階層構造で表示してあり、これらを操作するのに便利。
参考:大きい要素の処理.
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
7.木構造 7-1.データ構造としての木 7-2.2分探索木 7-3.高度な木.
Presentation transcript:

クイックソート

クイックソートの動き 22 27 7 21 21 47 6 10 33 ランダムに基準値を選ぶ i と j がすれ違うまで繰り返す 基準値以上の値を検知する 基準値以下の値を検知する i と j がまだすれ違っていなければ A[i]とA[j]を交換する i と j を一歩進める 必要があれば部分問題を解く

クイックソートの動き 10 6 6 7 21 47 27 22 33 ランダムに基準値を選ぶ i と j がすれ違うまで繰り返す 基準値以上の値を検知する 基準値以下の値を検知する i と j がまだすれ違っていなければ A[i]とA[j]を交換する i と j を一歩進める 必要があれば部分問題を解く

クイックソートの動き 6 10 10 7 21 47 27 22 33 ランダムに基準値を選ぶ i と j がすれ違うまで繰り返す 基準値以上の値を検知する 基準値以下の値を検知する i と j がまだすれ違っていなければ A[i]とA[j]を交換する i と j を一歩進める 必要があれば部分問題を解く

クイックソートの動き 6 7 10 21 47 27 27 22 33 ランダムに基準値を選ぶ i と j がすれ違うまで繰り返す 基準値以上の値を検知する 基準値以下の値を検知する i と j がまだすれ違っていなければ A[i]とA[j]を交換する i と j を一歩進める 必要があれば部分問題を解く

クイックソートの動き 6 7 10 21 22 27 47 47 33 ランダムに基準値を選ぶ i と j がすれ違うまで繰り返す 基準値以上の値を検知する 基準値以下の値を検知する i と j がまだすれ違っていなければ A[i]とA[j]を交換する i と j を一歩進める 必要があれば部分問題を解く

クイックソートの平均時間計算量

クイックソートの平均時間計算量

クイックソートの平均時間計算量 1/n … 確率 n i 0 n – 1 … 1 n i i - 1 n - i … 1 i n – 1 0 T(0)時間 T(n-1)時間 … 1 n i i - 1 n - i T(i-1)時間 T(n-i)時間 … 1 i n – 1 0 T(n-1)時間 T(0)時間

クイックソートの平均時間計算量 1 i n – 1 0 n i - 1 n - i … 1/n 確率 帰納法で証明する T(0)時間

バケットソート

バケットソート 4 7 1 2 5 3 バケツ 1 2 3 4 5 6 7 8

バケットソート データの個数がnでデータの種類がm    O(n+m)時間

辞書式順序 単語a1 a2 …apと単語b1 b2 …bqの間の順序 (a1 a2 …ap)≦(b1 b2 …bq)   ⇔ 1. ∃j (aj<bj) and (∀i<j ai=bi) または 2. (p<q) and (∀i≦p ai=bi) 例   yamamoto < yamazaki 1のケースでj=5   ota < otani  2のケースでp=3, q=5

バケットソートでの辞書式順序 bab bca caa acc +++ 単語キュー 文字キューa 文字キューb 各単語を単語キューに入れる テンプレートのポインタを右端の文字に合わせる 文字キューc ポインタが文字を指している間は以下を繰り返す 各文字キューを空にする 単語キューが空になるまで以下を繰り返す 単語キューから単語を取出しテンプレートにセットする ポインタが指す文字の文字キューに単語を追加する 文字(アルファベット)順に以下の操作を行う カレントの文字の文字キューの中身を単語キューに追加する テンプレートのポインタを右に一つずらす

バケットソートでの辞書式順序 bab bca caa acc +++ 単語キュー 文字キューa 文字キューb 各単語を単語キューに入れる テンプレートのポインタを右端の文字に合わせる 文字キューc ポインタが文字を指している間は以下を繰り返す 各文字キューを空にする 単語キューが空になるまで以下を繰り返す 単語キューから単語を取出しテンプレートにセットする ポインタが指す文字の文字キューに単語を追加する 文字(アルファベット)順に以下の操作を行う カレントの文字の文字キューの中身を単語キューに追加する テンプレートのポインタを左に一つずらす

バケットソートでの辞書式順序 bca caa +++ bab acc 単語キュー 文字キューa 文字キューb 各単語を単語キューに入れる テンプレートのポインタを右端の文字に合わせる 文字キューc ポインタが文字を指している間は以下を繰り返す 各文字キューを空にする 単語キューが空になるまで以下を繰り返す 単語キューから単語を取出しテンプレートにセットする ポインタが指す文字の文字キューに単語を追加する 文字(アルファベット)順に以下の操作を行う カレントの文字の文字キューの中身を単語キューに追加する テンプレートのポインタを右に一つずらす

バケットソートでの辞書式順序 bca caa bab acc +++ 単語キュー 文字キューa 文字キューb 各単語を単語キューに入れる テンプレートのポインタを右端の文字に合わせる 文字キューc ポインタが文字を指している間は以下を繰り返す 各文字キューを空にする 単語キューが空になるまで以下を繰り返す 単語キューから単語を取出しテンプレートにセットする ポインタが指す文字の文字キューに単語を追加する 文字(アルファベット)順に以下の操作を行う カレントの文字の文字キューの中身を単語キューに追加する テンプレートのポインタを右に一つずらす

バケットソートでの辞書式順序 caa bab +++ bca acc 単語キュー 文字キューa 文字キューb 各単語を単語キューに入れる テンプレートのポインタを右端の文字に合わせる 文字キューc ポインタが文字を指している間は以下を繰り返す 各文字キューを空にする 単語キューが空になるまで以下を繰り返す 単語キューから単語を取出しテンプレートにセットする ポインタが指す文字の文字キューに単語を追加する 文字(アルファベット)順に以下の操作を行う カレントの文字の文字キューの中身を単語キューに追加する テンプレートのポインタを左に一つずらす

バケットソートでの辞書式順序 caa bab bca acc +++ 単語キュー 文字キューa 文字キューb 各単語を単語キューに入れる テンプレートのポインタを右端の文字に合わせる 文字キューc ポインタが文字を指している間は以下を繰り返す 各文字キューを空にする 単語キューが空になるまで以下を繰り返す 単語キューから単語を取出しテンプレートにセットする ポインタが指す文字の文字キューに単語を追加する 文字(アルファベット)順に以下の操作を行う カレントの文字の文字キューの中身を単語キューに追加する テンプレートのポインタを右に一つずらす

バケットソートでの辞書式順序 acc +++ bab bca caa 単語キュー 文字キューa 文字キューb 各単語を単語キューに入れる テンプレートのポインタを右端の文字に合わせる 文字キューc ポインタが文字を指している間は以下を繰り返す 各文字キューを空にする 単語キューが空になるまで以下を繰り返す 単語キューから単語を取出しテンプレートにセットする ポインタが指す文字の文字キューに単語を追加する 文字(アルファベット)順に以下の操作を行う カレントの文字の文字キューの中身を単語キューに追加する テンプレートのポインタを右に一つずらす

ここからは部品

クイックソートの動き 22 27 7 21 21 47 6 10 33 ランダムに基準値を選ぶ i と j がすれ違うまで繰り返す 基準値以上の値を検知する 基準値以下の値を検知する i と j がまだすれ違っていなければ A[i]とA[j]を交換する i と j を一歩進める 必要があれば部分問題を解く

クイックソートの動き 22 27  7 21 47  6 10 33

クイックソートの動き 10  6  7 10  6  7 21 47 27 22 33 47 27 22 33 10  6  7 47 27 22 33

クイックソートの動き 10  6  7 10  6  7 21 47 27 22 33 47 27 22 33  6 10  7 10  7 47 27 22 33 10  7

クイックソートの動き 10  6  7 10  6  7 21 47 27 22 33 47 27 22 33  6 10  7 10  7 47 27 22 33  7 10

クイックソートの動き 10  6  7 10  6  7 21 47 27 22 33 47 27 22 33  6 10  7 10  7 22 27 47 33 47 33  7 10 47 33

クイックソートの動き 10  6  7 10  6  7 21 21 47 27 22 33 47 27 22 33  6  6 10  7 22 22 27 27 47 33  7  7 10 10 33 33 47 47  6  7 10 21 22 27 33 47