Download presentation
Presentation is loading. Please wait.
1
クイックソート
2
クイックソートの動き 22 27 7 21 21 47 6 10 33 ランダムに基準値を選ぶ i と j がすれ違うまで繰り返す
基準値以上の値を検知する 基準値以下の値を検知する i と j がまだすれ違っていなければ A[i]とA[j]を交換する i と j を一歩進める 必要があれば部分問題を解く
3
クイックソートの動き 10 6 6 7 21 47 27 22 33 ランダムに基準値を選ぶ i と j がすれ違うまで繰り返す
基準値以上の値を検知する 基準値以下の値を検知する i と j がまだすれ違っていなければ A[i]とA[j]を交換する i と j を一歩進める 必要があれば部分問題を解く
4
クイックソートの動き 6 10 10 7 21 47 27 22 33 ランダムに基準値を選ぶ i と j がすれ違うまで繰り返す
基準値以上の値を検知する 基準値以下の値を検知する i と j がまだすれ違っていなければ A[i]とA[j]を交換する i と j を一歩進める 必要があれば部分問題を解く
5
クイックソートの動き 6 7 10 21 47 27 27 22 33 ランダムに基準値を選ぶ i と j がすれ違うまで繰り返す
基準値以上の値を検知する 基準値以下の値を検知する i と j がまだすれ違っていなければ A[i]とA[j]を交換する i と j を一歩進める 必要があれば部分問題を解く
6
クイックソートの動き 6 7 10 21 22 27 47 47 33 ランダムに基準値を選ぶ i と j がすれ違うまで繰り返す
基準値以上の値を検知する 基準値以下の値を検知する i と j がまだすれ違っていなければ A[i]とA[j]を交換する i と j を一歩進める 必要があれば部分問題を解く
7
クイックソートの平均時間計算量
8
クイックソートの平均時間計算量
9
クイックソートの平均時間計算量 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)時間
10
クイックソートの平均時間計算量 1 i n – 1 0 n i - 1 n - i … 1/n 確率 帰納法で証明する T(0)時間
11
バケットソート
12
バケットソート 4 7 1 2 5 3 バケツ 1 2 3 4 5 6 7 8
13
バケットソート データの個数がnでデータの種類がm O(n+m)時間
14
辞書式順序 単語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
15
バケットソートでの辞書式順序 bab bca caa acc +++ 単語キュー 文字キューa 文字キューb 各単語を単語キューに入れる
テンプレートのポインタを右端の文字に合わせる 文字キューc ポインタが文字を指している間は以下を繰り返す 各文字キューを空にする 単語キューが空になるまで以下を繰り返す 単語キューから単語を取出しテンプレートにセットする ポインタが指す文字の文字キューに単語を追加する 文字(アルファベット)順に以下の操作を行う カレントの文字の文字キューの中身を単語キューに追加する テンプレートのポインタを右に一つずらす
16
バケットソートでの辞書式順序 bab bca caa acc +++ 単語キュー 文字キューa 文字キューb 各単語を単語キューに入れる
テンプレートのポインタを右端の文字に合わせる 文字キューc ポインタが文字を指している間は以下を繰り返す 各文字キューを空にする 単語キューが空になるまで以下を繰り返す 単語キューから単語を取出しテンプレートにセットする ポインタが指す文字の文字キューに単語を追加する 文字(アルファベット)順に以下の操作を行う カレントの文字の文字キューの中身を単語キューに追加する テンプレートのポインタを左に一つずらす
17
バケットソートでの辞書式順序 bca caa +++ bab acc 単語キュー 文字キューa 文字キューb 各単語を単語キューに入れる
テンプレートのポインタを右端の文字に合わせる 文字キューc ポインタが文字を指している間は以下を繰り返す 各文字キューを空にする 単語キューが空になるまで以下を繰り返す 単語キューから単語を取出しテンプレートにセットする ポインタが指す文字の文字キューに単語を追加する 文字(アルファベット)順に以下の操作を行う カレントの文字の文字キューの中身を単語キューに追加する テンプレートのポインタを右に一つずらす
18
バケットソートでの辞書式順序 bca caa bab acc +++ 単語キュー 文字キューa 文字キューb 各単語を単語キューに入れる
テンプレートのポインタを右端の文字に合わせる 文字キューc ポインタが文字を指している間は以下を繰り返す 各文字キューを空にする 単語キューが空になるまで以下を繰り返す 単語キューから単語を取出しテンプレートにセットする ポインタが指す文字の文字キューに単語を追加する 文字(アルファベット)順に以下の操作を行う カレントの文字の文字キューの中身を単語キューに追加する テンプレートのポインタを右に一つずらす
19
バケットソートでの辞書式順序 caa bab +++ bca acc 単語キュー 文字キューa 文字キューb 各単語を単語キューに入れる
テンプレートのポインタを右端の文字に合わせる 文字キューc ポインタが文字を指している間は以下を繰り返す 各文字キューを空にする 単語キューが空になるまで以下を繰り返す 単語キューから単語を取出しテンプレートにセットする ポインタが指す文字の文字キューに単語を追加する 文字(アルファベット)順に以下の操作を行う カレントの文字の文字キューの中身を単語キューに追加する テンプレートのポインタを左に一つずらす
20
バケットソートでの辞書式順序 caa bab bca acc +++ 単語キュー 文字キューa 文字キューb 各単語を単語キューに入れる
テンプレートのポインタを右端の文字に合わせる 文字キューc ポインタが文字を指している間は以下を繰り返す 各文字キューを空にする 単語キューが空になるまで以下を繰り返す 単語キューから単語を取出しテンプレートにセットする ポインタが指す文字の文字キューに単語を追加する 文字(アルファベット)順に以下の操作を行う カレントの文字の文字キューの中身を単語キューに追加する テンプレートのポインタを右に一つずらす
21
バケットソートでの辞書式順序 acc +++ bab bca caa 単語キュー 文字キューa 文字キューb 各単語を単語キューに入れる
テンプレートのポインタを右端の文字に合わせる 文字キューc ポインタが文字を指している間は以下を繰り返す 各文字キューを空にする 単語キューが空になるまで以下を繰り返す 単語キューから単語を取出しテンプレートにセットする ポインタが指す文字の文字キューに単語を追加する 文字(アルファベット)順に以下の操作を行う カレントの文字の文字キューの中身を単語キューに追加する テンプレートのポインタを右に一つずらす
22
ここからは部品
23
クイックソートの動き 22 27 7 21 21 47 6 10 33 ランダムに基準値を選ぶ i と j がすれ違うまで繰り返す
基準値以上の値を検知する 基準値以下の値を検知する i と j がまだすれ違っていなければ A[i]とA[j]を交換する i と j を一歩進める 必要があれば部分問題を解く
24
クイックソートの動き 22 27 7 21 47 6 10 33
25
クイックソートの動き 10 6 7 10 6 7 21 47 27 22 33 47 27 22 33 10 6 7 47 27 22 33
26
クイックソートの動き 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
27
クイックソートの動き 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
28
クイックソートの動き 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
29
クイックソートの動き 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
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.