ฉันกำลังแก้ไขปัญหาของชุดภาพซ้อนกัน ชุดเหล่านี้สามารถแสดงโดยกราฟถ่วงน้ำหนักแบบไม่ระบุทิศทางเช่นชุดนี้:
แต่ละโหนดแสดงรูปภาพ ภาพซ้อนทับเชื่อมต่อกันด้วยขอบ น้ำหนักขอบหมายถึงขนาดพื้นที่ทับซ้อน ( การทับซ้อนที่ใหญ่กว่าจะนำไปสู่คุณภาพโดยรวมที่ดีขึ้นในไม่ช้า )
อัลกอริทึมโดยทั่วไปจะลบขอบ มันสามารถทำตามลำดับหรือขนาน อย่างไรก็ตามเมื่อการผสมเกิดขึ้นโหนดจะรวมและโครงสร้างกราฟเปลี่ยนแปลง ดังนั้นการทำขนานจึงเป็นไปได้เฉพาะกับส่วนประกอบที่เชื่อมต่อซึ่งตัวมันเองไม่ได้ทับกัน!
ส่วนประกอบที่ไม่ทับซ้อนกันเช่น DB และ FEG เราสามารถเรียกใช้อัลกอริทึมการผสมบนส่วนประกอบเหล่านี้อย่างปลอดภัยในแบบขนาน ผลลัพธ์คือกราฟต่อไปนี้ (โหนดที่ผสานจะแสดงเป็นสีเขียว):
ขณะนี้ไม่สามารถทำการขนานได้อีกต่อไปเนื่องจากส่วนประกอบที่เชื่อมต่อสองส่วนซ้อนกัน
อัลกอริทึมรุ่นขนานจะมีลักษณะดังนี้:
1. Find connected components (no two are connected directly) and create task for each.
2. Run the tasks in parallel.
3. Update graph.
4. Until single node remains, continue with 1.
ส่วนที่ยุ่งยากนั้นเป็นขั้นตอนแรก: วิธีการค้นหาส่วนประกอบที่เชื่อมต่อที่ดีที่สุดได้อย่างไร?
วิธีหนึ่งอาจเป็นอัลกอริทึมแบบโลภที่จะค้นหาส่วนประกอบจำนวนมากที่สุดในการคำนวณซ้ำ อัลกอริทึมโลภจะเพิ่มความขนานในจุดเริ่มต้น แต่ด้วยค่าใช้จ่ายของการทำซ้ำหลายครั้งในภายหลัง
ทางออกที่ดีที่สุดอาจนำส่วนประกอบที่เชื่อมต่อมาจำนวนมากในแต่ละการวนซ้ำเพื่อเพิ่มการขนานและลดจำนวนการวนซ้ำในเวลาเดียวกัน (ดังนั้นจึงมีตัวแปรสองตัวในการปรับให้เหมาะสม)
ฉันไม่สามารถนึกถึงอัลกอริธึมการเพิ่มประสิทธิภาพอื่น ๆ ที่นอกเหนือจากการย้อนรอยนั่นคือพื้นที่การค้นหาของวิวัฒนาการที่เป็นไปได้ทั้งหมดและเลือกอันที่มีความขนานสูงสุด
น้ำหนักขอบอาจถูกเพิกเฉย แต่อัลกอริทึมรุ่นที่ปรับปรุงแล้วอาจนำมาพิจารณาเนื่องจากพื้นที่ขนาดใหญ่ต้องใช้เวลามากกว่าในการผสมผสาน (เช่นพื้นที่ขนาด 200 จะใช้เวลาประมาณสองเท่าในการผสมผสานกว่าสองพื้นที่ที่มีขนาด 100) การคำนึงถึงน้ำหนักอาจนำไปสู่กลยุทธ์ที่ดีกว่าในการเลือกส่วนประกอบ (เร็วขึ้นโดยรวมของอัลกอริทึม)
คุณมีเบาะแสใด ๆ สำหรับอัลกอริธึมการเพิ่มประสิทธิภาพดังกล่าวซึ่งค้นหากลยุทธ์ที่ดีที่สุดในการเลือกส่วนของกราฟเพื่อให้มีการขนานสูงสุดและจำนวนการทำซ้ำขั้นต่ำที่สุด