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
EN
HN
Uploaded by
Hideaki Nagamine
PDF, PPTX
3,500 views
競技プログラミング練習会2015 Normal 第3回
2015年5月1日. 京大マイコンクラブ部室. グラフと最短経路問題.
Engineering
◦
Read more
5
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 45
2
/ 45
3
/ 45
4
/ 45
5
/ 45
6
/ 45
7
/ 45
8
/ 45
9
/ 45
10
/ 45
11
/ 45
12
/ 45
13
/ 45
14
/ 45
15
/ 45
16
/ 45
17
/ 45
18
/ 45
19
/ 45
20
/ 45
21
/ 45
22
/ 45
23
/ 45
24
/ 45
25
/ 45
26
/ 45
27
/ 45
28
/ 45
29
/ 45
30
/ 45
31
/ 45
32
/ 45
33
/ 45
34
/ 45
35
/ 45
36
/ 45
37
/ 45
38
/ 45
39
/ 45
40
/ 45
41
/ 45
42
/ 45
43
/ 45
44
/ 45
45
/ 45
More Related Content
PDF
PCD2019 TOKYO ワークショップ「2時間で!Processingでプログラミング入門」
by
reona396
PDF
Let's enjoy modulo!
by
Junpei Tsuji
PDF
モナモナ言うモナド入門
by
Masahiro Honma
ODP
TopCoder Marathon Match 74 (yowa)
by
yowaken
PDF
One
by
oupc
PDF
競技プログラミング練習会2015 Normal 第2回
by
Hideaki Nagamine
PDF
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
by
AtCoder Inc.
PDF
実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)
by
AtCoder Inc.
PCD2019 TOKYO ワークショップ「2時間で!Processingでプログラミング入門」
by
reona396
Let's enjoy modulo!
by
Junpei Tsuji
モナモナ言うモナド入門
by
Masahiro Honma
TopCoder Marathon Match 74 (yowa)
by
yowaken
One
by
oupc
競技プログラミング練習会2015 Normal 第2回
by
Hideaki Nagamine
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
by
AtCoder Inc.
実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)
by
AtCoder Inc.
Similar to 競技プログラミング練習会2015 Normal 第3回
PPT
Introduction to Algorithms#24 Shortest-Paths Problem
by
Naoya Ito
PDF
動的計画法入門(An introduction to Dynamic Programming)
by
kakira9618
PDF
KMC 競技プログラミング練習会 Advanced 第3回 ふろー
by
kyoto university
PDF
2章グラフ理論スピード入門
by
Teruo Kawasaki
PDF
Comp geom20131107open
by
Kensuke Onishi
PDF
AtCoder Beginner Contest 035 解説
by
AtCoder Inc.
PDF
NIPS2013読み会: Scalable kernels for graphs with continuous attributes
by
Yasuo Tabei
PDF
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
by
Kensuke Otsuki
PDF
Convex Hull Trick
by
HCPC: 北海道大学競技プログラミングサークル
PDF
プログラミングコンテストでのデータ構造 2 ~動的木編~
by
Takuya Akiba
PDF
AtCoder Regular Contest 026 解説
by
AtCoder Inc.
PDF
最大流 (max flow)
by
HCPC: 北海道大学競技プログラミングサークル
PDF
WUPC2012
by
Dai Hamada
PPTX
高速な挿入と検索が可能なSkip Graphの改良
by
Kota Abe
PDF
アルゴリズムのお勉強 ダイクストラ
by
hixi365
PDF
Sec15 dynamic programming
by
Keisuke OTAKI
PDF
目指せグラフマスター
by
HCPC: 北海道大学競技プログラミングサークル
PDF
全域木いろいろ
by
HCPC: 北海道大学競技プログラミングサークル
PDF
グラフと木
by
京大 マイコンクラブ
PDF
平面グラフと交通ネットワークのアルゴリズム
by
Takuya Akiba
Introduction to Algorithms#24 Shortest-Paths Problem
by
Naoya Ito
動的計画法入門(An introduction to Dynamic Programming)
by
kakira9618
KMC 競技プログラミング練習会 Advanced 第3回 ふろー
by
kyoto university
2章グラフ理論スピード入門
by
Teruo Kawasaki
Comp geom20131107open
by
Kensuke Onishi
AtCoder Beginner Contest 035 解説
by
AtCoder Inc.
NIPS2013読み会: Scalable kernels for graphs with continuous attributes
by
Yasuo Tabei
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
by
Kensuke Otsuki
Convex Hull Trick
by
HCPC: 北海道大学競技プログラミングサークル
プログラミングコンテストでのデータ構造 2 ~動的木編~
by
Takuya Akiba
AtCoder Regular Contest 026 解説
by
AtCoder Inc.
最大流 (max flow)
by
HCPC: 北海道大学競技プログラミングサークル
WUPC2012
by
Dai Hamada
高速な挿入と検索が可能なSkip Graphの改良
by
Kota Abe
アルゴリズムのお勉強 ダイクストラ
by
hixi365
Sec15 dynamic programming
by
Keisuke OTAKI
目指せグラフマスター
by
HCPC: 北海道大学競技プログラミングサークル
全域木いろいろ
by
HCPC: 北海道大学競技プログラミングサークル
グラフと木
by
京大 マイコンクラブ
平面グラフと交通ネットワークのアルゴリズム
by
Takuya Akiba
More from Hideaki Nagamine
PDF
PietでLISP処理系を書くのは難しい
by
Hideaki Nagamine
PDF
Pietでlisp処理系を書くのは難しい 進捗報告
by
Hideaki Nagamine
PDF
フェーザとか
by
Hideaki Nagamine
PDF
Pietソースコード精読
by
Hideaki Nagamine
PDF
競技プログラミング練習会2015 Normal 第4回
by
Hideaki Nagamine
PDF
競技プログラミング練習会2015 Normal 第1回
by
Hideaki Nagamine
PPTX
Gaucheでマクロを書こう
by
Hideaki Nagamine
ODP
On Lisp読書会2014 第3回「第2章 関数 (つづき)」
by
Hideaki Nagamine
PietでLISP処理系を書くのは難しい
by
Hideaki Nagamine
Pietでlisp処理系を書くのは難しい 進捗報告
by
Hideaki Nagamine
フェーザとか
by
Hideaki Nagamine
Pietソースコード精読
by
Hideaki Nagamine
競技プログラミング練習会2015 Normal 第4回
by
Hideaki Nagamine
競技プログラミング練習会2015 Normal 第1回
by
Hideaki Nagamine
Gaucheでマクロを書こう
by
Hideaki Nagamine
On Lisp読書会2014 第3回「第2章 関数 (つづき)」
by
Hideaki Nagamine
競技プログラミング練習会2015 Normal 第3回
1.
競技プログラミング練習会 2015 Normal 第3回 2015/05/01 長嶺英朗(ID:hnagamin)
2.
目次 ● グラフ – グラフとは – グラフに関する用語 ● 最短経路問題 ● ベルマンフォード法 ● ワーシャルフロイド法
3.
グラフ この辺りのページの多くは、 http://www.slideshare.net/KMC_JP/graph-and-tree から引用しています
4.
グラフ ●頂点と辺の集合 ●辺は頂点と頂点を結ぶ ●辺に向きがあるものを有向グラフ、向きのないもの を無向グラフという 頂点 辺 無向グラフ
5.
グラフ ●頂点と辺の集合 ●辺は頂点と頂点を結ぶ ●辺に向きがあるものを有向グラフ、向きのないもの を無向グラフという 頂点 辺 有向グラフ
6.
グラフに関する用語 ●道(パス):一続きの頂点の列
7.
グラフに関する用語 ●閉路(サイクル):始点と終点が同じパス
8.
グラフに関する用語 ●距離:2頂点を結ぶ最短の道の長さ 距離: 2
9.
グラフに関する用語 ●直径:距離の最大値 直径: 2
10.
グラフに関する用語 ●ループ:辺の両端が同じ頂点になっているもの
11.
グラフに関する用語 ●多重辺:辺の両端の組が等しい複数の辺
12.
グラフに関する用語 ●単純グラフ:ループも多重辺も無いグラフ 単純グラフでない
13.
グラフに関する用語 ●単純グラフ:ループも多重辺も無いグラフ 単純グラフである
14.
グラフに関する用語 ●連結グラフ:どの2点間にも道があるグラフ 連結でない
15.
グラフに関する用語 ●連結グラフ:どの2点間にも道があるグラフ 連結である
16.
グラフに関する用語 ●次数:頂点に接続している辺の本数 3 4 5 4 5 3
17.
グラフに関する用語 ●正則グラフ:全頂点の次数が等しいグラフ 4 4 4 4 4 4
18.
グラフに関する用語 ●完全グラフ:どの2点間にも辺があるグラフ
19.
グラフの実装 ●隣接行列 ●グラフを2次元配列で表す ●iからjにコストwの辺があるとき a[i][j]=wとする ●実装が楽 ●頂点数が多くなるとメモリを浪費 する ●多重辺への対応が難しい 0 1 2
3 0 0 10 15 0 1 20 0 60 0 2 0 0 0 30 3 0 0 0 0 1 0 2 3 10 20 60 15 30
20.
グラフの実装 ●隣接行列 ●グラフを2次元配列で表す ●iからjにコストwの辺があるとき a[i][j]=wとする ●実装が楽 ●頂点数が多くなるとメモリを浪費 する ●多重辺への対応が難しい 0 1 2
3 0 -1 10 15 -1 1 20 -1 60 -1 2 -1 -1 -1 30 3 -1 -1 -1 -1 1 0 2 3 10 20 60 15 30
21.
グラフの実装 ●隣接行列 ●グラフを2次元配列で表す ●iからjにコストwの辺があるとき a[i][j]=wとする ●実装が楽 ●頂点数が多くなるとメモリを浪費 する ●多重辺への対応が難しい 0 1 2
3 0 ∞ 10 15 ∞ 1 20 ∞ 60 ∞ 2 ∞ ∞ ∞ 30 3 ∞ ∞ ∞ ∞ 1 0 2 3 10 20 60 15 30
22.
グラフの実装 ●隣接グラフ ●各頂点から伸びる辺のリスト ●無向グラフのときは互いに逆向き の辺が2本あると考える ●頂点数が多くても大丈夫 ●多重辺があっても大丈夫 0 (1,10),(2,15) 1 (0,20),(2,60) 2
(3,30) 3 - 1 0 2 3 10 20 60 15 30
23.
最短経路問題
24.
最短経路問題 ●頂点間の距離を求める問題 ●全点対最短経路問題…全ての頂点間の距離 ●単一始点最短経路問題…ある点から各点への距離 1 0 2 3 10 20 60 15 30 頂点1 0: 20⇒ 頂点1
1: 0⇒ 頂点1 2: 35⇒ 頂点1 3: 65⇒ 単一始点最短経路問題の例
25.
ベルマンフォード法 ●単一始点最短経路問題を解く ●計算量O(VE) ●V: 頂点数, E:
辺の数
26.
ベルマンフォード法のアイデア ●各頂点への暫定的な最短経路を保存しておく ●各辺を使うことで最短経路を更新できるか調べる ●コストwの辺i→jについて、dj > di
+ w か調べる ●diは始点からiへの距離
27.
ベルマンフォード法の動作 ●始点を除く各頂点に対してdi = ∞とする ●実際には(とても大きい)有限の数にする 1 0 2 3 10 20 60 15 30 頂点i
0 1 2 3 距離di ∞ 0 ∞ ∞ 辺のリスト (0,1,10), (0,2,15), (1,0, 20), (1,2,60), (2,3,30)
28.
ベルマンフォード法の動作 ●各辺に対してd終点 > d始点+コストでないか調べる 1 0 2 3 10 20 60 15 30 頂点i
0 1 2 3 距離di ∞ 0 ∞ ∞ 辺のリスト (0,1,10), (0,2,15), (1,0, 20), (1,2,60), (2,3,30)
29.
ベルマンフォード法の動作 ●各辺に対してd終点 > d始点+コストでないか調べる 1 0 2 3 10 20 60 15 30 頂点i
0 1 2 3 距離di ∞ 0 ∞ ∞ 辺のリスト (0,1,10), (0,2,15), (1,0, 20), (1,2,60), (2,3,30) d1 = 0 < d0 + 10 = ∞+10 (更新しない)
30.
ベルマンフォード法の動作 ●各辺に対してd終点 > d始点+コストでないか調べる 1 0 2 3 10 20 60 15 30 頂点i
0 1 2 3 距離di ∞ 0 ∞ ∞ 辺のリスト (0,1,10), (0,2,15), (1,0, 20), (1,2,60), (2,3,30) d2 = ∞ < d0 + 10 = ∞+15 (更新しない)
31.
ベルマンフォード法の動作 ●各辺に対してd終点 > d始点+コストでないか調べる 1 0 2 3 10 20 60 15 30 頂点i
0 1 2 3 距離di 20 0 ∞ ∞ 辺のリスト (0,1,10), (0,2,15), (1,0, 20), (1,2,60), (2,3,30) d0 = ∞ > d1 + 20 = 20 (更新する)
32.
ベルマンフォード法の動作 ●各辺に対してd終点 > d始点+コストでないか調べる 1 0 2 3 10 20 60 15 30 頂点i
0 1 2 3 距離di 20 0 60 ∞ 辺のリスト (0,1,10), (0,2,15), (1,0, 20), (1,2,60), (2,3,30) d2 = ∞ > d1 + 60 = 60 (更新する)
33.
ベルマンフォード法の動作 ●各辺に対してd終点 > d始点+コストでないか調べる 1 0 2 3 10 20 60 15 30 頂点i
0 1 2 3 距離di 20 0 60 90 辺のリスト (0,1,10), (0,2,15), (1,0, 20), (1,2,60), (2,3,30) d3 = ∞ > d2 + 30 = 90 (更新する)
34.
ベルマンフォード法の動作 ●各辺に対してd終点 > d始点+コストでないか調べる 1 0 2 3 10 20 60 15 30 頂点i
0 1 2 3 距離di 20 0 60 90 辺のリスト (0,1,10), (0,2,15), (1,0, 20), (1,2,60), (2,3,30) d1 = 0 < d0 + 10 = 30 (更新しない)
35.
ベルマンフォード法の動作 ●各辺に対してd終点 > d始点+コストでないか調べる 1 0 2 3 10 20 60 15 30 頂点i
0 1 2 3 距離di 20 0 35 90 辺のリスト (0,1,10), (0,2,15), (1,0, 20), (1,2,60), (2,3,30) d2 = 60 > d0 + 15 = 35 (更新する)
36.
ベルマンフォード法の動作 ●各辺に対してd終点 > d始点+コストでないか調べる 1 0 2 3 10 20 60 15 30 頂点i
0 1 2 3 距離di 20 0 35 90 辺のリスト (0,1,10), (0,2,15), (1,0, 20), (1,2,60), (2,3,30) d0 = 20 = d1 + 20 = 20 (更新しない)
37.
ベルマンフォード法の動作 ●各辺に対してd終点 > d始点+コストでないか調べる 1 0 2 3 10 20 60 15 30 頂点i
0 1 2 3 距離di 20 0 35 90 辺のリスト (0,1,10), (0,2,15), (1,0, 20), (1,2,60), (2,3,30) d2 = 35 < d1 + 60 = 60 (更新しない)
38.
ベルマンフォード法の動作 ●各辺に対してd終点 > d始点+コストでないか調べる 1 0 2 3 10 20 60 15 30 頂点i
0 1 2 3 距離di 20 0 35 65 辺のリスト (0,1,10), (0,2,15), (1,0, 20), (1,2,60), (2,3,30) d3 = 90 > d2 + 30 = 65 (更新する)
39.
ベルマンフォード法の動作 ●辺のリストを1周したとき、距離を1回も更新できな ければもう距離を更新できないので終了する ●このときのdiが最短距離 1 0 2 3 10 20 60 15 30 頂点i 0
1 2 3 距離di 20 0 35 65 辺のリスト (0,1,10), (0,2,15), (1,0, 20), (1,2,60), (2,3,30)
40.
ベルマンフォード法の計算量 ●負の閉路がないとき ●最初は始点から始点への距離(0)が確定している ●辺のリストを1周すると、距離が確定した頂点に隣接 するもののうち少なくとも1つの距離が確定する ●この頂点の距離は今後2度と更新されない ●従って、(V-1)周すると全ての頂点の距離が定まる ●O((V-1)E) = O(VE)
41.
ベルマンフォード法の計算量 ●負の閉路があるとき ●一部の頂点について“最短距離”が定まらない ●辺のリストをV周しても、負の閉路を構成する頂点 の最短距離は更新される ●V周目でも更新されると負の閉路があることが分 かるので、そこで計算を打ち切る ●O(VE)で負の閉路の検出ができる
42.
ワーシャルフロイド法 ●全点対最短経路問題を解く ●計算量O(V3) ●V: 頂点数 ●実装が簡単 ●頂点数が小さい場合には単一始点最短経路問題 でもこれを使うことがある
43.
ワーシャルフロイド法のアイデア ●dij > dik
+ dkj なら、iからkを経由してjに行くことで iからjへより小さいコストで行くことができる ●全ての(i, j, k)についてこれを調べる k ji dij dik dkj
44.
ワーシャルフロイド法の実装 ●隣接行列を持っておくと良い for (int i = 0; i < V; i++) { for (int j = 0; j < V; j++) { d[i][j] = (i == j ? 0 : INFINITY); } } for (int i = 0; i < E; i++) { d[edges[i].from][edges[i].to] = edges[i].cost; } for (int k = 0; i < V; i++) { for (int i = 0; j < V; j++) { for (int j = 0; k < V; k++) { d[i][j] = min(d[i][j], d[i][k] + d[k][j]); } } } 行列の初期化 最短距離の更新
45.
ワーシャルフロイド法の計算量 ●プログラムの形式から明らかにO(V3)
Download