Graph

1,867 views
1,771 views

Published on

Graph

Published in: Education
1 Comment
0 Likes
Statistics
Notes
  • ขออภัย พิมพ์ผิด เวียงจันทน์ เป็น เวียงจันทร์
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

No Downloads
Views
Total views
1,867
On SlideShare
0
From Embeds
0
Number of Embeds
40
Actions
Shares
0
Downloads
25
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

Graph

  1. 1. บทที่ 7กราฟ (Graph)
  2. 2. นิยามกราฟ• กราฟ เป็ นโครงสร้างที่นามาใช้เพื่อแสดงความสัมพันธ์ระหว่างวัตถุ โดย ํ แทนวัตถด้วยเวอร์เท็กซ์ และเชื่อมโยงความสัมพันธ์ดวยเอดจ์ ุ ้• เขียนในรู ปของสัญลักษณ์ได้เป็ น G = (V,E)• ซึ่ง V(G) คือ เซตของเวอร์เทกซ์ท่ีไม่ใช่เซ็ตว่าง และมีจานวนจํากัด ํ• E(G) คือ เซตของเอดจ ซึ่ งเขียนด้วยค่ของเวอรเทกซ คอ เซตของเอดจ์ ซงเขยนดวยคู องเวอร์เท็กซ์ เอดจ์ A B เวอร์เท็กซ์ เวอร์เท็กซ์
  3. 3. องค์ ประกอบโครงสร้ างข้ อมููลแบบกราฟV = {1, 2, 3, 4} {E = {(1,2), (1,4), (2,3), (3,4)}
  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. 5. 7.1.2 ชนิดของกราฟ 1) กราฟแบบไม่มีทิศทาง (Undirected Graph) จะเป็ น กราฟที่มีเส้นเชื่อมโยงระหว่างเวอร์เทกซ์ท้ ง 2 ซึ่ งไม่มีทิศทางว่าจากเวอร์ ั เทกซ์ใดไปยังเวอร์เทกซ์ใด การเขียนเซตของเส้นเชื่อมโยงจะเขียนอยูใน ่ เครองหมายวงเลบ เครื่ องหมายวงเล็บ
  6. 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. 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)}
  8. 8. ภาพตัวอย่ างกราฟไม่ มทศทาง ี ิ
  9. 9. กราฟทมทศทาง กราฟทีมทศทาง (Digraph) ่ ี ิ • กราฟแบบมีทศทาง = กราฟที่มีเอดจ์์ เป็ นหัวลูกศร ซึ่ ึ งแสดงทิศทาง ิ จากเวอร์ เท็กซ์ หนึ่ง ไปยังอีกเวอร์ เท็กซ์ หนึ่ง (Directed Graph) A B กรุุงเทพ เวียงจันทร์จากภาพ มีเส้นทางจากกรุ งเทพไปเวียงจันทร์ แต่ไม่มีเส้นทางจากเวียงจันทร์ไปกรุ งเทพ
  10. 10. กราฟแบบมีทศทาง ิV(G) = {a, b, c, d}E(G) = {<a,b> , <a,c>, <b,d>, <d,c>, <c,b>}
  11. 11. ภาพตัวอย่ างกราฟแบบมีทศทาง ิ
  12. 12. ภาพตัวอย่ างกราฟแบบมีทศทาง ิ
  13. 13. ระดับขั้นเข้ าและระดับขั้นออก ั ้ ั ้ (In-degree) ื ํ ระดบขนเข้า (In degree) คอ จานวนของเอดจทเข้าไป ์ ี่ ้ ยังเวอร์เทกซ์น้ น ๆ ั ระดับขั้นออก(Out-degree) คือ จํานวนของเอดจ์ที่ออกจาก เวอรเทกซนน เวอร์เทกซ์น้ น ๆ ั
  14. 14. กราฟสมบูรณ กราฟสมบรณ์• กราฟที่ทุกเวอร์์เท็กซ์์มีเอดจ์เ์ ชื่ือมโยงไปยังเวอร์์เท็กซ์์ที่เหลืือ ็ ไ ็ ทั้งหมด A B C ในกราฟสมบูรณ์ สามารถคํานวณจํานวนเอดจ์ ได้ จาก N*(N-1)/2
  15. 15. สู ตรหาจานวนเอดจของกราฟไมมทศทาง สตรหาจํานวนเอดจ์ ของกราฟไม่ มทศทาง = (N * (N – 1)) / 2 ี ิกราฟแบบไม่มีทิศทาง และจํานวนเวอร์เทกซ์ท่ีมีท้ งหมด เท่ากับ 4 เวอร์เทกซ์ จึง ัคํานวณหาจํานวนเอดจ์ได้ดงนี้ ั สู ตรหาจํานวนเอดจ์ของกราฟไม่มีทิศทาง = (N * (N – 1)) / 2 = (4 * (4 – 1)) / 2 = (4 * 3 ) / 2 = 12 / 2 = 6 เส้น
  16. 16. สูตรหาจํํานวนเอดจ์์ ของกราฟมีทศทาง ฟ ี ิ = N * (N –1)จากภาพที่ (ข) ซึ่ งเป็ นกราฟแบบมีทิศทาง และจํานวนเวอร์เทกซ์ที่มีทั้งหมดเท่ากับ 4 เวอร์เทกซ์ จึงคํานวณหาจํานวนเอดจ์ได้ดงนี้ ั ํ ์ สู ตรหาจานวนเอดจของกราฟมทศทางฟ ี ิ = N * (N –1) 1) = 4 * ( 4 – 1) =4*3 = 12 เส้้น
  17. 17. กราฟทมนาหนก กราฟทีมนําหนัก (Weighted Graphs) ่ ี ้• กราฟที่แต่่ ละเอดจ์์ จะมีค่าบ่งบอกถึึงความหมายอย่างใดอย่างหนึ่ ึง เช่น ระยะทาง ความเร็ว เวลาเดินทาง ค่ าโดยสาร เป็ นต้น 101 ปทมธานี ุ สระบรี ุ 46 101 58 107 นครนายก กรุงเทพ 100 29 82 ฉะเชงเทรา ฉะเชิงเทรา 76 ปราจนบุร ปราจีนบรี
  18. 18. กราฟทมนาหนกกราฟทีมนําหนัก ่ ี ้
  19. 19. เส้ นทาง (Path) ของกราฟ คือ ลําดับของเวอร์เทกซ์ที่ถูกเชื่อมต่อ ดวยเอดจ โดยเริ่ มตั้งแต่เวอร์เทกซ์แรกไปจนถึงเวอร์เทกซ์สดทายหรอ ด้วยเอดจ์ โดยเรมตงแตเวอรเทกซแรกไปจนถงเวอรเทกซสุ ดท้ายหรื อ เวอร์เทกซ์ที่ตองการ ้เส้ นทางจาก A ไป E P1 = (A, B, C, D, E) ความยาวของเส้นทางเท่ากับ 4เสนทางจากเส้ นทางจาก A ไป H P2 = (A, B, C, F, G, H)ความยาวของเส้นทางเท่ากับ 5
  20. 20. การแทนกราฟดวยอะเรยสองมต การแทนกราฟด้ วยอะเรย์ สองมิติ B A B C D A 0 1 1 1A C B 1 0 0 1 C 1 0 0 1 D 1 1 1 0 D
  21. 21. การแทนทีกราฟ ่
  22. 22. การแทนทกราฟการแทนทีกราฟ ่
  23. 23. การแทนทกราฟการแทนทีกราฟ ่
  24. 24. การทองไปในกราฟ การท่ องไปในกราฟ (Graph traversal)• การท่่ องไปในกราฟ (graph traversal) คืือ กระบวนการเข้าไป ไ ใ ้ไ เยือนโหนดในกราฟ โดยมีหลักในการทํางานคือ แต่ละโหนดจะถูก เยือนเพียงครั้งเดียว สําหรับการท่องไปในทรี เพื่อเยือนแต่ละโหนดนั้น จะมเสนทางเดยว แตในกราฟระหวางโหนดอาจจะมหลายเสนทาง จะมีเส้นทางเดียว แต่ในกราฟระหว่างโหนดอาจจะมีหลายเส้นทาง ดังนั้นเพือปองกันการท่ องไปในเส้ นทางทีซํ้าเดิมจึงจําเป็ นต้ องทํา ่ ้ ่ เครื่องหมายมาร์ คบิตบริเวณทีได้ เยือนเสร็จเรียบร้ อยแล้วเพื่อไม่ให้เข้า เครองหมายมารคบตบรเวณทไดเยอนเสรจเรยบรอยแลวเพอไมใหเขา ่ ไปเยือนอีก สําหรับเทคนิคการท่องไปในกราฟมี 2 แบบดังนี้
  25. 25. สํ าหรับเทคนิคการท่ องไปในกราฟมี 2 แบบดังนี้• การท่ องแบบกว้ าง (Breadth first traversal) วิธีน้ ีทาโดยเลือกโหนด ํ ั ที่เป็ นจุดเริ่ มต้น ต่อมาให้เยือนโหนดอื่นที่ใกล้กนกับโหนดเริ่ มต้นทีละ ระดับ จนกระทังเยือนหมดทุุกโหนดในกราฟ ตัวอย่างแสดงเส้นทาง ่ การท่องแบบกว้างทีละโหนดตามลําดับ A การท่่ องไปแนวกว้้ าง A B C D E F ไปB C D E F
  26. 26. การท่่ องไปในกราฟแนวกว้้ าง ไปใ ฟ การทองไปแนวกวาง การท่ องไปแนวกว้ าง = A G B H E C F D
  27. 27. การท่ องแบบลึก (Depth first traversal)• การทํางานคล้ายกับการท่องทีละระดับของทรี โดยกําหนดเริ่มต้ นที่ โหนดแรกและเยอนโหนดถดไปตามแนววถนนจนกระทงนาไปสู โหนดแรกและเยือนโหนดถัดไปตามแนววิถน้ันจนกระทังนําไปส่ ปลาย ี ่ วิถน้ัน จากนั้น ย้อนกลับ (backtrack) ตามแนววิถีเดิมนั้น จนกระทัง ี ่ สามารถดําเนิินการต่่อเนื่ืองเข้าสู่ แนววิถีอื่น ๆ เพืื่อเยือนโหนดอื่ืน ๆ ้ ิ ื โ ต่อไปจนครบทุกโหนด A B C D 8 E FABECFD
  28. 28. การทองไปในกราฟแนวลกการท่ องไปในกราฟแนวลึก
  29. 29. การทองไปแนวลกการท่ องไปแนวลึก = A B C D E F G H
  30. 30. • 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
  31. 31. 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
  32. 32. 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 *
  33. 33. วิธีการในการหา 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
  34. 34. Kruskal’s Algorithm• เรยงลาดบ weight จากนอยไปมาก ี ํ ั ih ้ ไป3-5 = .18 1-7 = .21 1 7 21 .29 29 26-7 = .25  0 .51 .310-2 = .29  6 .32 7 .250-7 = .31  .60 .210-1 = .32 เกิดวงจร 1 .51 .464.3 = .34  34-5 = .40 เกิดวงจร .34 .184-7 = .46 4 7 46 5 .40 40 40-6 = .514-6 = .510-5 = .60
  35. 35. 2.Prim s 2 Prim’s algorithm• หลักการของ Prim’s Algorithm เริ่ มต้นจากเวอร์์เท็กซ์์ที่กาหนดแล้ว ็ ํ หาเวอร์เท็กซ์ขางเคียง เรี ยงตามค่านํ้าหนักของเอดจ์ มีข้นตอนดังนี้ ้ ั• 1. เลือก 1 จุด• 2. เลืือก edge สั้ นสุ ดทีี่ต่อกับทีี่ได้เ้ ลืือกไว้้ ั ั ไ• 3. รวม edge นี้ถาไม่เกิดวงจร g ้
  36. 36. 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
  37. 37. 3 Dijkstra’s algorithm Dijkstra s• ่ วิธีการของ Dijkstra จะทําใ ได้สิ่ งทีี่เรีี ยกว่า single-source shortest ิ ํ ให้้ ้ path หรื อเส้นทางที่ส้ นที่สุดจากจุดเดียว โดยใช้ priority queue ช่วยใน ั การทํางาน มีีข้ นตอนดังนี้ ี ั1. เลือกจุุดเริ่ มต้น2. ตรวจสอบค่านํ้าหนักกับจุดที่เชื่อมต่อทุกจุด นําค่านํ้าหนักเก็บใน priority queue แล้วเลือกเส้นที่มีค่าตํ่าสด แลวเลอกเสนทมคาตาสุ ด3. เยียมจุดที่เลือกใหม่ แล้วทําซํ้า 2-3 จนกว่าจะเยียมครบทุกจุด ่ ่ ้ ็ ข้อกําหนด : การนําข้อมูลเก็บในคิว เป็็ นไปตาม priority นันคืือ ค่า ้ ไ ่ นํ้าหนักน้อย มี priority สู งกว่า
  38. 38. Dijkstra sDijkstra’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 7B C D 3 AC8 DC8 DF8 EF8 EC10 AB14 3 6 7 CB21 E 1 F 4 DC8 DF8 EF8 EC10 AB14 CB21
  39. 39. แบบฝกหด แบบฝึ กหัด• 1 จากภาพต่่ อไปนีี้ จงแทนกราฟด้้ วยอะเรย์์ สองมิติ 1. ไป ฟ ิ 1 2 4 32. กราฟสมบูรณ์แบบไม่มีทิศทาง ประกอบด้วยเวอร์เทกซ์ท้ งหมด 7 เวอร์เทกซ์ ัจงคํานวณว่ากราฟนี้ จะมีก่ีเอดจ์3. กราฟสมบูรณ์แบบมีทิศทาง ประกอบด้วยเวอร์เทกซ์ท้ งหมด 8 เวอร์เทกซ์ ัจงคํานวณว่ากราฟนี้ จะมีก่ีเอดจ์
  40. 40. 4. จากกราฟต่อไปนี้ จงท่องไปในแนวลึก และ แนวกว้าง โดยมีจุดเริ่ มต้นที่ เวอร์เทกซ์ B
  41. 41. 5. จากภาพต่อไปนี้ จงหาระยะทางโดยใช้วธีการของ Dijkstra ิ โดยเริ่ มที่จุด B 2 A B 4 C 6 10 7 E 3 D 12 5 2 1 F G

×