1 / 41

บทที่ 12 กราฟ ( Graph )

บทที่ 12 กราฟ ( Graph ). บทที่ 12 กราฟ ( Graph ). กล่าวนำกราฟ. โครงสร้างของ กราฟ. การสร้าง กราฟ. การท่องเข้าไปในกราฟ (Graph Traversals). การนำกราฟไปใช้งาน. สรุปเนื้อหาบทที่ 12. กล่าวนำกราฟ.

Download Presentation

บทที่ 12 กราฟ ( Graph )

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. บทที่ 12 กราฟ (Graph)

  2. บทที่ 12 กราฟ (Graph) • กล่าวนำกราฟ • โครงสร้างของกราฟ • การสร้างกราฟ • การท่องเข้าไปในกราฟ (Graph Traversals) • การนำกราฟไปใช้งาน • สรุปเนื้อหาบทที่ 12

  3. กล่าวนำกราฟ • กราฟ (Graph)เป็นโครงสร้างการเก็บข้อมูลแบบไม่เป็นเชิงเส้น ซึ่งแตกต่างจากการเก็บข้อมูลแบบทรี • กราฟเป็นโครงสร้างระหว่างโหนดสองโหนดและเชื่อมความสัมพันธ์ระหว่างสองโหนดด้วยเส้นเชื่อมโยง

  4. โครงสร้างของกราฟ • กราฟที่มีการใช้งานกันทั่วไปคือ กราฟเส้น กราฟแท่ง และ กราฟเป็นช่วงเป็นต้น • ส่วนประกอบของกราฟประกอบด้วยเซตสองเซต (Set) คือ • เซต V เป็นเซตของข้อมูลที่เรียกว่า โหนด(Node) ในกราฟ • เซต E เป็นเซตของ เส้นเชื่อม (Edge) ซึ่งทำหน้าที่เชื่อมโหนดให้มีความสัมพันธ์กัน ดังโครงสร้างส่วนประกอบของกราฟในรูป (a) ซึ่งแสดงการเชื่อมโยงโหนดในแผนที่ โดยประกอบด้วย สถานที่ และในแต่ละสถานที่ถูกเชื่อมโยงด้วยเส้นเชื่อมคือ ถนน (a) แสดงการเชื่อมโยงสถานที่ในแผ่นที่ (b) กราฟย่อย • กราฟย่อย (Subgraph) ประกอบด้วยเซตย่อยของโหนดในกราฟ และเซตย่อยของเส้นเชื่อม ดังแสดงกราฟย่อยในรูป (b) ซึ่งกราฟย่อย คือ กราฟที่มีข้อมูลส่วนหนึ่งของกราฟในรูป (a)

  5. โครงสร้างของกราฟ (a) แสดงการเชื่อมโยงสถานที่ในแผ่นที่ (b) กราฟย่อย • ส่วนประกอบในกราฟประกอบด้วยความสัมพันธ์ระหว่างโหนดสองโหนดเรียกว่า โหนดประชิด (Adjacent node) โดยทั้งสองโหนดจะถูกเชื่อมความสัมพันธ์ด้วยจุดหรือเส้น จากรูป (a) โหนดห้องสมุดกับโหนดสวนสาธารณะเป็นโหนดประชิดกัน • เส้นทาง (Path) ระหว่างสองโหนด ซึ่งก็คือ ความสัมพันธ์ของเส้นเชื่อมความสัมพันธ์ระหว่างโหนดต้นและโหนดปลาย

  6. โครงสร้างของกราฟ (a) แสดงการเชื่อมโยงสถานที่ในแผ่นที่ (b) กราฟย่อย • ประเภทของเส้นทาง • เส้นทางเดียว (Simple path) คือเส้นทางในการเดินจากบ้านพัก ไปห้องสมุด ผ่าน สวนสาธารณะ เป็นต้น • เส้นทางแบบรอบ (Cycle path) คือเส้นทางที่มีจุดเริ่มต้นและจุดสุดท้ายอยู่ที่ตำแหน่งเดียวกัน เช่น เดินทางจากบ้านพัก ห้องสมุด สวนสาธารณะ โรงยิม และกลับไปบ้านพัก ซึ่งเป็นเส้นทางแบบรอบ

  7. โครงสร้างของกราฟ • รูปแบบการเชื่อมโยงระหว่างโหนด • แบบเชื่อมโยง (Connected) คือ เส้นเชื่อมโยงทุกโหนดภายในกราฟดังแสดงในรูป (a) • แบบไม่เชื่อมโยง (Disconnected) คือ มีบ้างโหนดไม่ได้ถูกเชื่อมโยงภายในกราฟดังแสดงในรูป (b) • แบบสมบรูณ์ (Complete) คือ ในหนึ่งโหนดจะมีเส้นเชื่อมโยงไปยังทุกโหนดภายในกราฟดังแสดงในรูป (c) • แบบเส้นเชื่อมโยงเดียว รูปแบบการเชื่อมโยง(Self edge) หรือ ลูป (Loop) คือ เส้นที่มีการเชื่อมโยของจุดเริ่มต้นและจุดสิ้นสุดอยู่ที่ตัวเองโดยไม่เชื่อมโยงไปยังโหนดอื่นดังแสดงในรูป (d) ซึ่งเป็นรูปแบบที่ไม่อนุญาตให้ใช้ในกราฟ

  8. โครงสร้างของกราฟ • เส้นเชื่อมโยงภายในกราฟยังสามารถใช้เส้นเชื่อมโยงแบบมีทิศทางและแบบไม่ทิศทางในการเชื่อมโยงได้ดังนี้ • การเชื่อมโยงแบบไม่มีทิศทาง (Undirected) จากรูป (a) อธิบายการเชื่อมโยงแบบไม่ทิศทางคือ โหนดA สามารถไปหาโหนดB ได้และโหนดB ก็สามารถไปหาโหนดA ได้ • แบบเชื่อมโยงแบบมีทิศทาง (Directed) จากรูป (b) อธิบายการเชื่อมโยงแบบมีทิศทาง คือ โหนดB ไม่สามารถไปหาโหนดD ได้ แต่โหนดD สามารถมาหาโหนดB ได้

  9. การสร้างกราฟ เมทริกประชิด • เมทริกประชิด คือ จำนวนโหนดที่มีความสัมพันธ์กันในกราฟจำนวน nโหนด และนำโหนดที่มีความสัมพันธ์กันในกราฟไปสร้างอาร์เรย์ขนาดเท่ากับ n x n ข้อมูล • ใช้สำหรับเก็บข้อมูลความสัมพันธ์ของโหนด • ถ้ากำหนดให้ i และ jแทนตำแหน่งของโหนด และนำกราฟในรูป (a) เป็นกราฟแบบมีทิศทางมาเก็บความสัมพันธ์ระหว่างโหนดในอาร์เรย์ซึ่งจะมีรูปในการเก็บข้อมูลดังแสดงในรูป (b) • กำหนดให้ข้อมูลในอาร์เรย์ในตำแหน่งที่ matrix[ i][ j] มีค่าเท่ากับ “1” หมายถึงโหนดiมีการเชื่อมโยงกับโหนดj แต่ถ้ากำหนดให้ matrix[ i][ j] มีค่าเท่ากับ “0” หมายถึงโหนดi ไม่มีการเชื่อมโยงกับโหนดj (a) กราฟแบบมีทิศทาง (b) อาร์เรย์แสดงความความสัมพันธ์ระหว่างโหนด

  10. การสร้างกราฟ เมทริกประชิด • ถ้ากราฟเป็นกราฟแบบน้ำหนัก คือ มีน้ำหนักของเส้นเชื่อมโยงดังแสดงในรูป (a) ข้อมูลในอาร์เรย์จะเปลี่ยนจาก 1 ซึ่งเป็นโหนดที่มีความสัมพันธ์กันเป็นค่าน้ำหนักในการเชื่อมโยงระหว่างโหนดแทน และโหนดไหนไม่มีความสัมพันธ์ระหว่างโหนดจะแทนตัว (a) กราฟไม่มีทิศทางและมีน้ำหนักกราฟ (b) อาร์เรย์แสดงความสัมพันธ์ระหว่างโหนด

  11. การสร้างกราฟ รายการประชิด • รายการประชิด คือ การเก็บรายละเอียดของความเชื่อมโยงในกราฟทั้งแบบมีทิศทางและไม่มีทิศทาง • ใช้โครงสร้างของลิงค์ลิสต์มาเก็บข้อมูลความสัมพันธ์ของกราฟ • ถ้ากราฟมีจำนวนโหนดเท่ากับ nโหนด จะมีโหนดในลิงค์ลิสต์เท่ากับจำนวนโหนดของกราฟ ดังแสดงการเก็บรายการประชิดในรูป (b) เป็นการเก็บความสัมพันธ์ของกราฟแบบมีทิศทางในรูป (a) (a) กราฟแบบทิศทาง (b) รายการประชิดของกราฟแบบมีทิศทาง

  12. การสร้างกราฟ รายการประชิด • การเก็บรายการประชิดของกราฟแบบไม่มีทิศทางและเป็นกราฟแบบมีน้ำหนักกราฟ โดยข้อมูลภายในรายการประชิดจะเก็บน้ำหนักของโหนดไว้ในลิงค์ลิสต์ดังแสดงในรูป (b) (a) กราฟไม่มีทิศทางและมีน้ำหนักกราฟ (b) รายการประชิดของกราฟไม่มีทิศทางและมีน้ำหนักกราฟ

  13. การท่องเข้าไปในกราฟ (Graph Traversals) • การท่องเข้าไปในกราฟจะท่องเข้าไปทุกโหนดและจะหยุดเมื่อถึงโหนดสุดท้ายในกราฟ • ท่องเข้าไปเฉพาะโหนดที่มีการเชื่อมโยงกันเท่านั้น • ถ้าในกราฟประกอบด้วยกราฟแบบลูป จะท่องเข้าไปในโหนดที่เป็นแบบลูปนี้เพียงครั้งเดียว • การท่องเข้าไปในกราฟสามารถท่องเข้าไปได้ทั้งในกราฟแบบมีทิศทางและไม่มีทิศทาง Depth-first Search • การท่องเข้าไปในกราฟแบบ Depth-first Search (DFS) จะใช้แสตกมาช่วยในการจัดการ ตัวอย่างที่ 12.1 โค้ดรหัสเทียมในการท่องเข้าไปกราฟแบบ DFS

  14. การท่องเข้าไปในกราฟ (Graph Traversals) Depth-first Search • จากโค้ดรหัสเทียมการท่องเข้าไปในกราฟแบบ DFS นำไปท่องเข้าไปในกราฟในรูป (a) • แสดงลำดับการทำงานในการเก็บข้อมูลลงในแสตกตามขั้นตอนวิธี DFS ในรูป (b) • มีลำดับในการท่องเข้าไปในกราฟคือ a, b, c, d, g, e, f, h และ i

  15. การท่องเข้าไปในกราฟ (Graph Traversals) Breadth-first Search • การท่องเข้าไปในกราฟแบบ Breadth-First Search (BFS) ได้ใช้คิวมาช่วยในการจัดการการท่องเข้าไปในกราฟ ตัวอย่างที่ 12.2 โค้ดรหัสเทียมในการท่องเข้าไปกราฟแบบ BFS

  16. การท่องเข้าไปในกราฟ (Graph Traversals) Breadth-first Search • จากหลักการท่องเข้าไปในกราฟแบบ BFS นำไปท่องเข้าไปในกราฟในรูป (a) • มีลำดับการทำงานในการเก็บข้อมูลลงในคิวดังแสดงในรูป (b) • ลำดับการท่องเข้าไปในกราฟคือ a, b, f, i, c, e, g, d และ h

  17. การท่องเข้าไปในกราฟ (Graph Traversals) • จากหลักการในการท่องเข้าไปในกราฟคือ DFS และ BFS นำไปท่องเข้าไปในกราฟในรูปที่ (a) • แสดงลำดับการท่องเข้าไปในกราฟแบบ DFS ได้ในรูป (b) • แสดงลำดับการท่องเข้าไปในกราฟแบบ BFS ได้ในรูป (c) (a) ภาพต้นแบบ (b) ท่องเข้าไปในกราฟแบบ DFS (c) ท่องเข้าไปในกราฟแบบ BFS

  18. การนำกราฟไปใช้งาน • กราฟแบบมีทิศทางที่ไม่ใช้กราฟแบบลูป ดังแสดงในรูป มีลำดับของโหนดในกราฟ คือ โหนดaมาก่อน bและ c เป็นต้น เราจะเรียกกราฟที่มีอันดับของโหนดว่า ลำดับโทโปโลยี (Topological order) และถ้ากำหนดให้โหนดx มาก่อนโหนดyทิศทางของเส้นเชื่อมจะมีทิศทางจาก x ไปยัง y

  19. การนำกราฟไปใช้งาน Topological sorting • จากกราฟที่มีลักษณะแบบลำดับโทโปโลยี มีขั้นตอนวิธีในการท่องเข้าไปในกราฟในรูปแบบนี้ คือ Topological sorting • ใช้แสตกมาช่วยในการจัดการท่องเข้าไปในกราฟ ตัวอย่างที่ 12.3 โค้ดรหัสเทียมในการท่องเข้าไปกราฟแบบ Topological sorting

  20. การนำกราฟไปใช้งาน Topological sorting • จากอัลกอริทึมการท่องเข้าไปในกราฟแบบ Topological sorting นำไปท่องเข้าไปในกราฟในรูป (a) • มีลำดับในการท่องเข้าไปในกราฟดังแสดงในรูป (b) • มีลำดับการท่องเข้าไปกราฟคือa, b, g, d, e, f, c (a) (b)

  21. การนำกราฟไปใช้งาน PossibleSpanning Tree • กราฟเป็นแบบไม่มีทิศทางและไม่มีการเชื่อมต่อเป็นแบบลูป ดังแสดงในรูป (a) สามารถใช้หลักการ PossibleSpanning treeในการเลือกเส้นทางเชื่องโยง • การเลือกเส้นทางเชื่อมโยงโหนดภายในกราฟแบบไม่มีทิศทางให้ครบทุกโหนดและให้มีเส้นการเชื่อมโยงน้อยที่สุด ดังแสดงการเชื่อมโยงโหนดภายในกราฟด้วยหลักการ Possible Spanning Tree ในรูป (b) • เส้นปะ หมายถึง เส้นเชื่อมโยงที่ไม่ต้องมีในกราฟก็ได้ เพราะใน Spanning tree ถือว่าทุกโหนดถูกเชื่อมโยงกันครบทุกโหนดแล้ว (a) การเชื่อมโยงโหนดภายในกราฟแบบครบทุกโหนด (b) การเชื่อมต่อโหนดแบบ Possible Spanning tree

  22. การนำกราฟไปใช้งาน PossibleSpanning Tree • ข้อสังเกตกราฟแบบไม่มีทิศทาง • กราฟไม่มีทิศทางมีโหนดnโหนด และมีการเชื่อมต่อระหว่างโหนดน้อยกว่า n - 1 ถ้าในกราฟไม่มีการเชื่อมต่อแบบลูป และจำนวนเส้นเชื่อมโยงระหว่างโหนดน้อยกว่าจำนวนโหนดแสดงว่ามีบ้างโหนดไม่ได้ถูกเชื่อมโยง ดังแสดงในรูป (a) • กราฟไม่มีทิศทางมีโหนดnโหนดและมีการเชื่อมต่อระหว่างโหนดเท่ากับ n - 1 และไม่มีการเชื่อมต่อแบบลูป เป็นรูปแบบการเชื่อมต่อที่เหมาะสมเนื่องจากมีทุกโหนดถูกเชื่อมโยง ดังแสดงในรูป (b) • กราฟไม่มีทิศทางมีโหนดnโหนดและมีการเชื่อมต่อระหว่างโหนดมากกว่า n – 1 และไม่มีการเชื่อมต่อแบบลูป เป็นรูปแบบที่มีเส้นการเชื่อมโยงระหว่างโหนดเกินกว่าจำนวนของโหนด ดังแสดงในรูป (c)

  23. การนำกราฟไปใช้งาน PossibleSpanning Tree • จากหลักการท่องเข้าไปในกราฟของ Possible Spanning tree สามารถนำหลักการท่องเข้าไปกราฟที่กล่าวมาก่อนหน้านี้คือ DFS และ BFS นำมาใช้ร่วมกับ Spanning tree ได้ดังแสดงในขั้นตอนต่อไป

  24. การนำกราฟไปใช้งาน DFS Spanning tree • การท่องเข้าไปในกราฟด้วยหลักการ Spanning tree โดยการใช้เทคนิค Depth-first search ตัวอย่างที่ 12.4 โค้ดรหัสเทียมในการท่องเข้าไปกราฟแบบ DFS Spanning tree • จากโค้ดรหัสเทียมในการท่องเข้าในกราฟแบบ DFS Spanning tree นำไปท่องในกราฟรูป (a) • มีลำดับการท่องเข้าไปในกราฟแสดงในรูป (b) • มีลำดับการท่องเข้าไปในกราฟคือ a, b, c, d, g, e, f, h, i • ตัวเลขที่กำกับบนเส้นเชื่อมโยงคือลำดับที่อัลกอลิทึม DFS Spanning tree ได้ท่องเข้าไปในกราฟ ส่วนเส้นปะ คือ เส้นเชื่อมโยงที่ไม่ได้ใช้ในท่องเข้าไปในกราฟ (a) (b)

  25. การนำกราฟไปใช้งาน BFS Spanning tree • การท่องเข้าไปในกราฟด้วยหลักการ Spanning tree โดยการใช้เทคนิค Breadth -first search ตัวอย่างที่ 12.5 โค้ดรหัสเทียมในการท่องเข้าไปกราฟแบบ BFS Spanning tree • ได้นำขั้นตอนวิธี BFS Spanning tree ท่องเข้าไปในกราฟตามรูป (a) • ได้ผลการท่องเข้าไปในกราฟแสดงในรูป (b) • มีลำดับการท่องเข้าถึงในโหนดคือ a, b, f, i, c, e, g, d, h (a) (b)

  26. การนำกราฟไปใช้งาน Minimum Spanning Tree • ลองนึกถึงในกรณีที่ต้องการเดินสายใยแก้วนำแสงระหว่างเมือง ให้มีระยะของสายที่สั้นที่สุดและต้องครอบคลุมทุกเมืองที่จะเชื่อมโยงเครือข่าย • ก่อนที่จะเดินสายใยแก้วนำแสงได้มีทีมสำรวจกำหนดน้ำหนักในแต่ละเส้นทางที่จะเชื่อมโยงสายดังแสดงในรูปซึ่งเป็นหลักการของ Spanning tree และค่าในการเดินสายใยแก้วนำแสงจะเป็นไปตามน้ำหนักของแต่ละเส้นการเชื่อมโยง • ผลรวมของค่าในการเดินสายจะเรียกว่า Cost of the spanning tree ซึ่งเป็นผลรวมของน้ำหนักของทุกเส้นการเชื่อมโยง • เพื่อให้การเดินสายใยแก้วนำแสงมีความคุมค่ามากที่สุด คือ การเดินสายให้ได้สั้นที่สุดและครอบคลุมทุกเมืองจะต้องมีผลรวมของน้ำหนักของเส้นการเชื่อมโยงน้อยที่สุดด้วยเช่นกัน • เรียกขั้นตอนวิธีนี้ว่า Minimum Spanning tree ดังแสดงตัวอย่างในการหาเส้นทางตามน้ำหนักให้มีค่าน้อยที่สุดคือ ขั้นตอนวิธีแบบ Prim

  27. การนำกราฟไปใช้งาน Minimum Spanning Tree ตัวอย่างที่ 12.6 โค้ดรหัสเทียมในการท่องเข้าไปกราฟแบบ Prim

  28. การนำกราฟไปใช้งาน Minimum Spanning Tree • แสดงการท่องเข้าไปในกราฟด้วยหลักการของ Prim

  29. การนำกราฟไปใช้งาน Shortest Paths • การหาเส้นทางที่สั้นที่สุด (Shortest Paths) คือ การหาเส้นทางระหว่างโหนดสองโหนดที่มีเส้นทางที่สั้นที่สุดตามน้ำหนักของเส้นทางที่จะผ่าน และต้องมีผลรวมของน้ำหนักน้อยที่สุดด้วย • ตัวอย่างในการหาเส้นทางที่ดังแสดงในรูป (a) • จะหาเส้นทางที่สั้นที่สุดจากโหนด0 ไปยังโหนด1 แต่จากรูป (a) ไม่สามารถเลือกเส้นทางจาก 0 ไป 1 ได้เนื่องจากมีค่าน้ำหนักเท่ากับ 8 ซึ่งมีค่าน้ำหนักมากกว่าเส้นทางจาก 0 ไป 4 ไป 2 และไป 1 โดยมีผลร่วมของน้ำหนักเท่ากับ 7 • แสดงอาร์เรย์ของโหนดประชิดของรูป (a) ในรูป 1(b) โดยโหนดที่เป็นโหนดประชิดกันจะมีน้ำหนักกำกับไว้ในเมทริกแต่ถ้าไม่ใช่โหนดประชิดกันจะมีค่าเท่ากับ (a) กราฟมีทิศทางและมีน้ำหนักกราฟ (b) อาร์เรย์แสดงความสัมพันธ์ระหว่างโหนด

  30. การนำกราฟไปใช้งาน Shortest Paths ตัวอย่างที่ 12.7 โค้ดรหัสเทียมในการหาเส้นทางที่สั้นที่สุด

  31. การนำกราฟไปใช้งาน Shortest Paths จากขั้นตอนที่กล่าวมาข้างต้นนำไปหาเส้นทางที่สั้นที่สุดในกราฟรูปต้นแบบ โดยมีลำดับการทำงานดังนี้ ขั้นตอนที่ 1 กำหนดให้ vertexSetเก็บโหนด0 และกำหนดให้มี weight ในแถวแรกของรูปตารางน้ำหนัก ขั้นตอนที่ 2 น้ำหนักที่โหนด4 (weight[4]) มีค่าเท่ากับ 4 ซึ่งเป็นค่าน้ำหนักที่น้อยที่สุด โดยยกเว้นน้ำหนักที่โหนด0 เพราะโหนด0 ถูกเก็บไว้ใน vertexSet แล้ว ดังนั้น v = 4 จะเพิ่ม 4 ในvertexSet และมีโหนดที่ยังไม่มีใน vertexSetคือ u = 1, 2 และ 3 จะเปรียบเทียบเส้นทางที่สั้นที่สุดจากโหนด0 ไปโหนด4 กับโหนด0 ไปยังโหนดu เมื่อเปรียบเทียบเส้นทางโหนด0 ไปโหนด1 และ 3 มีน้ำหนักมากกว่า 0 ไป 4 ต่อไปเปรียบเทียบโหนด0 ไปโหนด2 คือ weight[2] = ∞ > weight[4] +matrix[4][2] = 4 + 1 = 5 ดังนั้น weight[2] = 5 ดังแสดงตัวอย่างทิศทางของกราฟในรูป (a)

  32. การนำกราฟไปใช้งาน Shortest Paths ขั้นตอนที่ 3 น้ำหนักที่โหนด2 (weight[2]) มีค่าเท่ากับ 5 ซึ่งเป็นน้ำหนักน้อยที่สุด ยกเว้นโหนด0 และ 4 ซึ่งเป็นข้อมูลที่มีอยู่ใน vertexSet แล้ว ดังนั้น v = 2 เพิ่ม 2 ใน vertexSetและมีโหนดที่ยังไม่มีใน vertexSet คือ u = 1 และ 3 ตรวจสอบเส้นทางที่สั้นที่สุดจากโหนด0 ไปโหนด2 กับโหนด0 ไปโหนดu จึงเปรียบเทียบโหนด0 ไป 1 คือ weight[1] = 8 >weight[2] + matrix[2][1] = 5 + 2 = 7 ดังนั้น weight[1]=7 ดังแสดงทิศทางของกราฟในรูป (b) ต่อไปเปรียบเทียบโหนด0 ไป 3 คือ weight[3] = 9 >weight[2] + matrix [2][3] = 5 + 3 = 8 ดังนั้น weight[3] = 8 ดังแสดงทิศทางของกราฟในรูป (c)

  33. การนำกราฟไปใช้งาน Shortest Paths ขั้นตอนที่ 4 น้ำหนักโหนด1 (weight[1]) มีค่าเท่ากับ 7 ซึ่งเป็นน้ำหนักที่น้อยที่สุด ยกเว้นโหนด0, 2 และ 4 ซึ่งเป็นข้อมูลที่มีอยู่ใน vertexSetแล้วดังนั้น v = 1 เพิ่มโหนด1 ใน vertexSetสำหรับโหนด3 เหลือเพียงโหนดเดียวที่ยังไม่มีใน vertexSetเปรียบเทียบโหนด0 ไปโหนด1 กับโหนด 0 ไป 3 คือ weight[3] = 9 <weight[1] + matrix[1][3] = 7 + ∞ ดังแสดงทิศทางของกราฟในรูป (d) ซึ่งของเส้นทางการสำรวจจากสมการมีค่ามากกว่าจึงไม่เพิ่มโหนด3 ใน vertexSet ขั้นตอนที่ 5 เหลือโหนดที่ยังไม่มีใน vertexSet เพียงโหนดเดียวคือ 3 ดังนั้น เพิ่มโหนด3 ใน vertexSetและหยุดการทำงาน

  34. การนำกราฟไปใช้งาน Kruskal’sAlgorithm • Kruskal’s Algorithm เป็นอัลกอลิทึมเกี่ยวกับการหาเส้นทางที่สั้นที่สุดในกราฟที่มีน้ำหนัก • Kruskal’s Algorithm จะหาเซตย่อยของเส้นเชื่อมโยงโหนดภายในกราฟที่เชื่อมโยงไปยังทุกโหนดภายในกราฟ • ผลรวมของน้ำหนักเส้นโยงภายในกราฟจะค่าที่น้อยที่สุด ตัวอย่างที่ 12.8 โค้ดรหัสเทียมในการหาเส้นทางที่สั้นที่สุดด้วย Kruskal’s Algorithm

  35. การนำกราฟไปใช้งาน Kruskal’sAlgorithm

  36. การนำกราฟไปใช้งาน Dijkstra’sAlgorithm • Dijkstra’s Algorithm ใช้ในการหาเส้นทางที่สั้นที่สุดระหว่างสองเมืองในแผนที่ • เริ่มจากจุดเริ่มต้นมีค่าเป็น 0 ส่วนเมืองต่างให้มีค่าเป็นอินฟีนิตี้(Infinity:∞) • ต่อไปเริ่มหาเส้นทางไปทีละเมืองที่ยังไม่เคยท่องเข้าไป • ค่าผลรวมเส้นทางระหว่างเมืองที่ยังเคยท่องเข้าไปกับเส้นทางเดิม ให้เลือกเส้นทางที่สั้นที่สุดไปยังเมืองที่ไม่เคยท่องเข้าไป ซึ่งเป็นเส้นทางที่สั้นที่สุดพร้อมทั้งกำหนดให้เมืองที่ไม่ท่องเข้าไปนี้เป็นเมืองที่ถูกท่องเข้าไปแล้ว • ทำอย่างนี้จนถึงเมืองปลายทางที่ต้องการไปถึง ซึ่งเป็นเส้นทางที่สั้นที่สุดจากเมืองต้นทางไปถึงเมืองปลายทาง

  37. การนำกราฟไปใช้งาน Dijkstra’sAlgorithm ตัวอย่างที่ 12.9 โค้ดรหัสเทียมในการหาเส้นทางที่สั้นที่สุดด้วย Dijkstral’s Algorithm

  38. การนำกราฟไปใช้งาน Dijkstra’sAlgorithm

  39. การนำกราฟไปใช้งาน Dijkstra’sAlgorithm

  40. การนำกราฟไปใช้งาน Dijkstra’sAlgorithm

  41. การนำกราฟไปใช้งาน • กราฟ (Graph) เป็นโครงสร้างในการเก็บข้อมูลแบบไม่เป็นเชิงเส้น ซึ่งแตกต่างจากการเก็บข้อมูลแบบทรี กราฟเป็นโครงสร้างแบบระหว่างสองโหนดและเชื่อมความสัมพันธ์ระหว่างสองโหนดด้วยเส้นเชื่อมโยง • โครงสร้างการเก็บข้อมูลแบบกราฟพัฒนาขึ้นมาเพื่อหาเส้นทางที่สั้นที่สุดในการเดินทาง หรือการใช้ทรัพยากรที่เหมาะสมที่สุดที่อ้างอิงได้ทุกเมือง

More Related