Saya sedang memecahkan masalah "memadukan" set gambar yang tumpang tindih. Set ini dapat diwakili oleh grafik tertimbang yang tidak diarahkan seperti yang ini:
Setiap node mewakili gambar. Gambar yang tumpang tindih dihubungkan oleh tepi. Bobot tepi mewakili ukuran area yang tumpang tindih ( pencampuran yang lebih besar tumpang tindih lebih cepat menghasilkan kualitas keseluruhan yang lebih baik )
Algoritme umumnya menghilangkan tepi. Dapat melakukannya secara berurutan atau paralel. Namun, ketika terjadi blending, node bergabung dan struktur grafik berubah. Jadi paralelisasi hanya dimungkinkan pada komponen yang terhubung yang tidak tumpang tindih!
Komponen yang tidak tumpang tindih tersebut adalah DB dan FEG. Kita dapat menjalankan algoritma blending pada komponen-komponen ini dengan aman secara paralel. Hasilnya adalah grafik berikut (node yang digabungkan ditampilkan dalam warna hijau):
Sekarang tidak ada paralelisasi lebih lanjut yang mungkin karena dua komponen yang terhubung tumpang tindih (mereka memiliki tepi langsung di antara mereka).
Versi paralel dari algoritma akan terlihat seperti ini:
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.
Bagian yang sulit adalah langkah pertama: Bagaimana menemukan komponen terbaik yang terhubung?
Salah satu caranya adalah algoritma serakah yang hanya menemukan jumlah komponen terbesar pada iterasi yang diberikan. Algoritma serakah akan memaksimalkan paralelisasi di awal tetapi dengan mengorbankan banyak iterasi kemudian.
Solusi optimal mungkin membawa jumlah komponen terhubung yang baik di setiap iterasi untuk memaksimalkan paralelisasi dan meminimalkan jumlah iterasi pada saat yang sama (jadi ada dua variabel dalam optimasi).
Saya tidak dapat memikirkan algoritma pengoptimalan selain dari backtracking, yaitu ruang pencarian dari semua kemungkinan evolusi dan pilih satu dengan paralelisasi maksimum.
Bobot tepi dapat diabaikan, tetapi versi peningkatan algoritme dapat mempertimbangkannya karena area yang lebih besar membutuhkan lebih banyak waktu untuk berbaur (misalnya area ukuran 200 akan memakan waktu dua kali lebih lama untuk berbaur daripada dua area ukuran 100). Mempertimbangkan bobot dapat mengarah pada strategi yang lebih baik dalam memilih komponen (waktu keseluruhan algoritma yang lebih cepat).
Apakah Anda memiliki petunjuk untuk algoritme pengoptimalan seperti itu, yang menemukan strategi terbaik memilih bagian-bagian grafik sehingga ada paralelisasi maksimum dan jumlah iterasi minimum?