rhuang.cis.k.hosei.ac.jp · Web...
Transcript of rhuang.cis.k.hosei.ac.jp · Web...
![Page 1: rhuang.cis.k.hosei.ac.jp · Web viewO(n2)のスペースでDを計算する場合、上記の式の他に以下の3つの式に従う。 ... d ik (k) と d kj k の値がすでに更新されていればこの値を、更新前であれば](https://reader035.fdocuments.in/reader035/viewer/2022081606/5e2c375fa3e3a34dd63b43d4/html5/thumbnails/1.jpg)
+ Solutions for Exercise #9Ex9-1
![Page 2: rhuang.cis.k.hosei.ac.jp · Web viewO(n2)のスペースでDを計算する場合、上記の式の他に以下の3つの式に従う。 ... d ik (k) と d kj k の値がすでに更新されていればこの値を、更新前であれば](https://reader035.fdocuments.in/reader035/viewer/2022081606/5e2c375fa3e3a34dd63b43d4/html5/thumbnails/2.jpg)
Solution1.
2.
![Page 3: rhuang.cis.k.hosei.ac.jp · Web viewO(n2)のスペースでDを計算する場合、上記の式の他に以下の3つの式に従う。 ... d ik (k) と d kj k の値がすでに更新されていればこの値を、更新前であれば](https://reader035.fdocuments.in/reader035/viewer/2022081606/5e2c375fa3e3a34dd63b43d4/html5/thumbnails/3.jpg)
3.
4.
![Page 4: rhuang.cis.k.hosei.ac.jp · Web viewO(n2)のスペースでDを計算する場合、上記の式の他に以下の3つの式に従う。 ... d ik (k) と d kj k の値がすでに更新されていればこの値を、更新前であれば](https://reader035.fdocuments.in/reader035/viewer/2022081606/5e2c375fa3e3a34dd63b43d4/html5/thumbnails/4.jpg)
5.
6.
![Page 5: rhuang.cis.k.hosei.ac.jp · Web viewO(n2)のスペースでDを計算する場合、上記の式の他に以下の3つの式に従う。 ... d ik (k) と d kj k の値がすでに更新されていればこの値を、更新前であれば](https://reader035.fdocuments.in/reader035/viewer/2022081606/5e2c375fa3e3a34dd63b43d4/html5/thumbnails/5.jpg)
7.
![Page 6: rhuang.cis.k.hosei.ac.jp · Web viewO(n2)のスペースでDを計算する場合、上記の式の他に以下の3つの式に従う。 ... d ik (k) と d kj k の値がすでに更新されていればこの値を、更新前であれば](https://reader035.fdocuments.in/reader035/viewer/2022081606/5e2c375fa3e3a34dd63b43d4/html5/thumbnails/6.jpg)
Ex9-2
import java.util.PriorityQueue;import java.util.List;import java.util.ArrayList;import java.util.Collections;
class Vertex implements Comparable<Vertex>{ public final String name; public Edge[] adjacencies; public double minDistance = Double.POSITIVE_INFINITY; // このノードに辿り着くまでの最小距
// 離のデフォルト値は最大 public Vertex previous; // このノードに辿り着く直前に通った
// ノード public Vertex(String argName) { name = argName; } public String toString() { return name; } public int compareTo(Vertex other) { return Double.compare(minDistance, other.minDistance); }}
class Edge{ public final Vertex target; // リンクで結ばれたノード public final double weight; // ノード target への移動にかかるコスト public Edge(Vertex argTarget, double argWeight) { target = argTarget; weight = argWeight; }}
public class Dijkstra{ public static void computePaths(Vertex source) // ノード source から各ノードまでの
// 最小距離の計算 { source.minDistance = 0.; // 自分への経路の weight は最小 PriorityQueue<Vertex> vertexQueue = new PriorityQueue<Vertex>(); // 探索対象となるノード vertexQueue.add(source); // ノード source から経路探索する
while (!vertexQueue.isEmpty()) { // 探索対象ノードが全てなくなるまで// 繰り返す
Vertex u = vertexQueue.poll(); // 探索対象ノードの先頭を取り出す
// Visit each edge exiting u for (Edge e : u.adjacencies) // 探索中ノード u の各リンクに対して { Vertex v = e.target; // リンク e でノード u と結ばれたノ
// ード v までのノード s からの最小// weight を求める
double weight = e.weight; double distanceThroughU = u.minDistance + weight;
![Page 7: rhuang.cis.k.hosei.ac.jp · Web viewO(n2)のスペースでDを計算する場合、上記の式の他に以下の3つの式に従う。 ... d ik (k) と d kj k の値がすでに更新されていればこの値を、更新前であれば](https://reader035.fdocuments.in/reader035/viewer/2022081606/5e2c375fa3e3a34dd63b43d4/html5/thumbnails/7.jpg)
if (distanceThroughU < v.minDistance) { // ノード u を経由したノード v まで// の距離が既知のノード v までの// 距離より小さい時
vertexQueue.remove(v); // ノード v を一度消す v.minDistance = distanceThroughU ; // ノード v までの最小距離を更新する v.previous = u; // ノード u をノード v に辿り着く直
// 前のノードとする vertexQueue.add(v); // 更新したノード v を探索対象ノード} // に加え直す
} } }
public static List<Vertex> getShortestPathTo(Vertex target) { List<Vertex> path = new ArrayList<Vertex>(); for (Vertex vertex = target; vertex != null; vertex = vertex.previous) path.add(vertex); Collections.reverse(path); return path; }
public static void main(String[] args) { Vertex v0 = new Vertex("Redvile");
Vertex v1 = new Vertex("Blueville");Vertex v2 = new Vertex("Greenville");Vertex v3 = new Vertex("Orangeville");Vertex v4 = new Vertex("Purpleville");
v0.adjacencies = new Edge[]{ new Edge(v1, 5), new Edge(v2, 10),
new Edge(v3, 8) };v1.adjacencies = new Edge[]{ new Edge(v0, 5), new Edge(v2, 3), new Edge(v4, 7) };v2.adjacencies = new Edge[]{ new Edge(v0, 10),
new Edge(v1, 3) };v3.adjacencies = new Edge[]{ new Edge(v0, 8), new Edge(v4, 2) };v4.adjacencies = new Edge[]{ new Edge(v1, 7),
new Edge(v3, 2) };Vertex[] vertices = { v0, v1, v2, v3, v4 };
computePaths(v0); for (Vertex v : vertices)
{ System.out.println("Distance to " + v + ": " + v.minDistance); List<Vertex> path = getShortestPathTo(v); System.out.println("Path: " + path);}
}}
+ Solutions for Exercise #10Ex10-1
![Page 8: rhuang.cis.k.hosei.ac.jp · Web viewO(n2)のスペースでDを計算する場合、上記の式の他に以下の3つの式に従う。 ... d ik (k) と d kj k の値がすでに更新されていればこの値を、更新前であれば](https://reader035.fdocuments.in/reader035/viewer/2022081606/5e2c375fa3e3a34dd63b43d4/html5/thumbnails/8.jpg)
Example solution
A matrix C is calculated in regular matrix multiplication as below:
![Page 9: rhuang.cis.k.hosei.ac.jp · Web viewO(n2)のスペースでDを計算する場合、上記の式の他に以下の3つの式に従う。 ... d ik (k) と d kj k の値がすでに更新されていればこの値を、更新前であれば](https://reader035.fdocuments.in/reader035/viewer/2022081606/5e2c375fa3e3a34dd63b43d4/html5/thumbnails/9.jpg)
A matrix C is calculated in the shortest-paths algorithms
Ex10-2
![Page 10: rhuang.cis.k.hosei.ac.jp · Web viewO(n2)のスペースでDを計算する場合、上記の式の他に以下の3つの式に従う。 ... d ik (k) と d kj k の値がすでに更新されていればこの値を、更新前であれば](https://reader035.fdocuments.in/reader035/viewer/2022081606/5e2c375fa3e3a34dd63b43d4/html5/thumbnails/10.jpg)
Example solution
O(n3)のスペースで D を計算するとき、以下の式に従う。
d ij(k)=min (d ij
( k−1 ) , d ik( k−1)+dk j
(k−1 ))
O(n2)のスペースで D を計算する場合、上記の式の他に以下の 3 つの式に従う。
d ij(k)=min (d ij
( k−1 ) , d ik( k )+dkj
( k−1 ))
d ij(k)=min (d ij
( k−1 ) , d ik( k−1)+dkj
(k ))
d ij(k)=min (d ij
( k−1 ) , d ik( k )+dkj
( k ))
d ik(k)とdkj
( k )の値がすでに更新されていればこの値を、更新前であればd ik(k−1)とdkj
( k−1)を用いて計算する。
![Page 11: rhuang.cis.k.hosei.ac.jp · Web viewO(n2)のスペースでDを計算する場合、上記の式の他に以下の3つの式に従う。 ... d ik (k) と d kj k の値がすでに更新されていればこの値を、更新前であれば](https://reader035.fdocuments.in/reader035/viewer/2022081606/5e2c375fa3e3a34dd63b43d4/html5/thumbnails/11.jpg)
+ Solutions for Exercise #11Ex11-1
import java.util.PriorityQueue;import java.util.List;import java.util.ArrayList;import java.util.Collections;
class Vertex{public final String name;public Edge[] adjacencies;public double minDistance = 0;public boolean visited;public Vertex previous;
public Vertex(String argName) {name = argName;visited = false;
}
public String toString() {return name;
}}
class Edge implements Comparable<Edge>{public final Vertex present;public final Vertex target;public final double weight;
public Edge(Vertex argPresent, Vertex argTarget, double argWeight) {present = argPresent;target = argTarget;weight = argWeight;
}public int compareTo(Edge other) {
return Double.compare(weight, other.weight);}
}
public class Prim {public static void computePaths(Vertex source) {
source.minDistance = 0.;source.visited = true;PriorityQueue<Edge> edgeQueue = new PriorityQueue<Edge>();for(int i=0; i<source.adjacencies.length; i++){
edgeQueue.add(source.adjacencies[i]);}
while (!edgeQueue.isEmpty()) {Edge e = edgeQueue.poll();Vertex u = e.target;if(!u.visited){
u.visited = true;u.minDistance = e.present.minDistance + e.weight;
![Page 12: rhuang.cis.k.hosei.ac.jp · Web viewO(n2)のスペースでDを計算する場合、上記の式の他に以下の3つの式に従う。 ... d ik (k) と d kj k の値がすでに更新されていればこの値を、更新前であれば](https://reader035.fdocuments.in/reader035/viewer/2022081606/5e2c375fa3e3a34dd63b43d4/html5/thumbnails/12.jpg)
u.previous = e.present;for(int i=0; i<u.adjacencies.length; i++){
edgeQueue.add(u.adjacencies[i]);}
}}
}
public static List<Vertex> getShortestPathTo(Vertex target) {List<Vertex> path = new ArrayList<Vertex>();for (Vertex vertex = target; vertex != null; vertex = vertex.previous)
path.add(vertex);Collections.reverse(path);return path;
}
public static void main(String[] args) {Vertex v0 = new Vertex("Redvile");Vertex v1 = new Vertex("Blueville");Vertex v2 = new Vertex("Greenville");Vertex v3 = new Vertex("Orangeville");Vertex v4 = new Vertex("Purpleville");
v0.adjacencies = new Edge[] { new Edge(v0, v1, 5), new Edge(v0, v2, 10), new Edge(v0, v3, 8) };
v1.adjacencies = new Edge[] { new Edge(v1, v0, 5), new Edge(v1, v2, 3), new Edge(v1, v4, 7) };
v2.adjacencies = new Edge[] { new Edge(v2, v0, 10), new Edge(v2, v1, 3) };v3.adjacencies = new Edge[] { new Edge(v3, v0, 8), new Edge(v3, v4, 2) };v4.adjacencies = new Edge[] { new Edge(v4, v1, 7), new Edge(v4, v3, 2) };Vertex[] vertices = { v0, v1, v2, v3, v4 };computePaths(v0);for (Vertex v : vertices) {
System.out.println("Distance to " + v + ": " + v.minDistance);List<Vertex> path = getShortestPathTo(v);System.out.println("Path: " + path);
}}
}
8.
![Page 13: rhuang.cis.k.hosei.ac.jp · Web viewO(n2)のスペースでDを計算する場合、上記の式の他に以下の3つの式に従う。 ... d ik (k) と d kj k の値がすでに更新されていればこの値を、更新前であれば](https://reader035.fdocuments.in/reader035/viewer/2022081606/5e2c375fa3e3a34dd63b43d4/html5/thumbnails/13.jpg)
Ex11-2
Example solution
![Page 14: rhuang.cis.k.hosei.ac.jp · Web viewO(n2)のスペースでDを計算する場合、上記の式の他に以下の3つの式に従う。 ... d ik (k) と d kj k の値がすでに更新されていればこの値を、更新前であれば](https://reader035.fdocuments.in/reader035/viewer/2022081606/5e2c375fa3e3a34dd63b43d4/html5/thumbnails/14.jpg)
1.
![Page 15: rhuang.cis.k.hosei.ac.jp · Web viewO(n2)のスペースでDを計算する場合、上記の式の他に以下の3つの式に従う。 ... d ik (k) と d kj k の値がすでに更新されていればこの値を、更新前であれば](https://reader035.fdocuments.in/reader035/viewer/2022081606/5e2c375fa3e3a34dd63b43d4/html5/thumbnails/15.jpg)
2.
3.
![Page 16: rhuang.cis.k.hosei.ac.jp · Web viewO(n2)のスペースでDを計算する場合、上記の式の他に以下の3つの式に従う。 ... d ik (k) と d kj k の値がすでに更新されていればこの値を、更新前であれば](https://reader035.fdocuments.in/reader035/viewer/2022081606/5e2c375fa3e3a34dd63b43d4/html5/thumbnails/16.jpg)
4.
5.
![Page 17: rhuang.cis.k.hosei.ac.jp · Web viewO(n2)のスペースでDを計算する場合、上記の式の他に以下の3つの式に従う。 ... d ik (k) と d kj k の値がすでに更新されていればこの値を、更新前であれば](https://reader035.fdocuments.in/reader035/viewer/2022081606/5e2c375fa3e3a34dd63b43d4/html5/thumbnails/17.jpg)
6.
7.
![Page 18: rhuang.cis.k.hosei.ac.jp · Web viewO(n2)のスペースでDを計算する場合、上記の式の他に以下の3つの式に従う。 ... d ik (k) と d kj k の値がすでに更新されていればこの値を、更新前であれば](https://reader035.fdocuments.in/reader035/viewer/2022081606/5e2c375fa3e3a34dd63b43d4/html5/thumbnails/18.jpg)
8.
9.
![Page 19: rhuang.cis.k.hosei.ac.jp · Web viewO(n2)のスペースでDを計算する場合、上記の式の他に以下の3つの式に従う。 ... d ik (k) と d kj k の値がすでに更新されていればこの値を、更新前であれば](https://reader035.fdocuments.in/reader035/viewer/2022081606/5e2c375fa3e3a34dd63b43d4/html5/thumbnails/19.jpg)
10.
11.
![Page 20: rhuang.cis.k.hosei.ac.jp · Web viewO(n2)のスペースでDを計算する場合、上記の式の他に以下の3つの式に従う。 ... d ik (k) と d kj k の値がすでに更新されていればこの値を、更新前であれば](https://reader035.fdocuments.in/reader035/viewer/2022081606/5e2c375fa3e3a34dd63b43d4/html5/thumbnails/20.jpg)
12.
13.
![Page 21: rhuang.cis.k.hosei.ac.jp · Web viewO(n2)のスペースでDを計算する場合、上記の式の他に以下の3つの式に従う。 ... d ik (k) と d kj k の値がすでに更新されていればこの値を、更新前であれば](https://reader035.fdocuments.in/reader035/viewer/2022081606/5e2c375fa3e3a34dd63b43d4/html5/thumbnails/21.jpg)
14.
15.
![Page 22: rhuang.cis.k.hosei.ac.jp · Web viewO(n2)のスペースでDを計算する場合、上記の式の他に以下の3つの式に従う。 ... d ik (k) と d kj k の値がすでに更新されていればこの値を、更新前であれば](https://reader035.fdocuments.in/reader035/viewer/2022081606/5e2c375fa3e3a34dd63b43d4/html5/thumbnails/22.jpg)
16.
17.
![Page 23: rhuang.cis.k.hosei.ac.jp · Web viewO(n2)のスペースでDを計算する場合、上記の式の他に以下の3つの式に従う。 ... d ik (k) と d kj k の値がすでに更新されていればこの値を、更新前であれば](https://reader035.fdocuments.in/reader035/viewer/2022081606/5e2c375fa3e3a34dd63b43d4/html5/thumbnails/23.jpg)
+ Solutions for Exercise #12Ex12
Example solution