Üst üste binen görüntülerin "harmanlanması" sorununu çözüyorum. Bu kümeler, bunun gibi yönlendirilmemiş ağırlıklı grafikle gösterilebilir:
Her düğüm bir görüntüyü temsil eder. Çakışan görüntüler bir kenar ile bağlanır. Kenar ağırlığı örtüşme alanı boyutunu temsil eder ( daha büyük örtüşmeyi daha erken harmanlamak daha iyi genel kaliteye yol açar ).
Algoritma genellikle kenarları kaldırır. Sıralı olarak veya paralel olarak yapabilir. Ancak, karıştırma meydana geldiğinde, düğümler birleşir ve grafik yapısı değişir. Dolayısıyla, paralelleştirme yalnızca kendileri çakışmayan bağlı bileşenlerde mümkündür!
Bu tür örtüşmeyen bileşenler DB ve FEG'dir. Karıştırma algoritmasını bu bileşenler üzerinde güvenli bir şekilde paralel olarak çalıştırabiliriz. Sonuç aşağıdaki grafiktir (birleştirilmiş düğümler yeşil renkte görüntülenir):
Artık başka bir paralelleştirme mümkün değildir çünkü bağlı iki bileşen üst üste binmektedir (aralarında doğrudan bir kenar vardır).
Algoritmanın paralel sürümü şöyle görünecektir:
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.
Zor kısım ilk adımdır: En iyi bağlı bileşen seti nasıl bulunur?
Bunun bir yolu, belirli bir yinelemede en fazla sayıda bileşeni bulan açgözlü bir algoritma olacaktır. Açgözlü algoritma başlangıçta paralelleştirmeyi en üst düzeye çıkaracak, ancak daha sonra birçok yinelemenin maliyetiyle.
Optimal çözüm, paralelleştirmeyi en üst düzeye çıkarmak ve aynı anda yineleme sayısını en aza indirmek için her bir yinelemede iyi miktarda bağlı bileşen getirmek olabilir (bu nedenle optimizasyonda iki değişken vardır).
Geri izleme dışında herhangi bir optimizasyon algoritması düşünemiyorum, yani tüm olası evrimlerin arama alanı ve maksimum paralelleştirme ile olanı seçin.
Kenar ağırlıkları göz ardı edilebilir, ancak daha büyük alanların harmanlanması daha uzun sürdüğü için algoritmanın geliştirilmiş sürümü bunu dikkate alabilir (örneğin, 200 büyüklüğündeki alan, 100 büyüklüğündeki iki alandan yaklaşık iki kat daha fazla harcanır). Ağırlıkları hesaba katmak, bileşenleri seçmek için daha iyi bir stratejiye yol açabilir (algoritmanın daha hızlı çalışma süresi).
Maksimum optimizasyon ve minimum yineleme sayısı olacak şekilde grafiğin parçalarını seçmek için en iyi stratejiyi bulan optimizasyon algoritması için ipuçlarınız var mı?