รุ่นที่หนาแน่นของอัลกอริทึมของ Kruskal นี้เป็นที่รู้จักกันดีหรือไม่?


15

ประมาณหนึ่งปีที่ผ่านมาเพื่อนและฉันคิดถึงวิธีการใช้อัลกอริทึมของ Kruskal สำหรับกราฟที่มีความหนาแน่นสูงกว่าผูกไว้โดยทั่วไป โดยเฉพาะเราจะได้รับในทุกกรณีซึ่งคล้ายกับ Prim's เมื่อนำมาใช้โดยใช้เมทริกซ์ adjacencyΘ ( n 2 )O(ม.เข้าสู่ระบบม.)Θ(n2)

ฉันโพสต์เล็กน้อยเกี่ยวกับอัลกอริทึมในบล็อกของฉันรวมถึงรหัส C ++ และการวัดประสิทธิภาพ แต่นี่เป็นแนวคิดทั่วไป:

  • รักษาหนึ่งโหนดตัวแทนสำหรับแต่ละองค์ประกอบที่เชื่อมต่อ เริ่มแรกโหนดทั้งหมดเป็นตัวแทนของตัวเอง

  • รักษาเวกเตอร์dist[i]ดังกล่าวว่าสำหรับทุกองค์ประกอบมีองค์ประกอบข้ามขอบเหตุการณ์ที่เกิดขึ้นจะมีน้ำหนักเบาii

  • เมื่อค้นหาขอบที่เบาที่สุดที่ข้ามพาร์ทิชันให้หาiน้ำหนักที่ลดลงdist[i]ในเวลาเชิงเส้น

  • เมื่อเข้าร่วมสององค์ประกอบและปรับเปลี่ยนถ้อยคำเมทริกซ์เช่นว่าตอนนี้สำหรับทุกส่วนkและเครื่องหมายฉันไม่ได้เป็นตัวแทนขององค์ประกอบที่เชื่อมต่ออีกต่อไป ( ตอนนี้เหลือเพียงjเท่านั้น)c j A A i , k = min { A i , k , A j , k } k i jผมJAAผม,k=นาที{Aผม,k,AJ,k}kผมJ

การหดตัวของขอบที่เบาที่สุดและการค้นหาของขอบดังกล่าวสามารถทำได้ในเวลาเชิงเส้น เราทำเช่นนี้ครั้งเพื่อค้นหา MST จำเป็นต้องมีการทำบัญชีเล็กน้อยเพื่อหาขอบที่เราต้องการเพิ่มใน MST จริง ๆ แต่ไม่ได้เพิ่มความซับซ้อน ดังนั้นรันไทม์เป็น2) การดำเนินการเป็นเพียงสองสามลูปΘ ( n 2 )n-1Θ(n2)

Kruskal รุ่นนี้เป็นที่รู้จักกันดีในวรรณคดีหรือไม่?

คำตอบ:


19

ฉันไม่แน่ใจเกี่ยวกับวิธีการนี้โดยเฉพาะสำหรับการบรรลุเวลาแต่มีวิธีการที่แตกต่างกันสองวิธีสำหรับการดำเนินการ Kruskal ในเวลาในกระดาษของฉัน "การจัดกลุ่มลำดับชั้นอย่างรวดเร็ว "(SODA 1998, arXiv: cs.DS / 9912014 และ J. อัลกอริทึมทดลอง 2000):O(n2)O(n2)

  1. ใช้ Prim – Dijkstra – Jarníkแทนแล้วเรียงลำดับขอบเพื่อให้ได้ลำดับการแทรกที่ Kruskal จะให้หรือ

  2. ใช้โครงสร้างข้อมูลคู่ที่ใกล้เคียงที่สุดของควอดทรีที่อธิบายไว้ในกระดาษดู Kruskal เป็นขั้นตอนการจัดกลุ่ม agglomerative มาตรฐานที่เรารวมสองคลัสเตอร์ที่ใกล้เคียงที่สุดเข้าไปในซูเปอร์คลัสเตอร์ในแต่ละขั้นตอนโดยกำหนด "ใกล้เคียงที่สุด" ที่สุด .

โซลูชันที่ 2 มีความคล้ายคลึงกับสิ่งที่คุณอธิบาย แต่รายละเอียดของการติดตามระยะทางระหว่างกลุ่มนั้นแตกต่างกันเล็กน้อย คุณเก็บ minima แถวที่ชาญฉลาดของเมทริกซ์ระยะห่างของคลัสเตอร์ช่วยให้คุณสามารถสแกนรายการของแถว -minima นี้ในเวลาเชิงเส้นเพื่อค้นหาค่าต่ำสุดของโลกในขณะที่กระดาษของฉันซ้อน quadtree บนเมทริกซ์เดียวกันและติดตามค่าต่ำสุดในแต่ละ สี่เหลี่ยมจตุรัส วิธีการของคุณง่ายขึ้น แต่มีความยืดหยุ่นน้อยลงสำหรับปัญหาคู่ที่ใกล้เคียงแบบไดนามิกอื่น ๆ (ขึ้นอยู่กับความจริงที่ว่าการรวมสองกลุ่มทำให้ระยะทางของพวกเขากับกลุ่มอื่นลดลงจริงสำหรับปัญหานี้ แต่ไม่จำเป็นสำหรับคนอื่น ๆ )

ขณะที่ผมเขียนในปี 2011 ในบทความวิกิพีเดียในขั้นตอนวิธีการห่วงโซ่ที่ใกล้ที่สุดเพื่อนบ้านอัลกอริทึมที่ยังสามารถนำมาใช้ในการดำเนินการใน Kruskalเวลา อย่างไรก็ตาม (ซึ่งแตกต่างจากโปรแกรมอื่น ๆ บางส่วนของขั้นตอนวิธีการห่วงโซ่ที่ใกล้ที่สุด-เพื่อนบ้าน) คุณไม่ได้รับเงินฝากออมทรัพย์พื้นที่เพื่อ (เช่นวิธีการควอดทรีและวิธีการของคุณ) พื้นที่ยังคงเป็น2) ในทางตรงกันข้ามการจัดเรียง Prim + สามารถใช้พื้นที่ เกินกว่าที่จำเป็นในการจัดเก็บอินพุตO(n2)O(n2)O(n)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.