GraphGraph
Data Structure and AlgorithmData Structure and Algorithm
หัวข้อในบทนี้
นิยามกราฟ
ประโยชน์ของกราฟ
อินดีกรีและเอาท์ดีกรี
กราฟสมบูรณ์
กราฟแบบมีนำ้าหนัก
การแทนที่กราฟใน
คอมพิวเต...
นิยามกราฟ
กราฟ คือเซ็ตของโหนด(Vertex) และ
เส้นเชื่อม (Edge)
G = (V,E)
โหนด แสดงถึง Object เช่น ชื่อเมือง,
สถานที่ท่องเที...
นิยามกราฟ
V(G) = {A,B,C,D}
E(G) = {(A,B,3),(A,D,4),(A,C,2),
(B,D,1)}
A B
C D
Edge
Node
2 4
3
1
G = (V,E)
2
2
2
2
จงแสดง ...
Graph VS. Tree
กราฟเป็น Super Set ของต้นไม้
Tree ต้องมี Father Node เพียงโหนดเดียว, แต่
Graph ไม่จำาเป็น
บางโหนดอาจไม่ม...
ประโยชน์ของกราฟ (Routing
การหาเส้นทาง)
สายการบิน (การเชื่อมต่อของสายการบิน
ตารางบิน)
ประโยชน์ของกราฟ (Routing
การหาเส้นทาง)
Network (การเชื่อมต่อของอุปกรณ์ Router)
เพื่อใช้ในการรับส่งข้อมูลในเครือข่าย
ประโยชน์ของกราฟ
(Algorithm Design)
Map Coloring คือวิธีการระบายสีในแผนที่โดย
ใช้สีน้อยที่สุด
พื้นที่ติดกันห้ามใช้สีเดียว...
Directed & Undirected
Graph
Undirected Graph คือกราฟที่เส้นเชื่อม
ไม่มีลูกศรกำากับทิศทาง
หมายถึงความสัมพันธ์ของ 2 โหนดแบ...
Directed & Undirected
Graph
Directed Graph คือกราฟที่เส้นเชื่อมมีลูกศร
กำากับทิศทาง
เช่น อาจมีสายการบินจาก กรุงเทพ-เสียม...
Unweighted Graph (กราฟไม่มีนำ้า
หนัก)
กราฟแบบนี้เส้นเชื่อมแสดงถึงความสำาพันธ์ของ 2
โหนด (เหมือนกราฟทั่วไป)
เส้นเชื่อมแสด...
Weighted Graph (กราฟมีนำ้าหนัก)
กราฟแบบนี้เส้นเชื่อมแสดงถึงความสำาพันธ์ของ 2
โหนด (เหมือนกราฟทั่วไป)
เส้นเชื่อมแสดงถึงคว...
อินดีกรีและเอาท์ดีกรี
แต่ละโหนดจะมีจำานวนเส้นเชื่อมระหว่าง
โหนดไม่เท่ากัน
In-degree แสดงจำานวนเส้นเชื่อมที่เข้า
มายังโหน...
Complete Graph (กราฟ
สมบูรณ์)
กราฟที่ทุกโหนดมีเส้นเชื่อมถึงโหนด
อื่นๆ ทั้งหมด
A
CB
E
D
F
G H
กราฟมีทิศทาง
จำานวน Edge = N...
การแทนที่กราฟใน
คอมพิวเตอร์
Simple Array Representation
Complex Array Representation
Linked-list Array
Representation
...
Simple Array Representation of Graph
T
T
T
T T
1 2 3 4
1
2
3
4
1 2
3 4
Unweighted graph
Ideal view Computerized view
1
1
1...
Simple Array Representation of Graph
1
1
1
1 1
1 2 3 4
1
2
3
4
1 2
3 4
Directed graph
Ideal view Computerized view
1
2
3
4...
Linked-list Representation of Graph
1
2
3
2 /
vertices
1 2
3 4
4
/
3 /
4 /
1 2 /
edges
edge(1,2)
edge(2,3)
edge(3,4)
edge(...
Mixed Representation of Graph
1
2
3
2 /
vertices
1 2
3 4
4
3 /
4 /
1 2 /
edges
Directed graph
Array Linked-list
Ideal view...
การท่องไปในกราฟ
คือการค้นหาเส้นทางจากโหนดหนึ่ง ไปยังโหนดที่
ต้องการในกราฟ
หากหาเส้นทางได้ไปยังโหนดได้ แสดงว่าโหนด
เริ่มต...
อาจมีบางโหนดที่ไม่สามารถเชื่อมกันก็เป็น
ได้
 ใน Directed Graph
 หากเริ่มจาก B : B->C, B->F, B ->
C -> E แต่ไม่สามารถไปถึ...
Breadth-first Search
คือการค้นหาโหนดใดในกราฟ โดยดูในแนวกว้าง
ก่อน
ใช้ Queue เป็นเครื่องมือในการช่วยค้นหา
ตัวอย่างการหาโ...
Algorithm: Breadth-First
Search
1. Queue = {startVertex}
/*โครงสร้าง queue/
2. Until (ค้นพบ endVertex หรือ Queue ว่าง)
Do
...
Breadth-first Search (ตัวอย่าง)
D
B
C
F
E
B
B
p 1: Queue = {B}
: หยิบโหนด B ออกมาสร้างโหนด
สำาหรับโหนด C ที่เชื่อมอยู่กับโ...
Breadth-first Search (ตัวอย่าง)
tep Node Que
C ไม่ใช่ endVertex จับใส่ Queue Que
C
B
าหรับโหนด F ที่เชื่อมอยู่กับโหนด B Qu...
Breadth-first Search (ตัวอย่าง)
Node E คือ endVertex
ดังนั้นให้คืนค่าและจบการค้นหา
Step Node Que
สำาหรับโหนด E ที่เชื่อมอย...
Breadth-first Search (แบบ
ฝึกหัด)
D
B
C
F
Eจากรูปขวามือให้สร้างภาพขั้นตอน
การค้นหาจากโหนด D ไปยังโหนด
E โดยใช้ Breadth-fir...
Breadth-first Search (แบบ
ฝึกหัด)
จากรูปขวามือให้สร้างภาพขั้นตอน
การค้นหาจากโหนด C ไปยังโหนด
G โดยใช้ Breadth-first Search...
Breadth-first Search (แบบ
ฝึกหัด)
จากรูปขวามือให้สร้างภาพขั้นตอน
การค้นหาจากโหนด I ไปยังโหนด B
โดยใช้ Breadth-first Search...
Depth-First Search
คือการค้นหาโหนดใดในกราฟ โดยดูในแนวลึก
ก่อน
ใช้ Stack เป็นเครื่องมือในการช่วยค้นหา
ตัวอย่างการหาโหนด ...
ภาพ Step การค้นหาของ Depth-
First Search
Algorithm: Depth-first
Search
1. Push(Stack,startVertex) /
*กำาหนดค่าใน Stack*/
2.ให้ทำาจนพบโหนด endVertex หรือ Stack มี
ค...
Depth-first Search(ตัวอย่าง)
D
B
C
F
E
p 1: Stack = {B}
Step 2: ยังไม่พบโหนด และ
Stack ยังไม่ว่าง
X =Pop(Stack) //ค่าของ X...
Depth-first Search(ตัวอย่าง)
5: List = {C, F} //หาทุกโหนดที่ต่อกับ X
Step 6: Push(Stack, List
กลับลำาดับ)
Stack = {ว่างB
S...
Depth-first Search(ตัวอย่าง)
ep 9: List = {E} //หาทุกโหนดที่ต่อกับ X
Step 10: Push(Stack, List
กลับลำาดับ)
Stack = {F}
Sta...
Depth-first Search(ตัวอย่าง)
C
B
E
(1)
(2)
(3)
ภาพหลังจากการค้นหา
Depth-first Search (แบบฝึกหัด)
D
B
C
F
Eจากรูปขวามือให้สร้างภาพขั้นตอน
การค้นหาจากโหนด D ไปยังโหนด
E โดยใช้ Depth-first Se...
Depth-first Search (แบบฝึกหัด)
จากรูปขวามือให้สร้างภาพขั้นตอน
การค้นหาจากโหนด C ไปยังโหนด
G โดยใช้ Depth-first Search A
D
...
Depth-first Search (แบบฝึกหัด)
จากรูปขวามือให้สร้างภาพขั้นตอน
การค้นหาจากโหนด I ไปยังโหนด B
โดยใช้ Depth-first Search A
D
...
Single Source Shortest
Pathหรือ Dijkstra’s Algorithm / Dijkstra เป็น
นักคณิตศาสตร์ชาวดัทซ์
ใช้หาเส้นทางจากโหนดเริ่มต้นไป...
Single Source Shortest
PathAlgorithm นี้คล้ายกับ Breadth-first Search
ปรับปรุงนิดหน่อยคือ
ใช้คิวชนิด Priority Queue
ใช...
Single Source Shortest
Path
1. PriorityQueue = {startVertex}
/*โครงสร้าง queue แบบมีอภิสิทธ์*/
2. Until PriorityQueue ว่าง...
Single Source Shortest Path
(ตัวอย่าง)
ep Queue Gra
B
A
C
E
D
G
F
3
6
1
5
6
10
5
6 7
3
B
A
C
E
3
5
6
B
1. PriorityQueue = ...
A
3
Single Source Shortest Path
(ตัวอย่าง)
ep Queue Gra
B
A
C
E
3
5
6
B5. ดึง (B,A,3) สมาชิกตัวแรกออกมา
PQ={(B,E,5),(B,C,6...
Single Source Shortest Path
(ตัวอย่าง)
ep Queue Gra
B
A
C
E
3
5
6
8. ดึง(A,E,4)สมาชิกตัวแรกออกมา
PQ={(B,E,5),(B,C,6),(A,D,...
Single Source Shortest Path
(ตัวอย่าง)
ep Queue Gra
11. ดึง(B,E,5) สมาชิกตัวแรกออกมา PQ={(B,C,6),
(E,C,7)(A,D,9),(E,G,9)(E...
Single Source Shortest Path
(ตัวอย่าง)
ep Queue Gra
B
A
C
E
3
6
12. ดึง(B,C,6) สมาชิกตัวแรกออกมา PQ={(E,C,7)
(A,D,9),(E,G,...
Single Source Shortest Path
(ตัวอย่าง)
ep Queue Gra
B
A
C
E
3
6
15. ดึง(E,C,7) สมาชิกตัวแรกออกมา
PQ={(A,D,9),(E,G,9),(E,D,...
Single Source Shortest Path
(ตัวอย่าง)
ep Queue Gra
B
A
C
E
3
6
16. ดึง (A,D,9) สมาชิกตัวแรกออกมา
PQ={(E,G,9), (E,D,10),(C...
Single Source Shortest Path
(ตัวอย่าง)
ep Queue Gra
B
A
C
E
3
6
19. ดึง (E,G,9) สมาชิกตัวแรกออกมา
PQ={(E,D,10),(C,F,16),(D...
Single Source Shortest Path
(ตัวอย่าง)
ep Queue Gra
22. ดึง (E,D,10) สมาชิกตัวแรกออกมา
PQ={(C,F,16),(D,G,16)}
รอบที่ 9
แต่...
Single Source Shortest Path
(ตัวอย่าง)
ep Queue Gra
26. ดึง (D,G,16) สมาชิกตัวแรกออกมา
PQ={}
รอบที่ 11
แต่เนื่องจาก (D,G,1...
Single Source Shortest
Path (แบบฝึกหัด)
3
1
5
4
จงแสดงขั้นตอนการหา Single Source
Shortest Path จาก โหนด C
B
A
C
EC C
C
6 ...
Single Source Shortest
Path (แบบฝึกหัด)
B
A
C
E
3 1
5
6 3
1. จงหา Single
Source Shortest
Path จาก โหนด E
3 3
5
6 3
2. จง...
Upcoming SlideShare
Loading in …5
×

Graph shortest

1,079 views

Published on

Graph

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,079
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
23
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Graph shortest

  1. 1. GraphGraph Data Structure and AlgorithmData Structure and Algorithm
  2. 2. หัวข้อในบทนี้ นิยามกราฟ ประโยชน์ของกราฟ อินดีกรีและเอาท์ดีกรี กราฟสมบูรณ์ กราฟแบบมีนำ้าหนัก การแทนที่กราฟใน คอมพิวเตอร์ การท่องไปในกราฟ
  3. 3. นิยามกราฟ กราฟ คือเซ็ตของโหนด(Vertex) และ เส้นเชื่อม (Edge) G = (V,E) โหนด แสดงถึง Object เช่น ชื่อเมือง, สถานที่ท่องเที่ยว เส้นเชื่อม (Edge) แสดงความสัมพันธ์ของ 2 โหนด มีความหมายแล้วแต่การนิยาม เช่น ระยะทาง, เวลา A B C D Edge Node 2 4 3 1
  4. 4. นิยามกราฟ V(G) = {A,B,C,D} E(G) = {(A,B,3),(A,D,4),(A,C,2), (B,D,1)} A B C D Edge Node 2 4 3 1 G = (V,E) 2 2 2 2 จงแสดง V และ E ของกราฟนี้ V(G) = E(G) = 1 3 2 1 1 A D E G F C B
  5. 5. Graph VS. Tree กราฟเป็น Super Set ของต้นไม้ Tree ต้องมี Father Node เพียงโหนดเดียว, แต่ Graph ไม่จำาเป็น บางโหนดอาจไม่มีเส้นเชื่อมได้ เช่น บางเมืองไม่มี สายการบิน (2) Non binary tree B D A F C E G B A C E G (1) Binary tree (3) Graph โหนด A,C,D มี Father โหนดมาก B A F C E G D B A F C E G D (4) Graph โหนด E,G ไม่มีเส้นเชื่อม
  6. 6. ประโยชน์ของกราฟ (Routing การหาเส้นทาง) สายการบิน (การเชื่อมต่อของสายการบิน ตารางบิน)
  7. 7. ประโยชน์ของกราฟ (Routing การหาเส้นทาง) Network (การเชื่อมต่อของอุปกรณ์ Router) เพื่อใช้ในการรับส่งข้อมูลในเครือข่าย
  8. 8. ประโยชน์ของกราฟ (Algorithm Design) Map Coloring คือวิธีการระบายสีในแผนที่โดย ใช้สีน้อยที่สุด พื้นที่ติดกันห้ามใช้สีเดียวกัน
  9. 9. Directed & Undirected Graph Undirected Graph คือกราฟที่เส้นเชื่อม ไม่มีลูกศรกำากับทิศทาง หมายถึงความสัมพันธ์ของ 2 โหนดแบบ ไปและกลับ H B A F C E G D directed Graph แสดงสายการบินของ Air Asia Undirected Graph แสดงโหนด และเส้นเชื่อมของ กราฟรูปหนึ่ง
  10. 10. Directed & Undirected Graph Directed Graph คือกราฟที่เส้นเชื่อมมีลูกศร กำากับทิศทาง เช่น อาจมีสายการบินจาก กรุงเทพ-เสียมเลียบ กัมพูชา แต่ไม่มีสายการบินจาก เสียมเลียบ- กรุงเทพ หรือ Edge แสดงค่าโดยสารที่มีราคา ไป-กลับไม่ เท่ากัน หรือ ค่าโทรศัพท์ไทยไปสิงคโปร์ แพงกว่า สิงคโปร์โทรหาไทย Singapore Cambodia Indonesia Thai Undirected Graph แสดงค่า อัตราค่าโทรศัพท์ระหว่างประเทศ (เป็นราคาสมมติเท่านั้น) 7 4 6 10 65
  11. 11. Unweighted Graph (กราฟไม่มีนำ้า หนัก) กราฟแบบนี้เส้นเชื่อมแสดงถึงความสำาพันธ์ของ 2 โหนด (เหมือนกราฟทั่วไป) เส้นเชื่อมแสดงถึงความหมายบางอย่าง (เหมือนกับ กราฟทั่วไป) แต่ไม่ระบุข้อมูลหรือค่าบางอย่าง (แตกต่างจากสิ่ง อื่นๆ ) เช่น ถนนที่เชื่อมเมือง 2 เมืองแต่ไม่ระบุระยะ ทาง ผังรถไฟฟ้าใต้ดิน แต่ไม่ระบุราคาค่าโดยสาร ระหว่างสถานี หรือมองว่าค่าข้อมูลเหล่านั้นมีค่าเท่ากันหมด อาจเป็น Directed หรือ Undirected Graph ก็ได้ B A F C E G D B A F C E G D eighted & Undirected GraphUnweighted & directed Graph
  12. 12. Weighted Graph (กราฟมีนำ้าหนัก) กราฟแบบนี้เส้นเชื่อมแสดงถึงความสำาพันธ์ของ 2 โหนด (เหมือนกราฟทั่วไป) เส้นเชื่อมแสดงถึงความหมายบางอย่าง (เหมือนกับ กราฟทั่วไป) เส้นเชื่อมระบุข้อมูลหรือค่าบางอย่างที่ต้องการบ่งชี้ เช่น ถนนที่เชื่อมเมือง 2 เมืองพร้อมระบุระยะ ทางระหว่างเมือง อาจเป็น Directed หรือ Undirected Graph ก็ได้ B A B A C D Weighted & Undirected GraphWeighted & directed Graph C D 7 6 6 5 7 6 6 5
  13. 13. อินดีกรีและเอาท์ดีกรี แต่ละโหนดจะมีจำานวนเส้นเชื่อมระหว่าง โหนดไม่เท่ากัน In-degree แสดงจำานวนเส้นเชื่อมที่เข้า มายังโหนดนั้นๆ Out-degree แสดงจำานวนเส้นเชื่อมที่ออก จากโหนดนั้นไป ใน Undirected Graph จำานวน In- degree และ Out-degree จะเท่ากัน B A C D Node In-degree Out-Degreee A 3 3 B 1 1 C 2 2 D 2 2 B A C D Node In-degree Out-Degreee A 3 1 B 0 1 C 0 2 D 2 1 Undirected Graph Directed Graph
  14. 14. Complete Graph (กราฟ สมบูรณ์) กราฟที่ทุกโหนดมีเส้นเชื่อมถึงโหนด อื่นๆ ทั้งหมด A CB E D F G H กราฟมีทิศทาง จำานวน Edge = N*(N-1) เช่น 3*(3-1) =6 กราฟ ไม่มีทิศทาง จำานวน Edge = N*(N-1)
  15. 15. การแทนที่กราฟใน คอมพิวเตอร์ Simple Array Representation Complex Array Representation Linked-list Array Representation Mixed Array Representation
  16. 16. Simple Array Representation of Graph T T T T T 1 2 3 4 1 2 3 4 1 2 3 4 Unweighted graph Ideal view Computerized view 1 1 1 1 1 1 2 3 4 1 2 3 4 OR 1 2 3 4 Weighted graph 3 14 2 1 3 2 1 4 1 1 2 3 4 1 2 3
  17. 17. Simple Array Representation of Graph 1 1 1 1 1 1 2 3 4 1 2 3 4 1 2 3 4 Directed graph Ideal view Computerized view 1 2 3 4 Vertex Edge struct ArrStr{ r vertrics[NumberOfNode][StringLength at edges[NumberOfNode][NumberOfNod truct; ชื่อโหนด เส้นเชื่อม
  18. 18. Linked-list Representation of Graph 1 2 3 2 / vertices 1 2 3 4 4 / 3 / 4 / 1 2 / edges edge(1,2) edge(2,3) edge(3,4) edge(4,1) edge(4,2) Directed graph Ideal view Computerized view vertices ชี้ edge, n edges ชี้ node,
  19. 19. Mixed Representation of Graph 1 2 3 2 / vertices 1 2 3 4 4 3 / 4 / 1 2 / edges Directed graph Array Linked-list Ideal view Computerized view
  20. 20. การท่องไปในกราฟ คือการค้นหาเส้นทางจากโหนดหนึ่ง ไปยังโหนดที่ ต้องการในกราฟ หากหาเส้นทางได้ไปยังโหนดได้ แสดงว่าโหนด เริ่มต้นสามารถเชื่อมต่อกับโหนดนั้นได้ เช่นหาเส้น ทางการบินจากกรุงเทพ ไปยัง Dallas อเมริกา ในกราฟ อาจมีบางโหนดที่ไม่สามารถเชื่อมกันก็ เป็นได้ 2 วิธี Breadth-first Search, Depth-first Search A D B C FE G H D B C F E I โหนด F สามารถเดินทางไปยัง B ได้หรือไม่?
  21. 21. อาจมีบางโหนดที่ไม่สามารถเชื่อมกันก็เป็น ได้  ใน Directed Graph  หากเริ่มจาก B : B->C, B->F, B -> C -> E แต่ไม่สามารถไปถึง D ได้  หากเริ่มจาก F : ไม่สามารถเชื่อมกับ โหนดอื่นๆ ได้เลย D B C F E โหนด F สามารถเดินทางไปยัง B ได้หรือไม่? A D B C FE G H I ใน Undirected Graph โหนด ที่เชื่อมกันสามารถเข้าถึงกันได้ หมด หากเริ่มจาก B : สามารถเข้าถึง ได้ทุกโหนดยกเว้น A หากเริ่มจาก A : ไม่สามารถ เชื่อมกับโหนดอื่นๆ ได้เลย เพราะ A ไม่เชื่อมต่อกับใครเลย
  22. 22. Breadth-first Search คือการค้นหาโหนดใดในกราฟ โดยดูในแนวกว้าง ก่อน ใช้ Queue เป็นเครื่องมือในการช่วยค้นหา ตัวอย่างการหาโหนด E เริ่มจากโหนด B D B C F E B C F B C F B E Step 1 Step 2 Step 3Found!
  23. 23. Algorithm: Breadth-First Search 1. Queue = {startVertex} /*โครงสร้าง queue/ 2. Until (ค้นพบ endVertex หรือ Queue ว่าง) Do 2.1 ดึงสมาชิกตัวแรกใน Queue ออกมา(ให้ ชื่อว่า E) 2.2 สำาหรับโหนดใดๆ ที่ เชื่อมต่อกับ E ให้ทำาดังนี้ 2.2.1 ทดสอบโหนดนั้นว่าเป็น endVertex หรือไม่ 2.2.2 หากเป็น endVertex ให้คืนค่า แล้วจบการค้นหา 2.2.3 หากไม่เป็น endVertex ให้เซ็ต
  24. 24. Breadth-first Search (ตัวอย่าง) D B C F E B B p 1: Queue = {B} : หยิบโหนด B ออกมาสร้างโหนด สำาหรับโหนด C ที่เชื่อมอยู่กับโหนด B Queue = {B} ริ่มจาก B ต้องการค้นหา E Step Node Que Queue = {ว่าง Queue = {ว่าง C
  25. 25. Breadth-first Search (ตัวอย่าง) tep Node Que C ไม่ใช่ endVertex จับใส่ Queue Que C B าหรับโหนด F ที่เชื่อมอยู่กับโหนด B Qu C F B F ไม่ใช่ endVertex จับใส่ Queue QueC F B หยิบโหนด C ออกมาสร้างโหนด Queue C F B
  26. 26. Breadth-first Search (ตัวอย่าง) Node E คือ endVertex ดังนั้นให้คืนค่าและจบการค้นหา Step Node Que สำาหรับโหนด E ที่เชื่อมอยู่กับโหนด C Queue = {F} C F B E ภาพหลังจากการค้นหา C F B E (1) (2) (3) (4)
  27. 27. Breadth-first Search (แบบ ฝึกหัด) D B C F Eจากรูปขวามือให้สร้างภาพขั้นตอน การค้นหาจากโหนด D ไปยังโหนด E โดยใช้ Breadth-first Search
  28. 28. Breadth-first Search (แบบ ฝึกหัด) จากรูปขวามือให้สร้างภาพขั้นตอน การค้นหาจากโหนด C ไปยังโหนด G โดยใช้ Breadth-first Search A D B C FE G H I
  29. 29. Breadth-first Search (แบบ ฝึกหัด) จากรูปขวามือให้สร้างภาพขั้นตอน การค้นหาจากโหนด I ไปยังโหนด B โดยใช้ Breadth-first Search A D B C FE G H I
  30. 30. Depth-First Search คือการค้นหาโหนดใดในกราฟ โดยดูในแนวลึก ก่อน ใช้ Stack เป็นเครื่องมือในการช่วยค้นหา ตัวอย่างการหาโหนด E เริ่มจากโหนด B D B C F E B C B C B E Step 1 Step 2 Step 3Found!
  31. 31. ภาพ Step การค้นหาของ Depth- First Search
  32. 32. Algorithm: Depth-first Search 1. Push(Stack,startVertex) / *กำาหนดค่าใน Stack*/ 2.ให้ทำาจนพบโหนด endVertex หรือ Stack มี ค่าว่าง 2.1 X = Pop(Stack) //หยิบค่าใน Stack ออกมา 2.2 ถ้า X = endVertex ให้คืนค่าและจบการ ค้นหา 2.3 ถ้าไม่ 2.3.1 เซ็ตสถานะว่า โหนด X ถูกค้นหามา แล้ว 2.3.2 หาทุกโหนดที่เชื่อมต่อกับ X ไว้ใน
  33. 33. Depth-first Search(ตัวอย่าง) D B C F E p 1: Stack = {B} Step 2: ยังไม่พบโหนด และ Stack ยังไม่ว่าง X =Pop(Stack) //ค่าของ X คือโหนด B Stack = {ว่าง ริ่มจาก B ต้องการค้นหา E Stack = {ว่าง 4: X ไม่ใช่ โหนดที่ต้องการค้นหา ห้กำาหนดว่า B เป็นโหนดที่ค้นหามาแล้วB Step Node Sta B Stack = {B} Stack = {B}
  34. 34. Depth-first Search(ตัวอย่าง) 5: List = {C, F} //หาทุกโหนดที่ต่อกับ X Step 6: Push(Stack, List กลับลำาดับ) Stack = {ว่างB Stack = {F,C 7: X =Pop(Stack) //ค่าของ X คือโหนด C Stack = {F} Stack = {F} 8: X ไม่ใช่ โหนดที่ต้องการค้นหา ให้กำาหนดว่า C เป็นโหนดที่ค้นหามาแล้วB C Step Node Sta B B C
  35. 35. Depth-first Search(ตัวอย่าง) ep 9: List = {E} //หาทุกโหนดที่ต่อกับ X Step 10: Push(Stack, List กลับลำาดับ) Stack = {F} Stack = {F,E} 11: X =Pop(Stack) //ค่าของ X คือโหนด E Stack = {F} Stack = {F} X คือโหนดที่ค้นหา ให้คืนค่าและหยุดการค้นหา B C E Step Node StaB C B C B C E
  36. 36. Depth-first Search(ตัวอย่าง) C B E (1) (2) (3) ภาพหลังจากการค้นหา
  37. 37. Depth-first Search (แบบฝึกหัด) D B C F Eจากรูปขวามือให้สร้างภาพขั้นตอน การค้นหาจากโหนด D ไปยังโหนด E โดยใช้ Depth-first Search
  38. 38. Depth-first Search (แบบฝึกหัด) จากรูปขวามือให้สร้างภาพขั้นตอน การค้นหาจากโหนด C ไปยังโหนด G โดยใช้ Depth-first Search A D B C FE G H I
  39. 39. Depth-first Search (แบบฝึกหัด) จากรูปขวามือให้สร้างภาพขั้นตอน การค้นหาจากโหนด I ไปยังโหนด B โดยใช้ Depth-first Search A D B C FE G H I
  40. 40. Single Source Shortest Pathหรือ Dijkstra’s Algorithm / Dijkstra เป็น นักคณิตศาสตร์ชาวดัทซ์ ใช้หาเส้นทางจากโหนดเริ่มต้นไปยังโหนดใดๆให้ มีระยะทางที่สั้นที่สุด มีประโยชน์ ในงานพวกขนส่งสินค้า เช่นต้องการ ขนส่งจากจุดหนึ่งไปยังจุดหนึ่งด้วยทางที่สั้นที่สุด B A C E D G F 3 6 1 5 6 10 5 6 7 3 C D F 3 6 1 6 10 5 Single Source Shortest Path (พิจารณาที่ B) B A E G
  41. 41. Single Source Shortest PathAlgorithm นี้คล้ายกับ Breadth-first Search ปรับปรุงนิดหน่อยคือ ใช้คิวชนิด Priority Queue ใช้เส้นทางรวมจากจุดเริ่มต้นมายังโหนดนั้นๆ เพื่อระบุ Priority ของสมาชิกที่อยู่ในคิว ใช้ได้กับค่า Edge ที่มีค่าตั้งแต่ 0 ขึ้นไป Single Source Shortest Path
  42. 42. Single Source Shortest Path 1. PriorityQueue = {startVertex} /*โครงสร้าง queue แบบมีอภิสิทธ์*/ 2. Until PriorityQueue ว่าง Do 1.1 ดึงสมาชิกตัวแรกใน Queue ออกมา(ให้ชื่อ ว่า X) 1.2 หาก X เคยถูกเลือกเป็นเส้นทางแล้ว กลับไป ข้อ 1.1 1.3 เลือกโหนด X ให้เป็นเส้นทางจริง 1.4 สำาหรับโหนดใดๆ ที่เชื่อมต่อกับ X ให้ทำาดังนี้ 1.4.1 คำานวณระยะทางรวมของโหนด X มายังโหนดนั้นๆ
  43. 43. Single Source Shortest Path (ตัวอย่าง) ep Queue Gra B A C E D G F 3 6 1 5 6 10 5 6 7 3 B A C E 3 5 6 B 1. PriorityQueue = {startVertex} PQ={(B,B,0)} 2. ดึงสมาชิกตัวแรกออกมา PQ={} 3. เลือก B ให้เป็นเส้นทางจริง PQ={} 4. สำาหรับทุกโหนดที่ต่อกับ B คำานวณระยะ ทางแล้วนำากลับไปเก็บใน PQ B PQ={(B,A,3),(B,E,5),(B,C,6)} 3 5 6 รอบที่ 1
  44. 44. A 3 Single Source Shortest Path (ตัวอย่าง) ep Queue Gra B A C E 3 5 6 B5. ดึง (B,A,3) สมาชิกตัวแรกออกมา PQ={(B,E,5),(B,C,6)} 6. เลือก A ให้เป็นเส้นทางจริง PQ={(B,E,5),(B,C,6)} 7. สำาหรับทุกโหนดที่ต่อกับ A คำานวณระยะ ทางแล้วนำากลับไปเก็บใน PQPQ={(A,E,4),(B,E,5),(B,C,6),(A,D,9 A 3 B D 1 63 3 3 9 4 6 5 รอบที่ 2
  45. 45. Single Source Shortest Path (ตัวอย่าง) ep Queue Gra B A C E 3 5 6 8. ดึง(A,E,4)สมาชิกตัวแรกออกมา PQ={(B,E,5),(B,C,6),(A,D,9)} 9. เลือก E ให้เป็นเส้นทางจริง PQ={(B,E,5),(B,C,6),(A,D,9)} 10. สำาหรับทุกโหนดที่ต่อกับ E คำานวณระยะ ทางแล้วนำากลับไปเก็บใน PQ PQ={(B,E,5),(B,C,6),(E,C,7)(A,D,9),(E,G,9)(E D 1 63 4 6 5 B A E 3 1 45 B A E 3 1 45 9 3 G95 รอบที่ 3
  46. 46. Single Source Shortest Path (ตัวอย่าง) ep Queue Gra 11. ดึง(B,E,5) สมาชิกตัวแรกออกมา PQ={(B,C,6), (E,C,7)(A,D,9),(E,G,9)(E,D,10)} B A E 3 1 4แต่เนื่องจาก (B,E,5) โหนด E ถูกเลือกเป็นเส้นทาง หลักไปแล้ว ดังนั้นจึงไม่ สนใจ รอบที่ 4
  47. 47. Single Source Shortest Path (ตัวอย่าง) ep Queue Gra B A C E 3 6 12. ดึง(B,C,6) สมาชิกตัวแรกออกมา PQ={(E,C,7) (A,D,9),(E,G,9)(E,D,10)} 13. เลือก C ให้เป็นเส้นทางจริง PQ={(E,C,7) (A,D,9),(E,G,9)(E,D,10)} 1 3 6 B A E 3 1 4 4 รอบที่ 5 14. สำาหรับทุกโหนดที่ต่อ กับ C คำานวณระยะทางแล้ว นำากลับไปเก็บใน PQ 3 10 B A C E 3 6 D 1 6 4 6 5 9 G95 F E,C,7)(A,D,9),(E,G,9),(E,D,10),(C,F,16)} 16หตุ (C,E,9)ไม่ต้อง Add เพราะ E ถูกเลือกไปแล้ว
  48. 48. Single Source Shortest Path (ตัวอย่าง) ep Queue Gra B A C E 3 6 15. ดึง(E,C,7) สมาชิกตัวแรกออกมา PQ={(A,D,9),(E,G,9),(E,D,10),(C,F,16)} 1 3 6 4 รอบที่ 6 แต่เนื่องจาก (E,C,7) โหนด C ถูกเลือกเป็นเส้นทาง หลักไปแล้ว ดังนั้นจึงไม่ สนใจ
  49. 49. Single Source Shortest Path (ตัวอย่าง) ep Queue Gra B A C E 3 6 16. ดึง (A,D,9) สมาชิกตัวแรกออกมา PQ={(E,G,9), (E,D,10),(C,F,16)} 1 3 6 4 รอบที่ 7 7. เลือก D ให้เป็นเส้นทางจริง 18. สำาหรับทุกโหนดที่ต่อ กับ D คำานวณระยะทางแล้ว นำากลับไปเก็บใน PQ 3 10 B A C E 3 6 D 1 6 4 6 5 9 G95 F (E,G,9), (E,D,10),(C,F,16),(D,G,16)} 16 D 96
  50. 50. Single Source Shortest Path (ตัวอย่าง) ep Queue Gra B A C E 3 6 19. ดึง (E,G,9) สมาชิกตัวแรกออกมา PQ={(E,D,10),(C,F,16),(D,G,16)} 1 3 6 4 รอบที่ 8 0. เลือก G ให้เป็นเส้นทางจริง 21. สำาหรับทุกโหนดที่ต่อ กับ G คำานวณระยะทางแล้ว นำากลับไปเก็บใน PQ 3 10 B A C E 3 6 D 1 6 4 6 5 9 3 G95 F ={(E,D,10),(C,F,16),(D,G,16)} 16 D 96 G 5 9
  51. 51. Single Source Shortest Path (ตัวอย่าง) ep Queue Gra 22. ดึง (E,D,10) สมาชิกตัวแรกออกมา PQ={(C,F,16),(D,G,16)} รอบที่ 9 แต่เนื่องจาก (E,D,10) โหนด D ถูกเลือกเป็นเส้น ทางหลักไปแล้ว ดังนั้นจึง ไม่สนใจ 23. ดึง (C,F,16) สมาชิกตัวแรกออกมา PQ={(D,G,16)} รอบที่ 10 24. เลือก F ให้เป็นเส้นทาง จริง 25. สำาหรับทุกโหนดที่ต่อกับ F คำานวณระยะทางแล้วนำา กลับไปเก็บใน PQ (ไม่มี 3 10 B A C E 3 6 D 1 6 4 6 5 9 3 G95 F16
  52. 52. Single Source Shortest Path (ตัวอย่าง) ep Queue Gra 26. ดึง (D,G,16) สมาชิกตัวแรกออกมา PQ={} รอบที่ 11 แต่เนื่องจาก (D,G,16) โหนด G ถูกเลือกเป็นเส้น ทางหลักไปแล้ว ดังนั้นจึง ไม่สนใจ27. เมื่อ PriorityQueue ว่าง จึงจบการทำางาน 10 B A C E 3 6 D 1 6 3 G 5 F
  53. 53. Single Source Shortest Path (แบบฝึกหัด) 3 1 5 4 จงแสดงขั้นตอนการหา Single Source Shortest Path จาก โหนด C B A C EC C C 6 3 4 3 1 5 4 A C C C C 6 เฉลย 3 B E
  54. 54. Single Source Shortest Path (แบบฝึกหัด) B A C E 3 1 5 6 3 1. จงหา Single Source Shortest Path จาก โหนด E 3 3 5 6 3 2. จงหา Single Source Shortest Path จาก โหนด E 6 B A C E F

×