Graph2. นิยามกราฟ
• กราฟ เป็ นโครงสร้างที่นามาใช้เพื่อแสดงความสัมพันธ์ระหว่างวัตถุ โดย
ํ
แทนวัตถด้วยเวอร์เท็กซ์ และเชื่อมโยงความสัมพันธ์ดวยเอดจ์
ุ ้
• เขียนในรู ปของสัญลักษณ์ได้เป็ น G = (V,E)
• ซึ่ง V(G) คือ เซตของเวอร์เทกซ์ท่ีไม่ใช่เซ็ตว่าง และมีจานวนจํากัด
ํ
• E(G) คือ เซตของเอดจ ซึ่ งเขียนด้วยค่ของเวอรเทกซ
คอ เซตของเอดจ์ ซงเขยนดวยคู องเวอร์เท็กซ์
เอดจ์
A B
เวอร์เท็กซ์ เวอร์เท็กซ์
3. องค์ ประกอบโครงสร้ างข้ อมููลแบบกราฟ
V = {1, 2, 3, 4}
{
E = {(1,2), (1,4), (2,3), (3,4)}
4. ตวอยาง
ตัวอย่ าง
เวอร์ เท็กซ์ V(G) ได้ แก่ A B C D E
A B เอดจ์์ E(G) ไ ้ แก่่ ได้
เส้ นทีเ่ ชื่อมโยงจาก A ไป B
เส้้ นทีเ่ี ชืื่อมโยงจาก A ไป C
โ
เส้ นทีเ่ ชื่อมโยงจาก A ไป D
เส้้ นทีเ่ี ชืื่อมโยงจาก A ไป E
โ
C D E เส้ นทีเ่ ชื่อมโยงจาก B ไป E
V(G) = {A, B, C, D, E}
E(G) = {(A,B), (A,C), (A,D), (A,E), (B,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)}
{(b ) ( b) (d ) (b d) ( )}
7. ภาพตวอยางกราฟไมมทศทาง
ภาพตัวอย่ างกราฟไม่ มทศทาง
ี ิ
V(G) = {1 2 3 4 5}
{1, 2, 3, 4,
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>}
13. ระดับขั้นเข้ าและระดับขั้นออก
ั ้ ั ้ (In-degree) ื ํ
ระดบขนเข้า (In degree) คอ จานวนของเอดจทเข้าไป
์ ี่ ้
ยังเวอร์เทกซ์น้ น ๆ
ั
ระดับขั้นออก(Out-degree) คือ จํานวนของเอดจ์ที่ออกจาก
เวอรเทกซนน
เวอร์เทกซ์น้ น ๆ
ั
16. กราฟสมบูรณ
กราฟสมบรณ์
• กราฟที่ทุกเวอร์์เท็กซ์์มีเอดจ์เ์ ชื่ือมโยงไปยังเวอร์์เท็กซ์์ที่เหลืือ
็ ไ ็
ทั้งหมด
A
B C
ในกราฟสมบูรณ์ สามารถคํานวณจํานวนเอดจ์ ได้ จาก N*(N-1)/2
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) 1)
= 4 * ( 4 – 1)
=4*3
= 12 เส้้น
21. กราฟทมนาหนก
กราฟทีมนําหนัก (Weighted Graphs)
่ ี ้
• กราฟที่แต่่ ละเอดจ์์ จะมีค่าบ่งบอกถึึงความหมายอย่างใดอย่างหนึ่ ึง
เช่น ระยะทาง ความเร็ว เวลาเดินทาง ค่ าโดยสาร เป็ นต้น
101
ปทมธานี
ุ สระบรี
ุ
46 101
58
107 นครนายก
กรุงเทพ
100 29
82
ฉะเชงเทรา
ฉะเชิงเทรา 76 ปราจนบุร
ปราจีนบรี
23. เส้ นทาง (Path) ของกราฟ คือ ลําดับของเวอร์เทกซ์ที่ถูกเชื่อมต่อ
ดวยเอดจ โดยเริ่ มตั้งแต่เวอร์เทกซ์แรกไปจนถึงเวอร์เทกซ์สดทายหรอ
ด้วยเอดจ์ โดยเรมตงแตเวอรเทกซแรกไปจนถงเวอรเทกซสุ ดท้ายหรื อ
เวอร์เทกซ์ที่ตองการ
้
เส้ นทางจาก A ไป E
P1 = (A, B, C, D, E) ความยาวของเส้นทางเท่ากับ 4
เสนทางจาก
เส้ นทางจาก A ไป H
P2 = (A, B, C, F, G, H)ความยาวของเส้นทางเท่ากับ 5
28. การทองไปในกราฟ
การท่ องไปในกราฟ (Graph traversal)
• การท่่ องไปในกราฟ (graph traversal) คืือ กระบวนการเข้าไป
ไ ใ ้ไ
เยือนโหนดในกราฟ โดยมีหลักในการทํางานคือ แต่ละโหนดจะถูก
เยือนเพียงครั้งเดียว สําหรับการท่องไปในทรี เพื่อเยือนแต่ละโหนดนั้น
จะมเสนทางเดยว แตในกราฟระหวางโหนดอาจจะมหลายเสนทาง
จะมีเส้นทางเดียว แต่ในกราฟระหว่างโหนดอาจจะมีหลายเส้นทาง
ดังนั้นเพือปองกันการท่ องไปในเส้ นทางทีซํ้าเดิมจึงจําเป็ นต้ องทํา
่ ้ ่
เครื่องหมายมาร์ คบิตบริเวณทีได้ เยือนเสร็จเรียบร้ อยแล้วเพื่อไม่ให้เข้า
เครองหมายมารคบตบรเวณทไดเยอนเสรจเรยบรอยแลวเพอไมใหเขา
่
ไปเยือนอีก สําหรับเทคนิคการท่องไปในกราฟมี 2 แบบดังนี้
29. สํ าหรับเทคนิคการท่ องไปในกราฟมี 2 แบบดังนี้
• การท่ องแบบกว้ าง (Breadth first traversal) วิธีน้ ีทาโดยเลือกโหนด
ํ
ั
ที่เป็ นจุดเริ่ มต้น ต่อมาให้เยือนโหนดอื่นที่ใกล้กนกับโหนดเริ่ มต้นทีละ
ระดับ จนกระทังเยือนหมดทุุกโหนดในกราฟ ตัวอย่างแสดงเส้นทาง
่
การท่องแบบกว้างทีละโหนดตามลําดับ
A การท่่ องไปแนวกว้้ าง A B C D E F
ไป
B C D
E F
31. การท่ องแบบลึก (Depth first traversal)
• การทํางานคล้ายกับการท่องทีละระดับของทรี โดยกําหนดเริ่มต้ นที่
โหนดแรกและเยอนโหนดถดไปตามแนววถนนจนกระทงนาไปสู
โหนดแรกและเยือนโหนดถัดไปตามแนววิถน้ันจนกระทังนําไปส่ ปลาย
ี ่
วิถน้ัน จากนั้น ย้อนกลับ (backtrack) ตามแนววิถีเดิมนั้น จนกระทัง
ี ่
สามารถดําเนิินการต่่อเนื่ืองเข้าสู่ แนววิถีอื่น ๆ เพืื่อเยือนโหนดอื่ืน ๆ
้ ิ ื โ
ต่อไปจนครบทุกโหนด
A
B C D
8
E F
ABECFD
34. • Spanning Tree คือต้นไม้ที่ประกอบด้วยโหนดทุกโหนดของ
กราฟ โดยแต่ ละคู่ของโหนดจะต้ องมีเส้ นเชืื่อมเพียงเส้ นเดียว นันคืือไ มี
่ ไม่
loop หรือ cycle
• สมมติสถานการณ์ให้กราฟแสดงเส้นทางการบินระหว่าง 7 เมือง แต่ดวย ้
เหตุผลทางธุรกจทาใหตองปดเสนทางการบนไปใหมากทสุ ดแตยงคง
เหตผลทางธรกิจทําให้ตองปิ ดเส้นทางการบินไปให้มากที่สดแต่ยงคง
้ ั
สามารถเชื่อมต่อถึงกันได้หมด
a b a b a b
1. ห้ามมี 2 เส้น
c d c d c d
2. ห้ามตัดเส้นออก
e e f e f 3. ห้ามมี cycle
f
g g g
35. Minimum spanning tree
MST หมายถึงเวทจ์กราฟและเป็ นสแปนนิ่งทรี ที่มีค่านํ้าหนักรวมกัน
แล้วมีค่าน้อยที่สุด
.29 2 .29 2
0 .51
0 .51
.31 .31
6 6
.32 7 .25
25 .32 7 .25
25
.21 .21
.60 .60
1 .51 1 .51
.46 .46
3 3
.34 .34
.18 .18
.40 .40
5 4 5 4
36. Minimum spanning tree
• Representation
.29 2 0 1 2 3 4 5 6 7
0 .51 0 * .32 .29 * * .60 .51 .31
.31
6 1 .32 * * * * * * .21
.32 7 .25
.60
.21
2 .29 * * * * * * *
1 .51
3 * * * * .34 .18 * *
.46
4 * * * .34 * .40 .51 .46
3 5
.34
.60 * * .18 .40 * * *
.18
.40
6 .51 *
51 * * .51 * * .25
51 25
5 4 7 .31 .21 * * .46 * .25 *
37. วิธีการในการหา Minimum Spanning Tree ทีนิยมใช้
่
มี 3 วิธี ดังต่ อไปนี้
1.Kruskal’s Algorithm
Kruskal s
Kruskal’s Algorithm ค้ นพบโดย Joseph Kruskal ในปี 1956 โดยมีหลักการ
คนพบโดย ในป โดยมหลกการ
ดังต่ อไปนี้
1. เลอก
1 เลือก Edge ใน Graph ทีมี Weight ตําสด เปน edge เริ่มต้ น
ทม่ ตาสุ ด เป็ น
่ เรมตน
2. จากนั้นให้ เพิม Edge ทีมี Weight ตําสุ ดทีเ่ หลืออยู่ ทีจะไม่ ทาให้ เกิด Simple Circuit
่ ่ ่ ่ ํ
กับ Edge ทีเี่ ลือกไว้้ แล้้ ว ทําการหยุดหลังจากได้้ n-1 Edge เลือกได้้ n-1 edges
ั ื ไ ํ ั ไ ื ไ
เลือก edge ทีส้ั นทีสุด
่ ่
เลอกได
เลือกได้
รวม edge นี้ ถ้ าไม่ เกิดวงจร n-1 edges
38. Kruskal’s Algorithm
• เรยงลาดบ weight จากนอยไปมาก
ี ํ ั ih ้ ไป
3-5 = .18
1-7 = .21
1 7 21 .29
29 2
6-7 = .25 0 .51
.31
0-2 = .29 6
.32 7 .25
0-7 = .31 .60
.21
0-1 = .32 เกิดวงจร 1 .51
.46
4.3 = .34 3
4-5 = .40 เกิดวงจร .34
.18
4-7 = .46
4 7 46
5 .40 40
4
0-6 = .51
4-6 = .51
0-5 = .60
39. 2.Prim s
2 Prim’s algorithm
• หลักการของ Prim’s Algorithm เริ่ มต้นจากเวอร์์เท็กซ์์ที่กาหนดแล้ว
็ ํ
หาเวอร์เท็กซ์ขางเคียง เรี ยงตามค่านํ้าหนักของเอดจ์ มีข้นตอนดังนี้
้ ั
• 1. เลือก 1 จุด
• 2. เลืือก edge สั้ นสุ ดทีี่ต่อกับทีี่ได้เ้ ลืือกไว้้
ั ั ไ
• 3. รวม edge นี้ถาไม่เกิดวงจร
g ้
40. Prim s
Prim’s algorithm
- เลือก 1 จุด
- เลืือก edge สั้ ันสุ ดทีี่ต่อกับที่ีได้เ้ ลืือกไว้้
ั ไ
- รวม edge นี้ถาไม่เกิดวงจร
้
A A
1 14 1
14 8 8
13 7 13 7
B C D B C D
6 3 6 7
3 7
E 1 F E 1 F
41. 3 Dijkstra’s algorithm
Dijkstra s
• ่
วิธีการของ Dijkstra จะทําใ ได้สิ่ งทีี่เรีี ยกว่า single-source shortest
ิ ํ ให้้ ้
path หรื อเส้นทางที่ส้ นที่สุดจากจุดเดียว โดยใช้ priority queue ช่วยใน
ั
การทํางาน มีีข้ นตอนดังนี้ ี
ั
1. เลือกจุุดเริ่ มต้น
2. ตรวจสอบค่านํ้าหนักกับจุดที่เชื่อมต่อทุกจุด นําค่านํ้าหนักเก็บใน
priority queue แล้วเลือกเส้นที่มีค่าตํ่าสด
แลวเลอกเสนทมคาตาสุ ด
3. เยียมจุดที่เลือกใหม่ แล้วทําซํ้า 2-3 จนกว่าจะเยียมครบทุกจุด
่ ่
้ ็
ข้อกําหนด : การนําข้อมูลเก็บในคิว เป็็ นไปตาม priority นันคืือ ค่า
้ ไ ่
นํ้าหนักน้อย มี priority สู งกว่า
42. Dijkstra s
Dijkstra’s algorithm
• single-source AD1 DE7 AC8
shortest path
DC8 DF8 EF8 EC10 AB14 CB21
A
14 1
8 AB14 AC8 AD1
13 7
B C D AD1 AC8 AB14 1
3 6 7
DC8 DE7 DF8
E F DE7 AC8 DC8 AB14 2
1
DF8
A
14 1
8 EF8 EC10
13 7
B C D 3 AC8 DC8 DF8 EF8 EC10 AB14
3 6 7 CB21
E 1 F 4 DC8 DF8 EF8 EC10 AB14 CB21
43. แบบฝกหด
แบบฝึ กหัด
• 1 จากภาพต่่ อไปนีี้ จงแทนกราฟด้้ วยอะเรย์์ สองมิติ
1. ไป ฟ ิ
1 2
4 3
2. กราฟสมบูรณ์แบบไม่มีทิศทาง ประกอบด้วยเวอร์เทกซ์ท้ งหมด 7 เวอร์เทกซ์
ั
จงคํานวณว่ากราฟนี้ จะมีก่ีเอดจ์
3. กราฟสมบูรณ์แบบมีทิศทาง ประกอบด้วยเวอร์เทกซ์ท้ งหมด 8 เวอร์เทกซ์
ั
จงคํานวณว่ากราฟนี้ จะมีก่ีเอดจ์