3. นิยามกราฟ
กราฟ คือเซ็ตของโหนด(Vertex) และ
เส้นเชื่อม (Edge)
G = (V,E)
โหนด แสดงถึง Object เช่น ชื่อเมือง,
สถานที่ท่องเที่ยว
เส้นเชื่อม (Edge) แสดงความสัมพันธ์ของ 2
โหนด มีความหมายแล้วแต่การนิยาม เช่น
ระยะทาง, เวลา
A B
C D
Edge
Node
2 4
3
1
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. 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 ไม่มีเส้นเชื่อม
9. Directed & Undirected
Graph
Undirected Graph คือกราฟที่เส้นเชื่อม
ไม่มีลูกศรกำากับทิศทาง
หมายถึงความสัมพันธ์ของ 2 โหนดแบบ
ไปและกลับ
H
B
A
F
C
E G
D
directed Graph แสดงสายการบินของ Air Asia
Undirected
Graph แสดงโหนด
และเส้นเชื่อมของ
กราฟรูปหนึ่ง
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. 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
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 ไม่เชื่อมต่อกับใครเลย
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. 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. 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)
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. 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. 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
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
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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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