Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
hixi365
755 views
アルゴリズムのお勉強 マージソート 試験対策
試験対策用 足りなかった部分 マージソート 立ち絵素材 臼井の会様
Education
◦
Read more
0
Save
Share
Embed
Embed presentation
1
/ 53
2
/ 53
3
/ 53
4
/ 53
5
/ 53
6
/ 53
7
/ 53
8
/ 53
9
/ 53
10
/ 53
11
/ 53
12
/ 53
13
/ 53
14
/ 53
15
/ 53
16
/ 53
17
/ 53
18
/ 53
19
/ 53
20
/ 53
21
/ 53
22
/ 53
23
/ 53
24
/ 53
25
/ 53
26
/ 53
27
/ 53
28
/ 53
29
/ 53
30
/ 53
31
/ 53
32
/ 53
33
/ 53
34
/ 53
35
/ 53
36
/ 53
37
/ 53
38
/ 53
39
/ 53
40
/ 53
41
/ 53
42
/ 53
43
/ 53
44
/ 53
45
/ 53
46
/ 53
47
/ 53
48
/ 53
49
/ 53
50
/ 53
51
/ 53
52
/ 53
53
/ 53
More Related Content
PPTX
第五回
by
evesanta1224
PDF
アルゴリズムのお勉強 アルゴリズムとデータ構造 [素数・文字列探索・簡単なソート]
by
hixi365
PDF
アルゴリズムのお勉強 ダイクストラ
by
hixi365
PPTX
シェーダー伝道師 第一回
by
hixi365
PDF
upload test slide
by
hixi365
PDF
Kancolle
by
givemegohan
PDF
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
by
Hiro H.
PDF
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
by
Hiro H.
第五回
by
evesanta1224
アルゴリズムのお勉強 アルゴリズムとデータ構造 [素数・文字列探索・簡単なソート]
by
hixi365
アルゴリズムのお勉強 ダイクストラ
by
hixi365
シェーダー伝道師 第一回
by
hixi365
upload test slide
by
hixi365
Kancolle
by
givemegohan
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
by
Hiro H.
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
by
Hiro H.
Similar to アルゴリズムのお勉強 マージソート 試験対策
PPT
Algorithm 速いアルゴリズムを書くための基礎
by
Kenji Otsuka
PDF
アルゴリズム+データ構造勉強会(5)
by
noldor
PPT
アルゴリズムとデータ構造11
by
Kenta Hattori
PDF
abc032
by
AtCoder Inc.
PDF
DDPC 2016 予選 解説
by
AtCoder Inc.
PDF
programming camp 2008, introduction of programming, algorithm
by
Hiro Yoshioka
PDF
ソートアルゴリズム
by
Osaka University
PDF
定番アルゴリズムを徹底理解!
by
teapipin
PPTX
LLM は数学を理解しているのか?
by
Hide Koba
PPTX
初等整列(競技プログラミング chap1)
by
taichi nishimura
KEY
Algebraic DP: 動的計画法を書きやすく
by
Hiromi Ishii
PDF
プログラミングコンテストでの乱択アルゴリズム
by
Takuya Akiba
PDF
ソート
by
HCPC: 北海道大学競技プログラミングサークル
PDF
競技プログラミング練習会2015 Normal 第1回
by
Hideaki Nagamine
PDF
Abc009
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 009 解説
by
AtCoder Inc.
PPT
Pythonintro
by
Mikio Kubo
PDF
Algorithms Introduction 9章
by
mfumi
PPT
アルゴリズムとデータ構造10
by
Kenta Hattori
PDF
挿入ソート
by
s5yata
Algorithm 速いアルゴリズムを書くための基礎
by
Kenji Otsuka
アルゴリズム+データ構造勉強会(5)
by
noldor
アルゴリズムとデータ構造11
by
Kenta Hattori
abc032
by
AtCoder Inc.
DDPC 2016 予選 解説
by
AtCoder Inc.
programming camp 2008, introduction of programming, algorithm
by
Hiro Yoshioka
ソートアルゴリズム
by
Osaka University
定番アルゴリズムを徹底理解!
by
teapipin
LLM は数学を理解しているのか?
by
Hide Koba
初等整列(競技プログラミング chap1)
by
taichi nishimura
Algebraic DP: 動的計画法を書きやすく
by
Hiromi Ishii
プログラミングコンテストでの乱択アルゴリズム
by
Takuya Akiba
ソート
by
HCPC: 北海道大学競技プログラミングサークル
競技プログラミング練習会2015 Normal 第1回
by
Hideaki Nagamine
Abc009
by
AtCoder Inc.
AtCoder Beginner Contest 009 解説
by
AtCoder Inc.
Pythonintro
by
Mikio Kubo
Algorithms Introduction 9章
by
mfumi
アルゴリズムとデータ構造10
by
Kenta Hattori
挿入ソート
by
s5yata
アルゴリズムのお勉強 マージソート 試験対策
1.
アルゴリズムのお勉強 兼 前期中間対策 マージソート分
2.
※注意書き • 確実にテスト対策になる確証はありません • あくまでお勉強用です •
過去の経験やノートを参考にしています • あと変なノリが含まれます • あと、責任は取りません…というか取れません それでもいいなら進めていってください。
3.
マージソート • ソートアルゴリズムの一種 • 分割統治法
ということで…マージソートも テスト範囲だったので追加説明です。
4.
マージソート • ソートアルゴリズムの一種 • 分割統治法
マージソートもクイックソート同様に 分割統治法の一種です。
5.
マージソート • ソートアルゴリズムの一種 • 分割統治法
クイックソートは要素を 小さいものと大きいものに分けてましたが
6.
マージソート • ソートアルゴリズムの一種 • 分割統治法
マージソートは単純に半分に分けます。 そのあと連結させるときに秘密があります。
7.
マージソート 入力 : 整数列A(A1,
A2, …, An) 出力 : 入力列を昇順に整列した列B • 0 データが1つならば終了する; • 1 列のn/2番目までをP1, それ以降をP2とする; • 2 P1とP2をそれぞれ独立に整列する; • 3 for i ← 1 to n do • 4 | if head(P1) < head(P2) • 5 | | Bi ← head(P1); • 6 | | head(P1)をP1から除去する; • 7 | end • 8 | else • 9 | | Bi ← head(P2); • 10 | | head(P2)をP2から除去する; • 11 | end • 12 end • 13 BiのすべてをAiに入れる それでは早速。 こちらがマージソートの疑似言語です。
8.
マージソート 入力 : 整数列A(A1,
A2, …, An) 出力 : 入力列を昇順に整列した列B • 0 データが1つならば終了する; • 1 列のn/2番目までをP1, それ以降をP2とする; • 2 P1とP2をそれぞれ独立に整列する; • 3 for i ← 1 to n do • 4 | if head(P1) < head(P2) • 5 | | Bi ← head(P1); • 6 | | head(P1)をP1から除去する; • 7 | end • 8 | else • 9 | | Bi ← head(P2); • 10 | | head(P2)をP2から除去する; • 11 | end • 12 end • 13 BiのすべてをAiに入れる 入力、出力ともに配列ですね。
9.
マージソート 入力 : 整数列A(A1,
A2, …, An) 出力 : 入力列を昇順に整列した列B • 0 データが1つならば終了する; • 1 列のn/2番目までをP1, それ以降をP2とする; • 2 P1とP2をそれぞれ独立に整列する; • 3 for i ← 1 to n do • 4 | if head(P1) < head(P2) • 5 | | Bi ← head(P1); • 6 | | head(P1)をP1から除去する; • 7 | end • 8 | else • 9 | | Bi ← head(P2); • 10 | | head(P2)をP2から除去する; • 11 | end • 12 end • 13 BiのすべてをAiに入れる マージソートも分割統治法なので、 ここが再帰的に呼び出しを行う部分です。
10.
マージソート 入力 : 整数列A(A1,
A2, …, An) 出力 : 入力列を昇順に整列した列B • 0 データが1つならば終了する; • 1 列のn/2番目までをP1, それ以降をP2とする; • 2 P1とP2をそれぞれ独立に整列する; • 3 for i ← 1 to n do • 4 | if head(P1) < head(P2) • 5 | | Bi ← head(P1); • 6 | | head(P1)をP1から除去する; • 7 | end • 8 | else • 9 | | Bi ← head(P2); • 10 | | head(P2)をP2から除去する; • 11 | end • 12 end • 13 BiのすべてをAiに入れる その終了条件はこちらになりますね。
11.
マージソート 入力 : 整数列A(A1,
A2, …, An) 出力 : 入力列を昇順に整列した列B • 0 データが1つならば終了する; • 1 列のn/2番目までをP1, それ以降をP2とする; • 2 P1とP2をそれぞれ独立に整列する; • 3 for i ← 1 to n do • 4 | if head(P1) < head(P2) • 5 | | Bi ← head(P1); • 6 | | head(P1)をP1から除去する; • 7 | end • 8 | else • 9 | | Bi ← head(P2); • 10 | | head(P2)をP2から除去する; • 11 | end • 12 end • 13 BiのすべてをAiに入れる P1とP2は配列の前か、後ろかだけなので、 P2の中にP1の要素より小さい要素が 存在する可能性があります。
12.
マージソート 入力 : 整数列A(A1,
A2, …, An) 出力 : 入力列を昇順に整列した列B • 0 データが1つならば終了する; • 1 列のn/2番目までをP1, それ以降をP2とする; • 2 P1とP2をそれぞれ独立に整列する; • 3 for i ← 1 to n do • 4 | if head(P1) < head(P2) • 5 | | Bi ← head(P1); • 6 | | head(P1)をP1から除去する; • 7 | end • 8 | else • 9 | | Bi ← head(P2); • 10 | | head(P2)をP2から除去する; • 11 | end • 12 end • 13 BiのすべてをAiに入れる その比較を行っているのがこちらになります。
13.
マージソート 入力 : 整数列A(A1,
A2, …, An) 出力 : 入力列を昇順に整列した列B • 0 データが1つならば終了する; • 1 列のn/2番目までをP1, それ以降をP2とする; • 2 P1とP2をそれぞれ独立に整列する; • 3 for i ← 1 to n do • 4 | if head(P1) < head(P2) • 5 | | Bi ← head(P1); • 6 | | head(P1)をP1から除去する; • 7 | end • 8 | else • 9 | | Bi ← head(P2); • 10 | | head(P2)をP2から除去する; • 11 | end • 12 end • 13 BiのすべてをAiに入れる まず、前提としてこの行により P1の中身、P2の中身は それぞれで整列されています。
14.
マージソート 入力 : 整数列A(A1,
A2, …, An) 出力 : 入力列を昇順に整列した列B • 0 データが1つならば終了する; • 1 列のn/2番目までをP1, それ以降をP2とする; • 2 P1とP2をそれぞれ独立に整列する; • 3 for i ← 1 to n do • 4 | if head(P1) < head(P2) • 5 | | Bi ← head(P1); • 6 | | head(P1)をP1から除去する; • 7 | end • 8 | else • 9 | | Bi ← head(P2); • 10 | | head(P2)をP2から除去する; • 11 | end • 12 end • 13 BiのすべてをAiに入れる 繰り返し回数は全体の要素の数ですね。
15.
マージソート 入力 : 整数列A(A1,
A2, …, An) 出力 : 入力列を昇順に整列した列B • 0 データが1つならば終了する; • 1 列のn/2番目までをP1, それ以降をP2とする; • 2 P1とP2をそれぞれ独立に整列する; • 3 for i ← 1 to n do • 4 | if head(P1) < head(P2) • 5 | | Bi ← head(P1); • 6 | | head(P1)をP1から除去する; • 7 | end • 8 | else • 9 | | Bi ← head(P2); • 10 | | head(P2)をP2から除去する; • 11 | end • 12 end • 13 BiのすべてをAiに入れる このheadというのはそれぞれの配列の先頭 の要素を返す関数です。 つまり配列の最小値を返します。
16.
マージソート 入力 : 整数列A(A1,
A2, …, An) 出力 : 入力列を昇順に整列した列B • 0 データが1つならば終了する; • 1 列のn/2番目までをP1, それ以降をP2とする; • 2 P1とP2をそれぞれ独立に整列する; • 3 for i ← 1 to n do • 4 | if head(P1) < head(P2) • 5 | | Bi ← head(P1); • 6 | | head(P1)をP1から除去する; • 7 | end • 8 | else • 9 | | Bi ← head(P2); • 10 | | head(P2)をP2から除去する; • 11 | end • 12 end • 13 BiのすべてをAiに入れる つまり一番小さいもの同士を 比較することになりますね。
17.
マージソート 入力 : 整数列A(A1,
A2, …, An) 出力 : 入力列を昇順に整列した列B • 0 データが1つならば終了する; • 1 列のn/2番目までをP1, それ以降をP2とする; • 2 P1とP2をそれぞれ独立に整列する; • 3 for i ← 1 to n do • 4 | if head(P1) < head(P2) • 5 | | Bi ← head(P1); • 6 | | head(P1)をP1から除去する; • 7 | end • 8 | else • 9 | | Bi ← head(P2); • 10 | | head(P2)をP2から除去する; • 11 | end • 12 end • 13 BiのすべてをAiに入れる といことは、すべての要素で 一番小さい要素を求めることができます。
18.
マージソート 入力 : 整数列A(A1,
A2, …, An) 出力 : 入力列を昇順に整列した列B • 0 データが1つならば終了する; • 1 列のn/2番目までをP1, それ以降をP2とする; • 2 P1とP2をそれぞれ独立に整列する; • 3 for i ← 1 to n do • 4 | if head(P1) < head(P2) • 5 | | Bi ← head(P1); • 6 | | head(P1)をP1から除去する; • 7 | end • 8 | else • 9 | | Bi ← head(P2); • 10 | | head(P2)をP2から除去する; • 11 | end • 12 end • 13 BiのすべてをAiに入れる 小さかった方を、答えの配列に追加して…
19.
マージソート 入力 : 整数列A(A1,
A2, …, An) 出力 : 入力列を昇順に整列した列B • 0 データが1つならば終了する; • 1 列のn/2番目までをP1, それ以降をP2とする; • 2 P1とP2をそれぞれ独立に整列する; • 3 for i ← 1 to n do • 4 | if head(P1) < head(P2) • 5 | | Bi ← head(P1); • 6 | | head(P1)をP1から除去する; • 7 | end • 8 | else • 9 | | Bi ← head(P2); • 10 | | head(P2)をP2から除去する; • 11 | end • 12 end • 13 BiのすべてをAiに入れる その要素は除去、 つまり吐き出したことになります。
20.
マージソート 入力 : 整数列A(A1,
A2, …, An) 出力 : 入力列を昇順に整列した列B • 0 データが1つならば終了する; • 1 列のn/2番目までをP1, それ以降をP2とする; • 2 P1とP2をそれぞれ独立に整列する; • 3 for i ← 1 to n do • 4 | if head(P1) < head(P2) • 5 | | Bi ← head(P1); • 6 | | head(P1)をP1から除去する; • 7 | end • 8 | else • 9 | | Bi ← head(P2); • 10 | | head(P2)をP2から除去する; • 11 | end • 12 end • 13 BiのすべてをAiに入れる 次の比較では、先ほどの一番小さい要素を 除いて行われます。 つまり2番目に小さい要素を求めます。
21.
マージソート 入力 : 整数列A(A1,
A2, …, An) 出力 : 入力列を昇順に整列した列B • 0 データが1つならば終了する; • 1 列のn/2番目までをP1, それ以降をP2とする; • 2 P1とP2をそれぞれ独立に整列する; • 3 for i ← 1 to n do • 4 | if head(P1) < head(P2) • 5 | | Bi ← head(P1); • 6 | | head(P1)をP1から除去する; • 7 | end • 8 | else • 9 | | Bi ← head(P2); • 10 | | head(P2)をP2から除去する; • 11 | end • 12 end • 13 BiのすべてをAiに入れる あとはこれを繰り返していけば… 最終的にすべての要素を 並べることができますね。
22.
マージソート 入力 : 整数列A(A1,
A2, …, An) 出力 : 入力列を昇順に整列した列B • 0 データが1つならば終了する; • 1 列のn/2番目までをP1, それ以降をP2とする; • 2 P1とP2をそれぞれ独立に整列する; • 3 for i ← 1 to n do • 4 | if head(P1) < head(P2) • 5 | | Bi ← head(P1); • 6 | | head(P1)をP1から除去する; • 7 | end • 8 | else • 9 | | Bi ← head(P2); • 10 | | head(P2)をP2から除去する; • 11 | end • 12 end • 13 BiのすべてをAiに入れる 最後に、出力列を入力列に戻します。
23.
マージソート head関数について説明します。 head関数は配列要素の 先頭の値を返します。
24.
マージソート ここで、要素が空だった場合は∞を返します。 これにより同じ処理で、比較できるわけです。
25.
マージソート それでは、 マージソートの動作を確認してみましょう。 5134 2
26.
マージソート ノートの方は2分割の都合上 要素数が8ですが… 要素数5でやってみましょう。 5134 2
27.
マージソート 疑似言語より、要素数が5なので 5/2=2 添字<2をP1としましょう。 5134 2 列のn/2番目までをP1, それ以降をP2とする;
28.
マージソート 8だった場合は 8/2=4 添字<4でちょうど半分ですね。 5134 2 列のn/2番目までをP1, それ以降をP2とする;
29.
マージソート まず、添え字が2未満をP1 それ以降をP2とします。 5134 2 134 5
2
30.
マージソート 左側では要素数2より2/2=1、 添字<1をP1、 それ以降をP2としますね。 5134 2 134 5
2 4 3
31.
マージソート 右側は要素数3より3/2=1、 添字<1をP1、 それ以降をP2とします。 5134 2 134 5
2 1 5 24 3
32.
マージソート 右側はさらに分割できるのでこうなりますね。 5134 2 134 5
2 1 5 24 3 5 2
33.
マージソート まず5と2から計算していきましょう。 5134 2 134 5
2 1 5 24 3 5 2
34.
マージソート 5<2で2を追加します。 5 2
35.
マージソート こうなりますね。 ここで2を除去します。 2 5 2
36.
マージソート P2は空集合なのでheadは∞になります。 つまり5<∞の比較で5が入ります。 2 5
37.
マージソート これで、一回分の併合(マージ)が 完了しました。 2 5
38.
マージソート どんどん行きましょう。 1と2の比較ですね。 1 2 5
39.
マージソート 左は空なので∞となります。 2が入って…1 2 5
40.
マージソート 5も∞と比較されて… 1 2 5
41.
マージソート こうなりました。 1 2 5
42.
マージソート 同様に4と3も併合されます。 143 2 5
43.
マージソート では、最後もやってみましょう。 143 2 5
44.
マージソート 3と1で1ですね。 143 2 5
45.
マージソート 3と2で2ですね。 1 43 2 5
46.
マージソート 3と5で3ですね。 21 43 5
47.
マージソート 4と5で4ですね。 321 4 5
48.
マージソート 最後は5ですね。 4321 5
49.
マージソート できました。 これがマージソートです。 4321 5
50.
以上 以上簡単ですが、 マージソートとなります。
51.
教科書 • アルゴリズムとデータ構造 数理工学社
藤田 聡 2013/3/10 教科書のため、ところどころ引用になってる場所があります
52.
立ち絵素材 • 臼井の会様 http://usui.moo.jp/frame2.html
53.
ご視聴ありがとうございました。 頑張ってくださいね。