More Related Content More from Noppakhun Suebloei (16) Graph3. องค์ประกอบโครงสร้าง
ข้อมูลแบบกราฟ
V = {1, 2, 3, 4}
E = {(1,2), (1,4), (2,3),
(3,4)}
4. ตัวอย่าง
A
C D E
B
เวอร์เท็กซ์ V(G) ได้แก่ A
B C D E
เอดจ์ E(G) ได้แก่
เส้นที่เชื่อมโยงจาก A ไป
B
เส้นที่เชื่อมโยงจาก A ไป
C
เส้นที่เชื่อมโยงจาก A ไป
D
เส้นที่เชื่อมโยงจาก A ไป
E
5. 7.1.2 ชนิดของกราฟ
1) กราฟแบบไม่มีทิศทาง (Undirected
Graph) จะเป็นกราฟที่มีเส้นเชื่อมโยงระหว่าง
เวอร์เทกซ์ทั้ง 2 ซึ่งไม่มีทิศทางว่าเริ่มต้นจาก
เวอร์เทกซ์ใดไปยังเวอร์เทกซ์ใด การเขียนเซต
ของเส้นเชื่อมโยงจะเขียนอยู่ในเครื่องหมาย
วงเล็บ
6. กราฟแบบไม่มี
ทิศทาง
V(G) = {a, b, c, d}
E(G) = {(a,b) , (b,c), (c,d), (d,b), (a,c)}
หรือ
E(G) = {(b,a) , (c,b), (d,c), (b,d), (c,a)}
7. ภาพตัวอย่างกราฟไม่มี
ทิศทาง
V(G) = {1, 2, 3, 4, 5}
E(G) = {(1,2) , (2,4), (4,5), (5,3), (3,4), (2,3)}
9. กราฟที่มีทิศทาง (Digraph)
• กราฟแบบมีทิศทาง = กราฟที่มีเอดจ์
เป็นหัวลูกศร ซึ่งแสดงทิศทางจากเวอร์เท็กซ์
หนึ่ง ไปยังอีกเวอร์เท็กซ์หนึ่ง (Directed
Graph) A B
กรุงเท
พ
เวียงจั
นทน์
จากภาพ มีเส้นทางจากกรุงเทพไปเวียงจันทน์ แต่
ไม่มีเส้นทางจากเวียงจันทน์ไปกรุงเทพ
10. กราฟแบบมีทิศทาง
V(G) = {a, b, c, d}
E(G) = {<a,b> , <a,c>, <b,d>, <d,c>, <c,b>}
19. สูตรหาจำานวนเอดจ์ของกราฟไม่มีทิศทาง =
(N * (N – 1)) / 2
กราฟแบบไม่มีทิศทาง และจำานวนเวอร์เทกซ์ที่มีทั้งหมด
เท่ากับ 4 เวอร์เทกซ์ จึงคำานวณหาจำานวนเอดจ์ได้
ดังนี้
สูตรหาจำานวนเอดจ์ของกราฟไม่มีทิศทาง = (N *
(N – 1)) / 2
= (4 * (4 – 1)) / 2
= (4 * 3 ) / 2
= 12 / 2
= 6 เส้น
20. สูตรหาจำานวนเอดจ์ของกราฟมีทิศทาง
= N * (N –1)
จากภาพที่ (ข) ซึ่งเป็นกราฟแบบมีทิศทาง และ
จำานวนเวอร์เทกซ์ที่มีทั้งหมดเท่ากับ 4 เวอร์
เทกซ์ จึงคำานวณหาจำานวนเอดจ์ได้ดังนี้
สูตรหาจำานวนเอดจ์ของกราฟมีทิศทาง
= N * (N –1)
= 4 * ( 4 – 1)
= 4 * 3
= 12 เส้น
23. แบบฝึกหัด
• 1. จากภาพต่อไปนี้ จงแทนกราฟด้วย
อะเรย์สองมิติ
1 2
4 3
2. กราฟสมบูรณ์แบบไม่มีทิศทาง ประกอบด้วยเวอร์เทกซ์
ทั้งหมด 7 เวอร์เทกซ์ จงคำานวณว่ากราฟนี้จะมีกี่
เอดจ์
3. กราฟสมบูรณ์แบบมีทิศทาง ประกอบด้วยเวอร์เทกซ์
ทั้งหมด 8 เวอร์เทกซ์ จงคำานวณว่ากราฟนี้จะมี
24. เส้นทาง (Path) ของกราฟ คือ ลำาดับ
ของเวอร์เทกซ์ที่ถูกเชื่อมต่อด้วยเอดจ์ โดยเริ่ม
ตั้งแต่เวอร์เทกซ์แรกไปจนถึงเวอร์เทกซ์สุดท้าย
หรือเวอร์เทกซ์ที่ต้องการ
เส้นทางจาก A ไป E
P1 = (A, B, C, D, E) ความยาวของเส้นทาง
เท่ากับ 4
เส้นทางจาก A ไป H
29. การท่องไปในกราฟ (Graph
traversal)
• การท่องไปในกราฟ (graph
traversal) คือ กระบวนการเข้าไปเยือน
โหนดในกราฟ โดยมีหลักในการทำางานคือ
แต่ละโหนดจะถูกเยือนเพียงครั้งเดียว
สำาหรับการท่องไปในทรีเพื่อเยือนแต่ละโหนด
นั้นจะมีเส้นทางเดียว แต่ในกราฟระหว่างโหนด
อาจจะมีหลายเส้นทาง ดังนั้นเพื่อป้องกัน
การท่องไปในเส้นทางที่ซำ้าเดิมจึงจำาเป็น
ต้องทำาเครื่องหมายมาร์คบิตบริเวณที่ได้
เยือนเสร็จเรียบร้อยแล้วเพื่อไม่ให้เข้าไป
30. สำาหรับเทคนิคการท่องไปใน
กราฟมี 2 แบบดังนี้
• การท่องแบบกว้าง (Breadth first
traversal) วิธีนี้ทำาโดยเลือกโหนดที่เป็นจุด
เริ่มต้น ต่อมาให้เยือนโหนดอื่นที่ใกล้กันกับ
โหนดเริ่มต้นทีละระดับ จนกระทั่งเยือนหมดทุก
โหนดในกราฟ ตัวอย่างแสดงเส้นทางการท่อง
แบบกว้างทีละโหนดตามลำาดับ
B
A
C
E
D
F
การท่องไปแนวกว้างB C D E FA
32. การท่องแบบลึก (Depth first
traversal)
• การทำางานคล้ายกับการท่องทีละระดับของทรี
โดยกำาหนดเริ่มต้นที่โหนดแรกและเยือน
โหนดถัดไปตามแนววิถีนั้นจนกระทั่งนำา
ไปสู่ปลายวิถีนั้น จากนั้น ย้อนกลับ
(backtrack) ตามแนววิถีเดิมนั้น จนกระทั่ง
สามารถดำาเนินการต่อเนื่องเข้าสู่แนววิถีอื่น ๆ
เพื่อเยือนโหนดอื่น ๆ ต่อไปจนครบทุกโหนด
B
A
C
E
D
F
A B E C F D
35. • Spanning Tree คือต้นไม้ที่ประกอบด้วย
โหนดทุกโหนดของกราฟ โดยแต่ละคู่ของ
โหนดจะต้องมีเส้นเชื่อมเพียงเส้นเดียว นั่น
คือไม่มี loop หรือ cycle
• สมมติสถานการณ์ให้กราฟแสดงเส้นทางการบิน
ระหว่าง 7 เมือง แต่ด้วยเหตุผลทางธุรกิจทำาให้
ต้องปิดเส้นทางการบินไปให้มากที่สุดแต่ยังคง
สามารถเชื่อมต่อถึงกันได้หมดa b
c d
e f
g
a b
c d
e f
g
a b
c d
e f
g
1. ห้ามมี 2
เส้น
2. ห้ามตัดเส้น
ออก
3. ห้ามมี
cycle
38. วิธีการในการหา Minimum
Spanning Tree ที่นิยมใช้
มี 3 วิธี ดังต่อไปนี้
1.Kruskal’s Algorithm
Kruskal’s Algorithm ค้นพบโดย Joseph
Kruskal ในปี 1956 โดยมีหลักการดังต่อไปนี้
1. เลือก Edge ใน Graph ที่มี Weight ตำ่าสุด เป็น
edge เริ่มต้น
2. จากนั้นให้เพิ่ม Edge ที่มี Weight ตำ่าสุดที่เหลือ
อยู่ ที่จะไม่ทำาให้เกิด Simple Circuit กับ Edge
ที่เลือกไว้แล้ว ทำาการหยุดหลังจากได้ n-1
Edge เลือกได้ n-1 edges
เลือก edge ที่สั้นที่สุด
รวม edge นี้ ถ้าไม่เกิดวงจร
เลือกได้
n-1 edges
39. • เรียงลำาดับ weight
จากน้อยไปมาก
3-5 = .18
1-7 = .21
6-7 = .25
0-2 = .29
0-7 = .31
0-1 = .32
4.3 = .34
4-5 = .40
4-7 = .46
0-6 = .51
4-6 = .51
0-5 = .60
Kruskal’s Algorithm
0
2
1
7
3
45
6
.29
.51
.60
.31
.32
.21
.25
.46
.51
.40
.34
.18
เกิดวงจร
เกิดวงจร
40. 2.Prim’s algorithm
• หลักการของ Prim’s Algorithm เริ่มต้น
จากเวอร์เท็กซ์ที่กำาหนดแล้วหาเวอร์เท็กซ์ข้าง
เคียง เรียงตามค่านำ้าหนักของเอดจ์ มีขั้นตอน
ดังนี้
• 1. เลือก 1 จุด
• 2. เลือก edge สั้นสุดที่ต่อกับที่ได้
เลือกไว้
• 3. รวม edge นี้ถ้าไม่เกิดวงจร
41. Prim’s algorithm
- เลือก 1 จุด
- เลือก edge สั้นสุดที่ต่อกับ
ที่ได้เลือกไว้
- รวม edge นี้ถ้าไม่เกิด
วงจร A
B C D
E F
1
7
14
713
3 6
1
A
B C D
E F
1
7
14
713
3 6
1
8 8
42. 3 Dijkstra’s algorithm
• วิธีการของ Dijkstra จะทำาให้ได้สิ่งที่เรียก
ว่า single-source shortest path หรือเส้น
ทางที่สั้นที่สุดจากจุดเดียว โดยใช้ priority
queue ช่วยในการทำางาน มีขั้นตอนดังนี้
1. เลือกจุดเริ่มต้น
2. ตรวจสอบค่านำ้าหนักกับจุดที่เชื่อมต่อทุกจุด นำา
ค่านำ้าหนักเก็บใน priority queue แล้วเลือก
เส้นที่มีค่าตำ่าสุด
3. เยี่ยมจุดที่เลือกใหม่ แล้วทำาซำ้า 2-3 จนกว่าจะ
เยี่ยมครบทุกจุด
ข้อกำาหนด : การนำาข้อมูลเก็บในคิว เป็นไป
43. Dijkstra’s algorithm
• single-source
shortest
path
A
B C D
E F
1
7
14
713
3 6
1
8 AB14 AC8 AD1
AD1 AC8 AB14
AD1 DE7 AC8
DE7 AC8 DC8 DF8 AB14
DC8 DE7 DF8
AC8 DC8 DF8 EF8 EC10 AB14
EF8 EC10
DC8 DF8 EF8 EC10 AB14 CB21
CB21
A
B C D
E F
1
7
14
713
3 6
1
8
DC8 DF8 EF8 EC10 AB14 CB21
1
2
3
4
44. แบบฝึกหัด
• 1. จากภาพต่อไปนี้ จงแทนกราฟด้วย
อะเรย์สองมิติ
1 2
4 3
2. กราฟสมบูรณ์แบบไม่มีทิศทาง ประกอบด้วยเวอร์เทกซ์
ทั้งหมด 7 เวอร์เทกซ์ จงคำานวณว่ากราฟนี้จะมีกี่
เอดจ์
3. กราฟสมบูรณ์แบบมีทิศทาง ประกอบด้วยเวอร์เทกซ์
ทั้งหมด 8 เวอร์เทกซ์ จงคำานวณว่ากราฟนี้จะมี