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

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


สมมติว่าเราได้รับกราฟและขอให้ค้นหา 'Minimum Spanning Tree' (MST) จากกราฟนั้น MST ของกราฟเป็นส่วนย่อยของกราฟแบบถ่วงน้ำหนักซึ่งมีจุดยอดทั้งหมดอยู่และเชื่อมต่อกัน และไม่มีวงจรในส่วนย่อย MST เรียกว่าค่าต่ำสุด เนื่องจากน้ำหนักขอบรวมของ MST เป็นค่าต่ำสุดที่เป็นไปได้จากกราฟ ดังนั้น ในที่นี้ เราใช้อัลกอริทึม MST ของ Prim และค้นหาน้ำหนักขอบทั้งหมดของ MST จากกราฟที่กำหนด

ดังนั้นหากอินพุตเป็นแบบ

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

จำนวนจุดยอด (n) คือ 4 และเริ่มจุดยอด (s) =3 จากนั้นผลลัพธ์จะเป็น 14

MST จากกราฟนี้จะเป็น −

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

น้ำหนักขอบรวมของ MST นี้คือ 14

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดฟังก์ชัน mst_find() นี่จะใช้เวลา G, s
    • ระยะทาง :=รายการใหม่ของขนาด G ที่เริ่มต้นด้วยค่าลบอนันต์
    • ระยะทาง[s] :=0
    • itr :=รายการใหม่ของขนาด G เริ่มต้นด้วยค่า False
    • ค :=0
    • ในขณะที่ True ทำ
      • min_weight :=อินฟินิตี้
      • m_idx :=-1
      • สำหรับ i ในช่วง 0 ถึงขนาด G ให้ทำ
        • ถ้า itr[i] เหมือนกับ False แล้ว
          • ถ้าระยะทาง[i]
          • min_weight :=ระยะทาง[i]
          • m_idx :=ฉัน
    • ถ้า m_idx เหมือนกับ -1 แล้ว
      • ออกมาจากวงจร
    • c :=c + min_weight
    • itr[m_idx] :=จริง
    • สำหรับแต่ละคู่ i, j ในค่าของ G[m_idx], do
      • ระยะทาง[i] :=ระยะทางขั้นต่ำ[i], j
  • คืนค
  • G :=แผนที่ใหม่ที่มีแผนที่อื่นอีก n แผนที่
  • สำหรับแต่ละรายการในขอบ ทำ
    • u :=item[0]
    • v :=item[1]
    • w :=item[2]
    • u :=u - 1
    • v :=v - 1
    • min_weight =นาที (G[u, v], w)
    • G[u, v] :=min_weight
    • G[v, u] :=min_weight
  • ส่งคืน mst_find(G, s)
  • ตัวอย่าง

    ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

    def mst_find(G, s):distance =[float("inf")] * len(G) distance[s] =0 itr =[False] * len(G) c =0 while True:min_weight =float("inf") m_idx =-1 for i in range(len(G)):if itr[i] ==False:if distance[i]  

    อินพุต

    4, [(1, 2, 5), (1, 3, 5), (2, 3, 7), (1, 4, 4)], 3

    ผลลัพธ์

    14