Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

ความแตกต่างระหว่างอัลกอริทึมของ Prim และ Kruskal


ในโพสต์นี้ เราจะเข้าใจความแตกต่างระหว่างอัลกอริธึมของ Prim และ Kruskal

อัลกอริทึมของ Kruskal สำหรับ Mininum Spanning Tree (MST)

  • เมื่อให้กราฟที่เชื่อมต่อและไม่มีทิศทาง ต้นไม้ขยายของกราฟดังกล่าวคือกราฟย่อย ซึ่งเป็นต้นไม้ที่เชื่อมจุดยอดทั้งหมด
  • กราฟเดียวสามารถมีต้นไม้ทอดยาวได้หลายต้น
  • แผนภูมิที่ทอดข้ามขั้นต่ำ (MST) (หรือเรียกอีกอย่างว่าแผนภูมิขยายน้ำหนักขั้นต่ำ) สำหรับกราฟที่ถ่วงน้ำหนัก เชื่อมต่อและไม่มีทิศทางคือแผนภูมิแบบขยายที่มีน้ำหนักน้อยกว่าหรือเท่ากับน้ำหนักของแผนภูมิที่ทอดข้ามต้นไม้อื่นๆ ทุกต้น
  • น้ำหนักของต้นไม้ขยายจะกำหนดโดยการเพิ่มน้ำหนักที่เกี่ยวข้องกับทุกขอบของต้นไม้ที่ขยาย
  • สร้างแผนผังระยะห่างขั้นต่ำได้จากจุดยอดที่มีน้ำหนักต่ำสุดในกราฟ
  • โหนดหนึ่งถูกสำรวจเพียงครั้งเดียว
  • ทำงานได้อย่างรวดเร็วในกราฟที่กระจัดกระจาย
  • ความซับซ้อนของเวลาคือ O(E log V) โดยที่ V คือจำนวนจุดยอด
  • มันสามารถทำงานกับส่วนประกอบที่ไม่ได้เชื่อมต่อได้เช่นกัน

ขั้นตอนในการค้นหา MST โดยใช้อัลกอริทึมของ Kruskal:

  • เรียงลำดับขอบจากน้อยไปมากจากน้ำหนักที่เกี่ยวข้อง
  • เลือกขอบที่เล็กที่สุด
  • ตรวจดูว่าเกิดวงรอบกับต้นไม้ขยายที่ก่อตัวขึ้นจนถึงจุดนั้นหรือไม่
  • ถ้าวัฏจักรไม่ได้เกิดขึ้น ก็ต้องรวมขอบนี้ด้วย
  • มิฉะนั้นก็ทิ้งได้
  • ทำซ้ำขั้นตอนที่ 2,3,4 จนกว่าต้นไม้ขยายจะมีขอบ V-1

อัลกอริธึมของ Prim Mininum Spanning Tree (MST)

  • สิ่งนี้คล้ายกับอัลกอริทึมของ Kruskal นั่นคือมันเป็นอัลกอริทึมที่โลภ
  • มันเริ่มต้นด้วยต้นไม้ที่ทอดยาวว่างเปล่า รักษาจุดยอดสองชุดไว้
  • ชุดแรกจะมีจุดยอดที่รวมอยู่ใน MST แล้ว ในขณะที่ชุดอื่นๆ จะมีจุดยอดที่ยังไม่ได้รวมไว้
  • ในทุกขั้นตอน อัลกอริธึมจะพิจารณาขอบทั้งหมดที่จะเชื่อมต่อทั้งสองชุด จากนั้นจะเลือกขอบน้ำหนักขั้นต่ำจากขอบเหล่านี้
  • หลังจากขั้นตอนนี้ อัลกอริทึมจะย้ายไปยังจุดสิ้นสุดอื่นของขอบของชุดที่มี MST
  • สร้างแผนผังระยะห่างขั้นต่ำจากจุดยอดใดก็ได้ในกราฟ
  • โหนดหนึ่งเดินทางหลายครั้งเพื่อให้ได้ค่าระยะทางต่ำสุด
  • มันมีความซับซ้อนของเวลาของ O(V2) โดยที่ V คือจำนวนจุดยอด ความซับซ้อนในครั้งนี้สามารถเพิ่มเป็น O(E + log V) ได้โดยใช้ Fibonacci heaps
  • ทำงานได้อย่างรวดเร็วในกราฟหนาแน่น
  • ให้ส่วนประกอบที่เชื่อมต่อ และใช้งานได้กับกราฟที่เชื่อมต่อเท่านั้น

ขั้นตอนในการค้นหา MST โดยใช้อัลกอริทึมของ Prim:

  • มีการสร้าง mstSet ซึ่งติดตามจุดยอดที่รวมอยู่ใน MST แล้ว
  • ค่าคีย์ถูกกำหนดให้กับจุดยอดทั้งหมดของกราฟอินพุต
  • ค่าคีย์ถูกกำหนดในขั้นต้นเป็น 'INFINITE'
  • ค่าคีย์ 0 ถูกกำหนดให้กับจุดยอดแรกเพื่อให้เลือกได้ก่อน
  • เมื่อ mstSet ไม่รวมจุดยอดทั้งหมด จะมีการปฏิบัติตามขั้นตอนด้านล่าง
    • มีการเลือกจุดยอด 'u' ซึ่งไม่มีอยู่ใน mstSet และยังมีค่าคีย์ขั้นต่ำอีกด้วย
    • ตอนนี้ 'u' รวมอยู่ใน mstSet แล้ว
    • ค่าคีย์ของจุดยอดที่อยู่ติดกันทั้งหมดของ 'u' ได้รับการอัปเดตแล้ว
    • สามารถทำได้โดยการวนซ้ำจุดยอดที่อยู่ติดกันทั้งหมด
    • สำหรับทุกจุดยอดที่อยู่ติดกัน 'v' หากน้ำหนักของขอบ 'u'-'v' น้อยกว่าค่าคีย์ก่อนหน้าของ 'v' ค่าคีย์จะได้รับการอัปเดตเป็นน้ำหนักของ 'u-v '.