420 likes | 760 Views
บทที่ 12 กราฟ ( Graph ). บทที่ 12 กราฟ ( Graph ). กล่าวนำกราฟ. โครงสร้างของ กราฟ. การสร้าง กราฟ. การท่องเข้าไปในกราฟ (Graph Traversals). การนำกราฟไปใช้งาน. สรุปเนื้อหาบทที่ 12. กล่าวนำกราฟ.
E N D
บทที่ 12 กราฟ (Graph) • กล่าวนำกราฟ • โครงสร้างของกราฟ • การสร้างกราฟ • การท่องเข้าไปในกราฟ (Graph Traversals) • การนำกราฟไปใช้งาน • สรุปเนื้อหาบทที่ 12
กล่าวนำกราฟ • กราฟ (Graph)เป็นโครงสร้างการเก็บข้อมูลแบบไม่เป็นเชิงเส้น ซึ่งแตกต่างจากการเก็บข้อมูลแบบทรี • กราฟเป็นโครงสร้างระหว่างโหนดสองโหนดและเชื่อมความสัมพันธ์ระหว่างสองโหนดด้วยเส้นเชื่อมโยง
โครงสร้างของกราฟ • กราฟที่มีการใช้งานกันทั่วไปคือ กราฟเส้น กราฟแท่ง และ กราฟเป็นช่วงเป็นต้น • ส่วนประกอบของกราฟประกอบด้วยเซตสองเซต (Set) คือ • เซต V เป็นเซตของข้อมูลที่เรียกว่า โหนด(Node) ในกราฟ • เซต E เป็นเซตของ เส้นเชื่อม (Edge) ซึ่งทำหน้าที่เชื่อมโหนดให้มีความสัมพันธ์กัน ดังโครงสร้างส่วนประกอบของกราฟในรูป (a) ซึ่งแสดงการเชื่อมโยงโหนดในแผนที่ โดยประกอบด้วย สถานที่ และในแต่ละสถานที่ถูกเชื่อมโยงด้วยเส้นเชื่อมคือ ถนน (a) แสดงการเชื่อมโยงสถานที่ในแผ่นที่ (b) กราฟย่อย • กราฟย่อย (Subgraph) ประกอบด้วยเซตย่อยของโหนดในกราฟ และเซตย่อยของเส้นเชื่อม ดังแสดงกราฟย่อยในรูป (b) ซึ่งกราฟย่อย คือ กราฟที่มีข้อมูลส่วนหนึ่งของกราฟในรูป (a)
โครงสร้างของกราฟ (a) แสดงการเชื่อมโยงสถานที่ในแผ่นที่ (b) กราฟย่อย • ส่วนประกอบในกราฟประกอบด้วยความสัมพันธ์ระหว่างโหนดสองโหนดเรียกว่า โหนดประชิด (Adjacent node) โดยทั้งสองโหนดจะถูกเชื่อมความสัมพันธ์ด้วยจุดหรือเส้น จากรูป (a) โหนดห้องสมุดกับโหนดสวนสาธารณะเป็นโหนดประชิดกัน • เส้นทาง (Path) ระหว่างสองโหนด ซึ่งก็คือ ความสัมพันธ์ของเส้นเชื่อมความสัมพันธ์ระหว่างโหนดต้นและโหนดปลาย
โครงสร้างของกราฟ (a) แสดงการเชื่อมโยงสถานที่ในแผ่นที่ (b) กราฟย่อย • ประเภทของเส้นทาง • เส้นทางเดียว (Simple path) คือเส้นทางในการเดินจากบ้านพัก ไปห้องสมุด ผ่าน สวนสาธารณะ เป็นต้น • เส้นทางแบบรอบ (Cycle path) คือเส้นทางที่มีจุดเริ่มต้นและจุดสุดท้ายอยู่ที่ตำแหน่งเดียวกัน เช่น เดินทางจากบ้านพัก ห้องสมุด สวนสาธารณะ โรงยิม และกลับไปบ้านพัก ซึ่งเป็นเส้นทางแบบรอบ
โครงสร้างของกราฟ • รูปแบบการเชื่อมโยงระหว่างโหนด • แบบเชื่อมโยง (Connected) คือ เส้นเชื่อมโยงทุกโหนดภายในกราฟดังแสดงในรูป (a) • แบบไม่เชื่อมโยง (Disconnected) คือ มีบ้างโหนดไม่ได้ถูกเชื่อมโยงภายในกราฟดังแสดงในรูป (b) • แบบสมบรูณ์ (Complete) คือ ในหนึ่งโหนดจะมีเส้นเชื่อมโยงไปยังทุกโหนดภายในกราฟดังแสดงในรูป (c) • แบบเส้นเชื่อมโยงเดียว รูปแบบการเชื่อมโยง(Self edge) หรือ ลูป (Loop) คือ เส้นที่มีการเชื่อมโยของจุดเริ่มต้นและจุดสิ้นสุดอยู่ที่ตัวเองโดยไม่เชื่อมโยงไปยังโหนดอื่นดังแสดงในรูป (d) ซึ่งเป็นรูปแบบที่ไม่อนุญาตให้ใช้ในกราฟ
โครงสร้างของกราฟ • เส้นเชื่อมโยงภายในกราฟยังสามารถใช้เส้นเชื่อมโยงแบบมีทิศทางและแบบไม่ทิศทางในการเชื่อมโยงได้ดังนี้ • การเชื่อมโยงแบบไม่มีทิศทาง (Undirected) จากรูป (a) อธิบายการเชื่อมโยงแบบไม่ทิศทางคือ โหนดA สามารถไปหาโหนดB ได้และโหนดB ก็สามารถไปหาโหนดA ได้ • แบบเชื่อมโยงแบบมีทิศทาง (Directed) จากรูป (b) อธิบายการเชื่อมโยงแบบมีทิศทาง คือ โหนดB ไม่สามารถไปหาโหนดD ได้ แต่โหนดD สามารถมาหาโหนดB ได้
การสร้างกราฟ เมทริกประชิด • เมทริกประชิด คือ จำนวนโหนดที่มีความสัมพันธ์กันในกราฟจำนวน nโหนด และนำโหนดที่มีความสัมพันธ์กันในกราฟไปสร้างอาร์เรย์ขนาดเท่ากับ n x n ข้อมูล • ใช้สำหรับเก็บข้อมูลความสัมพันธ์ของโหนด • ถ้ากำหนดให้ i และ jแทนตำแหน่งของโหนด และนำกราฟในรูป (a) เป็นกราฟแบบมีทิศทางมาเก็บความสัมพันธ์ระหว่างโหนดในอาร์เรย์ซึ่งจะมีรูปในการเก็บข้อมูลดังแสดงในรูป (b) • กำหนดให้ข้อมูลในอาร์เรย์ในตำแหน่งที่ matrix[ i][ j] มีค่าเท่ากับ “1” หมายถึงโหนดiมีการเชื่อมโยงกับโหนดj แต่ถ้ากำหนดให้ matrix[ i][ j] มีค่าเท่ากับ “0” หมายถึงโหนดi ไม่มีการเชื่อมโยงกับโหนดj (a) กราฟแบบมีทิศทาง (b) อาร์เรย์แสดงความความสัมพันธ์ระหว่างโหนด
การสร้างกราฟ เมทริกประชิด • ถ้ากราฟเป็นกราฟแบบน้ำหนัก คือ มีน้ำหนักของเส้นเชื่อมโยงดังแสดงในรูป (a) ข้อมูลในอาร์เรย์จะเปลี่ยนจาก 1 ซึ่งเป็นโหนดที่มีความสัมพันธ์กันเป็นค่าน้ำหนักในการเชื่อมโยงระหว่างโหนดแทน และโหนดไหนไม่มีความสัมพันธ์ระหว่างโหนดจะแทนตัว (a) กราฟไม่มีทิศทางและมีน้ำหนักกราฟ (b) อาร์เรย์แสดงความสัมพันธ์ระหว่างโหนด
การสร้างกราฟ รายการประชิด • รายการประชิด คือ การเก็บรายละเอียดของความเชื่อมโยงในกราฟทั้งแบบมีทิศทางและไม่มีทิศทาง • ใช้โครงสร้างของลิงค์ลิสต์มาเก็บข้อมูลความสัมพันธ์ของกราฟ • ถ้ากราฟมีจำนวนโหนดเท่ากับ nโหนด จะมีโหนดในลิงค์ลิสต์เท่ากับจำนวนโหนดของกราฟ ดังแสดงการเก็บรายการประชิดในรูป (b) เป็นการเก็บความสัมพันธ์ของกราฟแบบมีทิศทางในรูป (a) (a) กราฟแบบทิศทาง (b) รายการประชิดของกราฟแบบมีทิศทาง
การสร้างกราฟ รายการประชิด • การเก็บรายการประชิดของกราฟแบบไม่มีทิศทางและเป็นกราฟแบบมีน้ำหนักกราฟ โดยข้อมูลภายในรายการประชิดจะเก็บน้ำหนักของโหนดไว้ในลิงค์ลิสต์ดังแสดงในรูป (b) (a) กราฟไม่มีทิศทางและมีน้ำหนักกราฟ (b) รายการประชิดของกราฟไม่มีทิศทางและมีน้ำหนักกราฟ
การท่องเข้าไปในกราฟ (Graph Traversals) • การท่องเข้าไปในกราฟจะท่องเข้าไปทุกโหนดและจะหยุดเมื่อถึงโหนดสุดท้ายในกราฟ • ท่องเข้าไปเฉพาะโหนดที่มีการเชื่อมโยงกันเท่านั้น • ถ้าในกราฟประกอบด้วยกราฟแบบลูป จะท่องเข้าไปในโหนดที่เป็นแบบลูปนี้เพียงครั้งเดียว • การท่องเข้าไปในกราฟสามารถท่องเข้าไปได้ทั้งในกราฟแบบมีทิศทางและไม่มีทิศทาง Depth-first Search • การท่องเข้าไปในกราฟแบบ Depth-first Search (DFS) จะใช้แสตกมาช่วยในการจัดการ ตัวอย่างที่ 12.1 โค้ดรหัสเทียมในการท่องเข้าไปกราฟแบบ DFS
การท่องเข้าไปในกราฟ (Graph Traversals) Depth-first Search • จากโค้ดรหัสเทียมการท่องเข้าไปในกราฟแบบ DFS นำไปท่องเข้าไปในกราฟในรูป (a) • แสดงลำดับการทำงานในการเก็บข้อมูลลงในแสตกตามขั้นตอนวิธี DFS ในรูป (b) • มีลำดับในการท่องเข้าไปในกราฟคือ a, b, c, d, g, e, f, h และ i
การท่องเข้าไปในกราฟ (Graph Traversals) Breadth-first Search • การท่องเข้าไปในกราฟแบบ Breadth-First Search (BFS) ได้ใช้คิวมาช่วยในการจัดการการท่องเข้าไปในกราฟ ตัวอย่างที่ 12.2 โค้ดรหัสเทียมในการท่องเข้าไปกราฟแบบ BFS
การท่องเข้าไปในกราฟ (Graph Traversals) Breadth-first Search • จากหลักการท่องเข้าไปในกราฟแบบ BFS นำไปท่องเข้าไปในกราฟในรูป (a) • มีลำดับการทำงานในการเก็บข้อมูลลงในคิวดังแสดงในรูป (b) • ลำดับการท่องเข้าไปในกราฟคือ a, b, f, i, c, e, g, d และ h
การท่องเข้าไปในกราฟ (Graph Traversals) • จากหลักการในการท่องเข้าไปในกราฟคือ DFS และ BFS นำไปท่องเข้าไปในกราฟในรูปที่ (a) • แสดงลำดับการท่องเข้าไปในกราฟแบบ DFS ได้ในรูป (b) • แสดงลำดับการท่องเข้าไปในกราฟแบบ BFS ได้ในรูป (c) (a) ภาพต้นแบบ (b) ท่องเข้าไปในกราฟแบบ DFS (c) ท่องเข้าไปในกราฟแบบ BFS
การนำกราฟไปใช้งาน • กราฟแบบมีทิศทางที่ไม่ใช้กราฟแบบลูป ดังแสดงในรูป มีลำดับของโหนดในกราฟ คือ โหนดaมาก่อน bและ c เป็นต้น เราจะเรียกกราฟที่มีอันดับของโหนดว่า ลำดับโทโปโลยี (Topological order) และถ้ากำหนดให้โหนดx มาก่อนโหนดyทิศทางของเส้นเชื่อมจะมีทิศทางจาก x ไปยัง y
การนำกราฟไปใช้งาน Topological sorting • จากกราฟที่มีลักษณะแบบลำดับโทโปโลยี มีขั้นตอนวิธีในการท่องเข้าไปในกราฟในรูปแบบนี้ คือ Topological sorting • ใช้แสตกมาช่วยในการจัดการท่องเข้าไปในกราฟ ตัวอย่างที่ 12.3 โค้ดรหัสเทียมในการท่องเข้าไปกราฟแบบ Topological sorting
การนำกราฟไปใช้งาน Topological sorting • จากอัลกอริทึมการท่องเข้าไปในกราฟแบบ Topological sorting นำไปท่องเข้าไปในกราฟในรูป (a) • มีลำดับในการท่องเข้าไปในกราฟดังแสดงในรูป (b) • มีลำดับการท่องเข้าไปกราฟคือa, b, g, d, e, f, c (a) (b)
การนำกราฟไปใช้งาน PossibleSpanning Tree • กราฟเป็นแบบไม่มีทิศทางและไม่มีการเชื่อมต่อเป็นแบบลูป ดังแสดงในรูป (a) สามารถใช้หลักการ PossibleSpanning treeในการเลือกเส้นทางเชื่องโยง • การเลือกเส้นทางเชื่อมโยงโหนดภายในกราฟแบบไม่มีทิศทางให้ครบทุกโหนดและให้มีเส้นการเชื่อมโยงน้อยที่สุด ดังแสดงการเชื่อมโยงโหนดภายในกราฟด้วยหลักการ Possible Spanning Tree ในรูป (b) • เส้นปะ หมายถึง เส้นเชื่อมโยงที่ไม่ต้องมีในกราฟก็ได้ เพราะใน Spanning tree ถือว่าทุกโหนดถูกเชื่อมโยงกันครบทุกโหนดแล้ว (a) การเชื่อมโยงโหนดภายในกราฟแบบครบทุกโหนด (b) การเชื่อมต่อโหนดแบบ Possible Spanning tree
การนำกราฟไปใช้งาน PossibleSpanning Tree • ข้อสังเกตกราฟแบบไม่มีทิศทาง • กราฟไม่มีทิศทางมีโหนดnโหนด และมีการเชื่อมต่อระหว่างโหนดน้อยกว่า n - 1 ถ้าในกราฟไม่มีการเชื่อมต่อแบบลูป และจำนวนเส้นเชื่อมโยงระหว่างโหนดน้อยกว่าจำนวนโหนดแสดงว่ามีบ้างโหนดไม่ได้ถูกเชื่อมโยง ดังแสดงในรูป (a) • กราฟไม่มีทิศทางมีโหนดnโหนดและมีการเชื่อมต่อระหว่างโหนดเท่ากับ n - 1 และไม่มีการเชื่อมต่อแบบลูป เป็นรูปแบบการเชื่อมต่อที่เหมาะสมเนื่องจากมีทุกโหนดถูกเชื่อมโยง ดังแสดงในรูป (b) • กราฟไม่มีทิศทางมีโหนดnโหนดและมีการเชื่อมต่อระหว่างโหนดมากกว่า n – 1 และไม่มีการเชื่อมต่อแบบลูป เป็นรูปแบบที่มีเส้นการเชื่อมโยงระหว่างโหนดเกินกว่าจำนวนของโหนด ดังแสดงในรูป (c)
การนำกราฟไปใช้งาน PossibleSpanning Tree • จากหลักการท่องเข้าไปในกราฟของ Possible Spanning tree สามารถนำหลักการท่องเข้าไปกราฟที่กล่าวมาก่อนหน้านี้คือ DFS และ BFS นำมาใช้ร่วมกับ Spanning tree ได้ดังแสดงในขั้นตอนต่อไป
การนำกราฟไปใช้งาน 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)
การนำกราฟไปใช้งาน 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)
การนำกราฟไปใช้งาน Minimum Spanning Tree • ลองนึกถึงในกรณีที่ต้องการเดินสายใยแก้วนำแสงระหว่างเมือง ให้มีระยะของสายที่สั้นที่สุดและต้องครอบคลุมทุกเมืองที่จะเชื่อมโยงเครือข่าย • ก่อนที่จะเดินสายใยแก้วนำแสงได้มีทีมสำรวจกำหนดน้ำหนักในแต่ละเส้นทางที่จะเชื่อมโยงสายดังแสดงในรูปซึ่งเป็นหลักการของ Spanning tree และค่าในการเดินสายใยแก้วนำแสงจะเป็นไปตามน้ำหนักของแต่ละเส้นการเชื่อมโยง • ผลรวมของค่าในการเดินสายจะเรียกว่า Cost of the spanning tree ซึ่งเป็นผลรวมของน้ำหนักของทุกเส้นการเชื่อมโยง • เพื่อให้การเดินสายใยแก้วนำแสงมีความคุมค่ามากที่สุด คือ การเดินสายให้ได้สั้นที่สุดและครอบคลุมทุกเมืองจะต้องมีผลรวมของน้ำหนักของเส้นการเชื่อมโยงน้อยที่สุดด้วยเช่นกัน • เรียกขั้นตอนวิธีนี้ว่า Minimum Spanning tree ดังแสดงตัวอย่างในการหาเส้นทางตามน้ำหนักให้มีค่าน้อยที่สุดคือ ขั้นตอนวิธีแบบ Prim
การนำกราฟไปใช้งาน Minimum Spanning Tree ตัวอย่างที่ 12.6 โค้ดรหัสเทียมในการท่องเข้าไปกราฟแบบ Prim
การนำกราฟไปใช้งาน Minimum Spanning Tree • แสดงการท่องเข้าไปในกราฟด้วยหลักการของ Prim
การนำกราฟไปใช้งาน Shortest Paths • การหาเส้นทางที่สั้นที่สุด (Shortest Paths) คือ การหาเส้นทางระหว่างโหนดสองโหนดที่มีเส้นทางที่สั้นที่สุดตามน้ำหนักของเส้นทางที่จะผ่าน และต้องมีผลรวมของน้ำหนักน้อยที่สุดด้วย • ตัวอย่างในการหาเส้นทางที่ดังแสดงในรูป (a) • จะหาเส้นทางที่สั้นที่สุดจากโหนด0 ไปยังโหนด1 แต่จากรูป (a) ไม่สามารถเลือกเส้นทางจาก 0 ไป 1 ได้เนื่องจากมีค่าน้ำหนักเท่ากับ 8 ซึ่งมีค่าน้ำหนักมากกว่าเส้นทางจาก 0 ไป 4 ไป 2 และไป 1 โดยมีผลร่วมของน้ำหนักเท่ากับ 7 • แสดงอาร์เรย์ของโหนดประชิดของรูป (a) ในรูป 1(b) โดยโหนดที่เป็นโหนดประชิดกันจะมีน้ำหนักกำกับไว้ในเมทริกแต่ถ้าไม่ใช่โหนดประชิดกันจะมีค่าเท่ากับ (a) กราฟมีทิศทางและมีน้ำหนักกราฟ (b) อาร์เรย์แสดงความสัมพันธ์ระหว่างโหนด
การนำกราฟไปใช้งาน Shortest Paths ตัวอย่างที่ 12.7 โค้ดรหัสเทียมในการหาเส้นทางที่สั้นที่สุด
การนำกราฟไปใช้งาน 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)
การนำกราฟไปใช้งาน 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)
การนำกราฟไปใช้งาน 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และหยุดการทำงาน
การนำกราฟไปใช้งาน Kruskal’sAlgorithm • Kruskal’s Algorithm เป็นอัลกอลิทึมเกี่ยวกับการหาเส้นทางที่สั้นที่สุดในกราฟที่มีน้ำหนัก • Kruskal’s Algorithm จะหาเซตย่อยของเส้นเชื่อมโยงโหนดภายในกราฟที่เชื่อมโยงไปยังทุกโหนดภายในกราฟ • ผลรวมของน้ำหนักเส้นโยงภายในกราฟจะค่าที่น้อยที่สุด ตัวอย่างที่ 12.8 โค้ดรหัสเทียมในการหาเส้นทางที่สั้นที่สุดด้วย Kruskal’s Algorithm
การนำกราฟไปใช้งาน Kruskal’sAlgorithm
การนำกราฟไปใช้งาน Dijkstra’sAlgorithm • Dijkstra’s Algorithm ใช้ในการหาเส้นทางที่สั้นที่สุดระหว่างสองเมืองในแผนที่ • เริ่มจากจุดเริ่มต้นมีค่าเป็น 0 ส่วนเมืองต่างให้มีค่าเป็นอินฟีนิตี้(Infinity:∞) • ต่อไปเริ่มหาเส้นทางไปทีละเมืองที่ยังไม่เคยท่องเข้าไป • ค่าผลรวมเส้นทางระหว่างเมืองที่ยังเคยท่องเข้าไปกับเส้นทางเดิม ให้เลือกเส้นทางที่สั้นที่สุดไปยังเมืองที่ไม่เคยท่องเข้าไป ซึ่งเป็นเส้นทางที่สั้นที่สุดพร้อมทั้งกำหนดให้เมืองที่ไม่ท่องเข้าไปนี้เป็นเมืองที่ถูกท่องเข้าไปแล้ว • ทำอย่างนี้จนถึงเมืองปลายทางที่ต้องการไปถึง ซึ่งเป็นเส้นทางที่สั้นที่สุดจากเมืองต้นทางไปถึงเมืองปลายทาง
การนำกราฟไปใช้งาน Dijkstra’sAlgorithm ตัวอย่างที่ 12.9 โค้ดรหัสเทียมในการหาเส้นทางที่สั้นที่สุดด้วย Dijkstral’s Algorithm
การนำกราฟไปใช้งาน Dijkstra’sAlgorithm
การนำกราฟไปใช้งาน Dijkstra’sAlgorithm
การนำกราฟไปใช้งาน Dijkstra’sAlgorithm
การนำกราฟไปใช้งาน • กราฟ (Graph) เป็นโครงสร้างในการเก็บข้อมูลแบบไม่เป็นเชิงเส้น ซึ่งแตกต่างจากการเก็บข้อมูลแบบทรี กราฟเป็นโครงสร้างแบบระหว่างสองโหนดและเชื่อมความสัมพันธ์ระหว่างสองโหนดด้วยเส้นเชื่อมโยง • โครงสร้างการเก็บข้อมูลแบบกราฟพัฒนาขึ้นมาเพื่อหาเส้นทางที่สั้นที่สุดในการเดินทาง หรือการใช้ทรัพยากรที่เหมาะสมที่สุดที่อ้างอิงได้ทุกเมือง