SlideShare a Scribd company logo
1 of 105
アルゴリズムのお勉強
兼 前期末対策
※注意書き
• 確実にテスト対策になる確証はありません
• あくまでお勉強用です
• テスト範囲やノートを参考にしています
• あと変なノリが含まれます
• あと、責任は取りません…というか取れません
それでもいいなら進めていってください。
はじめにテスト範囲の考察
• キューとスタック
→マージソートで最適なデータ構造
• w(s, V-U)
• 補題1
• 補題2
• ダイクストラのアルゴリズム
まずテスト範囲から
そのテスト内容の考察です。
はじめにテスト範囲の考察
• キューとスタック
→マージソートで最適なデータ構造
• w(s, V-U)
• 補題1
• 補題2
• ダイクストラのアルゴリズム
配列、キュー、スタックについての特徴、
これは表にまとめて暗記ですね。
はじめにテスト範囲の考察
• キューとスタック
→マージソートで最適なデータ構造
• w(s, V-U)
• 補題1
• 補題2
• ダイクストラのアルゴリズム
もっといえばそれをC言語で実装する方法、
さすがにそこまでは出ないかもしれません。
はじめにテスト範囲の考察
• キューとスタック
→マージソートで最適なデータ構造
• w(s, V-U)
• 補題1
• 補題2
• ダイクストラのアルゴリズム
次に、マージソートに適するデータ構造。
データ構造の特徴から考えていきます。
理由を含めて暗記でいいかと。
はじめにテスト範囲の考察
• キューとスタック
→マージソートで最適なデータ構造
• w(s, V-U)
• 補題1
• 補題2
• ダイクストラのアルゴリズム
次にグラフに入ります。
頂点SからV-U内の頂点の
重み最小な道の長さです。
はじめにテスト範囲の考察
• キューとスタック
→マージソートで最適なデータ構造
• w(s, V-U)
• 補題1
• 補題2
• ダイクストラのアルゴリズム
これは定義として覚えておいて、
求めるならば、総当たりで求めてください。
はじめにテスト範囲の考察
• キューとスタック
→マージソートで最適なデータ構造
• w(s, V-U)
• 補題1
• 補題2
• ダイクストラのアルゴリズム
補題は基本暗記でどうぞ。
一応解説はしてますが…
はじめにテスト範囲の考察
• キューとスタック
→マージソートで最適なデータ構造
• w(s, V-U)
• 補題1
• 補題2
• ダイクストラのアルゴリズム
ダイクストラは解き方中心に覚えましょう。
データ構造
• 配列
末尾の追加、削除◎
先頭の削除×
• スタック
(配列) 末尾の追加、削除◎
(連結リスト) 先頭の追加、削除◎
• キュー
末尾の追加、先頭の削除◎
まず、データ構造の説明から。
データ構造
• 配列
末尾の追加、削除◎
先頭の削除×
• スタック
(配列) 末尾の追加、削除◎
(連結リスト) 先頭の追加、削除◎
• キュー
末尾の追加、先頭の削除◎
配列は言わずと知れたデータ構造です。
添字でどこでも好きな値を
変更することができます。
データ構造
• 配列
末尾の追加、削除◎
先頭の削除×
• スタック
(配列) 末尾の追加、削除◎
(連結リスト) 先頭の追加、削除◎
• キュー
末尾の追加、先頭の削除◎
配列は末尾、つまりデータがないところに
簡単にデータを追加することができます。
データ構造
• 配列
末尾の追加、削除◎
先頭の削除×
• スタック
(配列) 末尾の追加、削除◎
(連結リスト) 先頭の追加、削除◎
• キュー
末尾の追加、先頭の削除◎
同様にデータの削除は末尾のみ可能です。
例えば、真ん中削除しちゃうと穴が空きます。
詰めるのめんどくさい…つまり苦手。
データ構造
• 配列
末尾の追加、削除◎
先頭の削除×
• スタック
(配列) 末尾の追加、削除◎
(連結リスト) 先頭の追加、削除◎
• キュー
末尾の追加、先頭の削除◎
先頭の削除もそういうわけで苦手です。
データ構造
• 配列
末尾の追加、削除◎
先頭の削除×
• スタック
(配列) 末尾の追加、削除◎
(連結リスト) 先頭の追加、削除◎
• キュー
末尾の追加、先頭の削除◎
次にスタックです。
スタックは後入先出、先入後出です。
ちょうど積み上げたものを崩す感じです。
データ構造
• 配列
末尾の追加、削除◎
先頭の削除×
• スタック
(配列) 末尾の追加、削除◎
(連結リスト) 先頭の追加、削除◎
• キュー
末尾の追加、先頭の削除◎
配列で実装した場合は末尾に追加していき、
末尾から取り出します。
つまりこれが末尾の追加と削除です。
データ構造
• 配列
末尾の追加、削除◎
先頭の削除×
• スタック
(配列) 末尾の追加、削除◎
(連結リスト) 先頭の追加、削除◎
• キュー
末尾の追加、先頭の削除◎
連結リストの場合は
ポインタを使ったリスト構造です。
これは先頭の追加、削除になります。
データ構造
• 配列
末尾の追加、削除◎
先頭の削除×
• スタック
(配列) 末尾の追加、削除◎
(連結リスト) 先頭の追加、削除◎
• キュー
末尾の追加、先頭の削除◎
結局のところスタックというデータ構造は、
後から追加したデータを先に処理する、
という考え方になりますね。
データ構造
• 配列
末尾の追加、削除◎
先頭の削除×
• スタック
(配列) 末尾の追加、削除◎
(連結リスト) 先頭の追加、削除◎
• キュー
末尾の追加、先頭の削除◎
最後にキューです。
これは先入先出。
先に並んだ方が先に出ていきます。
データ構造
• 配列
末尾の追加、削除◎
先頭の削除×
• スタック
(配列) 末尾の追加、削除◎
(連結リスト) 先頭の追加、削除◎
• キュー
末尾の追加、先頭の削除◎
つまり末尾に並んで先頭から出ていく、先に
並ぶと先に処理される、簡単ですね。
マージソートに適しているデータ構造
• 配列
末尾の追加、削除◎
先頭の削除×
• スタック
(配列) 末尾の追加、削除◎
(連結リスト) 先頭の追加、削除◎
• キュー
末尾の追加、先頭の削除◎
マージソートに適しているデータ構造ですが、
これはキューですね。
マージソートに適しているデータ構造
• 配列
末尾の追加、削除◎
先頭の削除×
• スタック
(配列) 末尾の追加、削除◎
(連結リスト) 先頭の追加、削除◎
• キュー
末尾の追加、先頭の削除◎
理由としては、マージソートの併合の時、
先頭(小)をとりだして、末尾(さらに小)の
キューに追加していくからです。
マージソートに適しているデータ構造
• 配列
末尾の追加、削除◎
先頭の削除×
• スタック
(配列) 末尾の追加、削除◎
(連結リスト) 先頭の追加、削除◎
• キュー
末尾の追加、先頭の削除◎
つまり先入先出というデータ構造が
マージソートに適していることになります。
マージソートに適しているデータ構造
• 配列
末尾の追加、削除◎
先頭の削除×
• スタック
(配列) 末尾の追加、削除◎
(連結リスト) 先頭の追加、削除◎
• キュー
末尾の追加、先頭の削除◎
ということで、次はグラフに参ります。
w(s, V-U)
さて問題のこの式。
まずはグラフで見てみましょう。
V
w(s, V-U)
この集合はグラフVの頂点です。
V
w(s, V-U)
その中にスタート地点である、
頂点sを決めます。
s
V
w(s, V-U)
ではそのsのみを区切って分けてみます。
左がUで、U
s
V
w(s, V-U)
右はVからUを除いたものとなるので、
V-Uと表現することができます。U
s
V
V-U
w(s, V-U)
このときw(s, V-U)は右の集合の中で、
一番重みが小さい頂点の重みを返します。U
s
V
V-U
w(s, V-U)
仮にこの様になっていた場合は、
1が最小の重みですね。U
s
V
V-U
1
3
w(s, V-U)
では、その重み最小の頂点を追加すると、
Uに追加されて境界線が変わります。U
s
V
V-U
1
3
1
w(s, V-U)
w(s, V-U)の対象となる頂点は2つですが…
今回は上の2(1+1)が出てきます。U
s
V
V-U
1
3
1
w(s, V-U)
そんな感じでどんどん追加していきます。
U
s
V
V-U
1
3
1
3
4
w(s, V-U)
どんどん追加…
U
s
V
V-U
1
3
1
3
4
1
w(s, V-U)
とりあえず途中だけどここまで。
U
s
V
V-U
1
3
1
3
4
1
3
補題1
では補題1について説明します。
U
s
V
V-U
1
3
1
3
4
1
3
補題1
補題1の内容はこうですね。
要約すると、z以外はUに属する、
ということを言ってます。
• w(s, V-U)を表す道を
P=s, v1, v2, …, vk, zとする。
このときs, v1, v2, …, vk ∈ Uである。
補題1
先ほどのグラフで言えば…
• w(s, V-U)を表す道を
P=s, v1, v2, …, vk, zとする。
このときs, v1, v2, …, vk ∈ Uである。
U
s
V
V-U
1
3
1
3
4
1
3
補題1
新しく追加する頂点(赤色)への道は
すべてUに含まれるということです。
• w(s, V-U)を表す道を
P=s, v1, v2, …, vk, zとする。
このときs, v1, v2, …, vk ∈ Uである。
U
s
V
V-U
1
3
1
3
4
1
3
補題1
例えばこの赤い頂点の場合、
黄色の頂点はすべてUに含まれますね。
• w(s, V-U)を表す道を
P=s, v1, v2, …, vk, zとする。
このときs, v1, v2, …, vk ∈ Uである。
U
s
V
V-U
1
3
1
3
4
1
3
補題1
背理法を使って証明していきます。
• w(s, V-U)を表す道を
P=s, v1, v2, …, vk, zとする。
このときs, v1, v2, …, vk ∈ Uである。
U
s
V
V-U
1
3
1
3
4
1
3
補題1
まず、vkまでUに属さない点が
存在したと仮定します。
• w(s, V-U)を表す道を
P=s, v1, v2, …, vk, zとする。
このときs, v1, v2, …, vk ∈ Uである。
U
s
V
V-U
1
3
1
3
4
1
3
補題1
点x, yとして追加します。
• w(s, V-U)を表す道を
P=s, v1, v2, …, vk, zとする。
このときs, v1, v2, …, vk ∈ Uである。
U
s
V
V-U
1
3
1
3
4
1
3
x
y
補題1
距離は合わせて3になるように、
それぞれの辺の重みは1とします。
• w(s, V-U)を表す道を
P=s, v1, v2, …, vk, zとする。
このときs, v1, v2, …, vk ∈ Uである。
U
s
V
V-U
1
3
1
3
4
1
3
x
y
1
11
補題1
さて、どうしてこれがダメなのでしょうか?
• w(s, V-U)を表す道を
P=s, v1, v2, …, vk, zとする。
このときs, v1, v2, …, vk ∈ Uである。
U
s
V
V-U
1
3
1
3
4
1
3
x
y
1
11
x
補題1
あ、赤い頂点より頂点xの方がw(s, V-U)の値、
つまりU以外、V-Uの中で
一番最小な重みを持つ頂点となります。
• w(s, V-U)を表す道を
P=s, v1, v2, …, vk, zとする。
このときs, v1, v2, …, vk ∈ Uである。
U
s
V
V-U
1
3
1
3
4
1
3
y
1
11
x
補題1
これは仮定と異なりますね。
つまり…
こういう頂点は存在してはいけないのです。
• w(s, V-U)を表す道を
P=s, v1, v2, …, vk, zとする。
このときs, v1, v2, …, vk ∈ Uである。
U
s
V
V-U
1
3
1
3
4
1
3
y
1
11
x
補題1
ということで、補題1は成り立ちますね。
• w(s, V-U)を表す道を
P=s, v1, v2, …, vk, zとする。
このときs, v1, v2, …, vk ∈ Uである。
U
s
V
V-U
1
3
1
3
4
1
3
y
1
11
補題2
次に補題2です。
• 先ほどの補題1に続き、
s, v1, v2, …, vkは重み最小のs-vk道
である。
補題2
簡単に言えば…
新しく追加される重み最小の道は、
一手前も重み最小の道ということです。
• 先ほどの補題1に続き、
s, v1, v2, …, vkは重み最小のs-vk道
である。
補題2
同様にこのグラフでやってみましょう。
赤い道が今回の重み最小道です。
• 先ほどの補題1に続き、
s, v1, v2, …, vkは重み最小のs-vk道
である。
U
s
V
V-U
1
3
1
3
4
1
3
補題2
補題が正しいならば、
一手前の赤い道は重み最小のはずです。
• 先ほどの補題1に続き、
s, v1, v2, …, vkは重み最小のs-vk道
である。
U
s
V
V-U
1
3
1
3
4
1
3
補題2
じゃあ、こういう辺が存在していいの?
という問題になります。
• 先ほどの補題1に続き、
s, v1, v2, …, vkは重み最小のs-vk道
である。
U
s
V
V-U
1
3
1
3
4
1
3
1
補題2
これも背理法で証明できます。
つまりこの辺が存在したら?と仮定。
といっても、非常に簡単で…
• 先ほどの補題1に続き、
s, v1, v2, …, vkは重み最小のs-vk道
である。
U
s
V
V-U
1
3
1
3
4
1
3
1
補題2
こっちの方が短いならば、
重み最小道はこちらになるはずです。
つまりw(s, V-U)は変化してしまいます。
• 先ほどの補題1に続き、
s, v1, v2, …, vkは重み最小のs-vk道
である。
U
s
V
V-U
1
3
1
3
4
1
3
1
補題2
つまり存在したらw(s, V-U)は変わっちゃう、
存在すると矛盾が起きる…ということで、
背理法証明完了です。
• 先ほどの補題1に続き、
s, v1, v2, …, vkは重み最小のs-vk道
である。
U
s
V
V-U
1
3
1
3
4
1
3
1
補題2
日本語難しい…です。
• 先ほどの補題1に続き、
s, v1, v2, …, vkは重み最小のs-vk道
である。
U
s
V
V-U
1
3
1
3
4
1
3
1
補題2
ダイクストラのアルゴリズムでは、
補題1, 補題2を利用しています。
• 先ほどの補題1に続き、
s, v1, v2, …, vkは重み最小のs-vk道
である。
U
s
V
V-U
1
3
1
3
4
1
3
1
ダイクストラのアルゴリズム
• グラフの重み最小道を見つける
→重み1とすれば最小距離でも可 さて、そういうことでメインである、
ダイクストラのアルゴリズムについて
解説していきます。
ダイクストラのアルゴリズム
• グラフの重み最小道を見つける
→重み1とすれば最小距離でも可 ちなみにダイクストラのアルゴリズムは
貪欲法の一種。
効率の良いところ貪欲的に支配するもの也。
ダイクストラのアルゴリズム
• グラフの重み最小道を見つける
→重み1とすれば最小距離でも可 よく重要!
って言われるのはなぜでしょう?
グラフの最短経路って何に使わる?
ダイクストラのアルゴリズム
• グラフの重み最小道を見つける
→重み1とすれば最小距離でも可
有名なところで
ネットワークのルーティングがあげられます。
ダイクストラのアルゴリズム
• グラフの重み最小道を見つける
→重み1とすれば最小距離でも可
あとはゲームのAIが
最短経路を探したりとか…でしょうか。
ダイクストラのアルゴリズム
• U:すでに最短距離が決まっている集合
• W:Uに隣接するU以外の集合
• d:確定の最短距離
• tmp:暫定の最短距離
では例題でも解いてみましょう。
ダイクストラのアルゴリズム
• U:すでに最短距離が決まっている集合
• W:Uに隣接するU以外の集合
• d:確定の最短距離
• tmp:暫定の最短距離
大事になってくるこの表記はおさらいです。
ダイクストラのアルゴリズム
• U:すでに最短距離が決まっている集合
• W:Uに隣接するU以外の集合
• d:確定の最短距離
• tmp:暫定の最短距離
Uはsから始まり、
徐々に大きくなる確定した集合です。
ダイクストラのアルゴリズム
• U:すでに最短距離が決まっている集合
• W:Uに隣接するU以外の集合
• d:確定の最短距離
• tmp:暫定の最短距離
Uは確定の最短距離dがあります。
ダイクストラのアルゴリズム
• U:すでに最短距離が決まっている集合
• W:Uに隣接するU以外の集合
• d:確定の最短距離
• tmp:暫定の最短距離
次にWはUに隣接するU以外の集合です。
つまりまだUではないけど隣接しているので、
次の一手でつながるかも~な集合です。
ダイクストラのアルゴリズム
• U:すでに最短距離が決まっている集合
• W:Uに隣接するU以外の集合
• d:確定の最短距離
• tmp:暫定の最短距離
Wは暫定ですが最短距離を持ち、
これをtmpとします。
なおtmpは更新されることがあります。
ダイクストラのアルゴリズム
• U:すでに最短距離が決まっている集合
• W:Uに隣接するU以外の集合
• d:確定の最短距離
• tmp:暫定の最短距離
更新されるタイミングは、
別の隣接頂点が見つかった時、です。
ダイクストラのアルゴリズム
ということで例題でも解いてみましょう。
a
b
c
f
e
d
1
1
2
2
3
8
6
ダイクストラのアルゴリズム
a→eの最短経路を求めてみましょう。
a
b
c
f
e
d
1
1
2
2
3
8
6
ダイクストラのアルゴリズム
とりあえずスタート地点はaなので、
Uとして囲みます。
a
b
c
f
e
d
1
1
2
2
3
8
U
6
ダイクストラのアルゴリズム
Aの距離は0ですね。
よってd=0です。
a
b
c
f
e
d
1
1
2
2
3
8
U d=0
6
ダイクストラのアルゴリズム
次に隣接しているWを求めて囲みます。
W={b, d, f}ですね。
a
b
c
f
e
d
1
1
2
2
3
8
U
W
d=0
6
ダイクストラのアルゴリズム
tmpは単純に辺の重みでいいですね。
a
b
c
f
e
d
1
1
2
2
3
8
U
W
d=0
6
tmp=1
tmp=6
tmp=2
ダイクストラのアルゴリズム
tmpが最小だったbをUに追加して…
各々の項目を更新します。
a
b
c
f
e
d
1
1
2
2
3
8
U
W
d=0
6
d=1
tmp=6
tmp=2
tmp=2
ダイクストラのアルゴリズム
今回tmpの値を更新するものはないですね。
a
b
c
f
e
d
1
1
2
2
3
8
U
W
d=0
6
d=1
tmp=6
tmp=2
tmp=2
ダイクストラのアルゴリズム
次の最短経路ですが…
tmp=2が2つあります。
どちらでもいいですが若いcを選びましょう。
a
b
c
f
e
d
1
1
2
2
3
8
U
W
d=0
6
d=1
tmp=6
tmp=2
tmp=2
ダイクストラのアルゴリズム
cが追加されて…
dのtmpが更新されることに
気をつけてください。
a
b
c
f
e
d
1
1
2
2
3
8
U
W
d=0
6
d=1
tmp=4
tmp=2
d=2
ダイクストラのアルゴリズム
あとは同様にfが追加されて…
a
b
c
f
e
d
1
1
2
2
3
8
U
W
d=0
6
d=1
tmp=4
d=2
d=2
tmp=10
ダイクストラのアルゴリズム
dが追加されて…
(tmpが更新されていることの注意)
a
b
c
f
e
d
1
1
2
2
3
8
U
W
d=0
6
d=1
d=4
d=2
d=2
tmp=7
ダイクストラのアルゴリズム
最後にeを追加して終了です。
a
b
c
f
e
d
1
1
2
2
3
8
U d=0
6
d=1
d=4
d=2
d=2
d=7
ダイクストラのアルゴリズム
a→eの最短経路は
a, b, c, d, eとなり
その重みは7となりますね。
a
b
c
f
e
d
1
1
2
2
3
8
U d=0
6
d=1
d=4
d=2
d=2
d=7
ダイクストラのアルゴリズム
とりあえず留意点は、
色分けで落ち着いて丁寧に解く、
更新を忘れない…ぐらいでしょうか。
a
b
c
f
e
d
1
1
2
2
3
8
U d=0
6
d=1
d=4
d=2
d=2
d=7
疑似言語
さて、疑似言語の説明は必要でしょうか?
簡単にですが先ほどの手順と関連付けます。
Input : G = (V, E), V上の頂点S
Output : s 始点とするGの最短経路木T
0 Tを初期化する;
1 ds ← 0; U <- {s};
2 while U != V do
3 | Uと隣接しているV-U中の頂点の集合をwとする;
4 | foreach u ∈ W do
5 | | tmp ← min v∈U { dv + C(v, u) };
6 | end
7 | Wの中で最小の暫定距離を持つ頂点uを選択する;
8 | du ← tmpuとし、uをUに追加する;
9 | tmpu = dw + c(w, u)なる頂点wを1つ選び、
頂点wと辺{w, u}をTに追加する;
10 end
疑似言語
ここで、スタート地点のsをUに入れます。
図で言えばaの追加に対応します。
Input : G = (V, E), V上の頂点S
Output : s 始点とするGの最短経路木T
0 Tを初期化する;
1 ds ← 0; U <- {s};
2 while U != V do
3 | Uと隣接しているV-U中の頂点の集合をwとする;
4 | foreach u ∈ W do
5 | | tmp ← min v∈U { dv + C(v, u) };
6 | end
7 | Wの中で最小の暫定距離を持つ頂点uを選択する;
8 | du ← tmpuとし、uをUに追加する;
9 | tmpu = dw + c(w, u)なる頂点wを1つ選び、
頂点wと辺{w, u}をTに追加する;
10 end
疑似言語
ループの条件ですが、
Vの中身すべてがUに追加されていないとき、
つまりU!=Vの時ですね。
Input : G = (V, E), V上の頂点S
Output : s 始点とするGの最短経路木T
0 Tを初期化する;
1 ds ← 0; U <- {s};
2 while U != V do
3 | Uと隣接しているV-U中の頂点の集合をwとする;
4 | foreach u ∈ W do
5 | | tmp ← min v∈U { dv + C(v, u) };
6 | end
7 | Wの中で最小の暫定距離を持つ頂点uを選択する;
8 | du ← tmpuとし、uをUに追加する;
9 | tmpu = dw + c(w, u)なる頂点wを1つ選び、
頂点wと辺{w, u}をTに追加する;
10 end
疑似言語
これが黄色で囲んでいる集合Wとなります。
Input : G = (V, E), V上の頂点S
Output : s 始点とするGの最短経路木T
0 Tを初期化する;
1 ds ← 0; U <- {s};
2 while U != V do
3 | Uと隣接しているV-U中の頂点の集合をwとする;
4 | foreach u ∈ W do
5 | | tmp ← min v∈U { dv + C(v, u) };
6 | end
7 | Wの中で最小の暫定距離を持つ頂点uを選択する;
8 | du ← tmpuとし、uをUに追加する;
9 | tmpu = dw + c(w, u)なる頂点wを1つ選び、
頂点wと辺{w, u}をTに追加する;
10 end
疑似言語
Wの中身すべてに対して…
Input : G = (V, E), V上の頂点S
Output : s 始点とするGの最短経路木T
0 Tを初期化する;
1 ds ← 0; U <- {s};
2 while U != V do
3 | Uと隣接しているV-U中の頂点の集合をwとする;
4 | foreach u ∈ W do
5 | | tmp ← min v∈U { dv + C(v, u) };
6 | end
7 | Wの中で最小の暫定距離を持つ頂点uを選択する;
8 | du ← tmpuとし、uをUに追加する;
9 | tmpu = dw + c(w, u)なる頂点wを1つ選び、
頂点wと辺{w, u}をTに追加する;
10 end
疑似言語
tmpを求めます。
Input : G = (V, E), V上の頂点S
Output : s 始点とするGの最短経路木T
0 Tを初期化する;
1 ds ← 0; U <- {s};
2 while U != V do
3 | Uと隣接しているV-U中の頂点の集合をwとする;
4 | foreach u ∈ W do
5 | | tmp ← min v∈U { dv + C(v, u) };
6 | end
7 | Wの中で最小の暫定距離を持つ頂点uを選択する;
8 | du ← tmpuとし、uをUに追加する;
9 | tmpu = dw + c(w, u)なる頂点wを1つ選び、
頂点wと辺{w, u}をTに追加する;
10 end
疑似言語
補題よりこの式が
aからの暫定最小経路になりますね。
Input : G = (V, E), V上の頂点S
Output : s 始点とするGの最短経路木T
0 Tを初期化する;
1 ds ← 0; U <- {s};
2 while U != V do
3 | Uと隣接しているV-U中の頂点の集合をwとする;
4 | foreach u ∈ W do
5 | | tmp ← min v∈U { dv + C(v, u) };
6 | end
7 | Wの中で最小の暫定距離を持つ頂点uを選択する;
8 | du ← tmpuとし、uをUに追加する;
9 | tmpu = dw + c(w, u)なる頂点wを1つ選び、
頂点wと辺{w, u}をTに追加する;
10 end
疑似言語
そして、tmpが最小となるものが
追加される頂点です。
Input : G = (V, E), V上の頂点S
Output : s 始点とするGの最短経路木T
0 Tを初期化する;
1 ds ← 0; U <- {s};
2 while U != V do
3 | Uと隣接しているV-U中の頂点の集合をwとする;
4 | foreach u ∈ W do
5 | | tmp ← min v∈U { dv + C(v, u) };
6 | end
7 | Wの中で最小の暫定距離を持つ頂点uを選択する;
8 | du ← tmpuとし、uをUに追加する;
9 | tmpu = dw + c(w, u)なる頂点wを1つ選び、
頂点wと辺{w, u}をTに追加する;
10 end
疑似言語
aからの最短経路dを確定して、
Input : G = (V, E), V上の頂点S
Output : s 始点とするGの最短経路木T
0 Tを初期化する;
1 ds ← 0; U <- {s};
2 while U != V do
3 | Uと隣接しているV-U中の頂点の集合をwとする;
4 | foreach u ∈ W do
5 | | tmp ← min v∈U { dv + C(v, u) };
6 | end
7 | Wの中で最小の暫定距離を持つ頂点uを選択する;
8 | du ← tmpuとし、uをUに追加する;
9 | tmpu = dw + c(w, u)なる頂点wを1つ選び、
頂点wと辺{w, u}をTに追加する;
10 end
疑似言語
Uに追加します。
Input : G = (V, E), V上の頂点S
Output : s 始点とするGの最短経路木T
0 Tを初期化する;
1 ds ← 0; U <- {s};
2 while U != V do
3 | Uと隣接しているV-U中の頂点の集合をwとする;
4 | foreach u ∈ W do
5 | | tmp ← min v∈U { dv + C(v, u) };
6 | end
7 | Wの中で最小の暫定距離を持つ頂点uを選択する;
8 | du ← tmpuとし、uをUに追加する;
9 | tmpu = dw + c(w, u)なる頂点wを1つ選び、
頂点wと辺{w, u}をTに追加する;
10 end
疑似言語
そして辺を追加します。
最短となる辺を追加すればいいわけです。
Input : G = (V, E), V上の頂点S
Output : s 始点とするGの最短経路木T
0 Tを初期化する;
1 ds ← 0; U <- {s};
2 while U != V do
3 | Uと隣接しているV-U中の頂点の集合をwとする;
4 | foreach u ∈ W do
5 | | tmp ← min v∈U { dv + C(v, u) };
6 | end
7 | Wの中で最小の暫定距離を持つ頂点uを選択する;
8 | du ← tmpuとし、uをUに追加する;
9 | tmpu = dw + c(w, u)なる頂点wを1つ選び、
頂点wと辺{w, u}をTに追加する;
10 end
疑似言語
ということで…
ループ条件まで繰り返せば完了です。
Input : G = (V, E), V上の頂点S
Output : s 始点とするGの最短経路木T
0 Tを初期化する;
1 ds ← 0; U <- {s};
2 while U != V do
3 | Uと隣接しているV-U中の頂点の集合をwとする;
4 | foreach u ∈ W do
5 | | tmp ← min v∈U { dv + C(v, u) };
6 | end
7 | Wの中で最小の暫定距離を持つ頂点uを選択する;
8 | du ← tmpuとし、uをUに追加する;
9 | tmpu = dw + c(w, u)なる頂点wを1つ選び、
頂点wと辺{w, u}をTに追加する;
10 end
以上
こんなものでしょうか、
テスト範囲網羅できてる自信ないです。
以上
誤字脱字、間違えてたらごめんなさい。
以上
以上簡単ですが、
アルゴリズムのお勉強となります。
教科書
• アルゴリズムとデータ構造 数理工学社 藤田 聡 2013/3/10
教科書のため、ところどころ引用になってる場所があります
立ち絵素材
• 臼井の会様 http://usui.moo.jp/frame2.html
ご視聴ありがとうございました。
頑張ってくださいね。

More Related Content

What's hot

20170327_レムニスケートにまつわる色々な計算
20170327_レムニスケートにまつわる色々な計算20170327_レムニスケートにまつわる色々な計算
20170327_レムニスケートにまつわる色々な計算matsumoring
 
20150922_楕円関数とおもしろい応用
20150922_楕円関数とおもしろい応用20150922_楕円関数とおもしろい応用
20150922_楕円関数とおもしろい応用matsumoring
 
"Mix Automatic Sequences"(LATA'13) の紹介
"Mix Automatic Sequences"(LATA'13) の紹介"Mix Automatic Sequences"(LATA'13) の紹介
"Mix Automatic Sequences"(LATA'13) の紹介Ryoma Sin'ya
 
ML: Sparse regression CH.13
 ML: Sparse regression CH.13 ML: Sparse regression CH.13
ML: Sparse regression CH.13Daisuke Yoneoka
 

What's hot (10)

prml4.1.3-4.1.4
prml4.1.3-4.1.4prml4.1.3-4.1.4
prml4.1.3-4.1.4
 
PRML 第14章
PRML 第14章PRML 第14章
PRML 第14章
 
20170327_レムニスケートにまつわる色々な計算
20170327_レムニスケートにまつわる色々な計算20170327_レムニスケートにまつわる色々な計算
20170327_レムニスケートにまつわる色々な計算
 
Sparse models
Sparse modelsSparse models
Sparse models
 
Prml 4.1.1
Prml 4.1.1Prml 4.1.1
Prml 4.1.1
 
2013 03 25
2013 03 252013 03 25
2013 03 25
 
20150922_楕円関数とおもしろい応用
20150922_楕円関数とおもしろい応用20150922_楕円関数とおもしろい応用
20150922_楕円関数とおもしろい応用
 
"Mix Automatic Sequences"(LATA'13) の紹介
"Mix Automatic Sequences"(LATA'13) の紹介"Mix Automatic Sequences"(LATA'13) の紹介
"Mix Automatic Sequences"(LATA'13) の紹介
 
45107
4510745107
45107
 
ML: Sparse regression CH.13
 ML: Sparse regression CH.13 ML: Sparse regression CH.13
ML: Sparse regression CH.13
 

Recently uploaded

リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドリアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドKen Fukui
 
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」inspirehighstaff03
 
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドリアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドKen Fukui
 
My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」inspirehighstaff03
 
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」inspirehighstaff03
 
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」inspirehighstaff03
 
International Politics I - Lecture 1
International Politics I - Lecture 1International Politics I - Lecture 1
International Politics I - Lecture 1Toru Oga
 
My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」inspirehighstaff03
 
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slidessusere0a682
 
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」inspirehighstaff03
 
Establishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdfEstablishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdfoganekyokoi
 
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」inspirehighstaff03
 
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfMy Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfinspirehighstaff03
 
My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」inspirehighstaff03
 
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドリアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドKen Fukui
 
My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」inspirehighstaff03
 
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」inspirehighstaff03
 
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドリアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドKen Fukui
 
What I did before opening my business..pdf
What I did before opening my business..pdfWhat I did before opening my business..pdf
What I did before opening my business..pdfoganekyokoi
 
TEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfTEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfyukisuga3
 

Recently uploaded (20)

リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドリアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
 
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
 
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドリアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
 
My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」
 
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
 
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
 
International Politics I - Lecture 1
International Politics I - Lecture 1International Politics I - Lecture 1
International Politics I - Lecture 1
 
My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」
 
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
 
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」
 
Establishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdfEstablishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdf
 
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
 
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfMy Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
 
My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」
 
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドリアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
 
My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」
 
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
 
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドリアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
 
What I did before opening my business..pdf
What I did before opening my business..pdfWhat I did before opening my business..pdf
What I did before opening my business..pdf
 
TEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfTEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdf
 

アルゴリズムのお勉強 ダイクストラ