1
一般的な重み付き無向グラフから最適な並列化を見つける
重なり合う画像の「ブレンド」セットの問題を解決しています。これらのセットは、次のような無向の重み付きグラフで表すことができます。 各ノードは画像を表します。重なっている画像はエッジで接続されています。エッジの重みはオーバーラップエリアのサイズを表します(大きいオーバーラップをブレンドすると、全体的な品質が向上します)。 アルゴリズムは通常、エッジを削除します。順次または並行して実行できます。ただし、ブレンドが発生すると、ノードがマージされ、グラフ構造が変化します。したがって、並列化は、それら自体が重複していない接続されたコンポーネントでのみ可能です! このような重複しないコンポーネントは、DBとFEGです。これらのコンポーネントでブレンドアルゴリズムを安全に並行して実行できます。結果は次のグラフになります(マージされたノードは緑色で表示されます)。 これで、2つの接続されたコンポーネントがオーバーラップしている(コンポーネント間に直接エッジがある)ため、これ以上の並列化は不可能です。 アルゴリズムの並列バージョンは次のようになります。 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. トリッキーな部分は最初のステップです:接続されたコンポーネントの最良のセットを見つける方法? 1つの方法は、特定の反復でコンポーネントの最大数を単純に見つける貪欲なアルゴリズムです。貪欲なアルゴリズムは、最初は並列化を最大化しますが、後で多くの反復を犠牲にします。 最適なソリューションは、並列化を最大化し、同時に反復回数を最小化するために、各反復で適切な量の接続コンポーネントをもたらすことです(最適化には2つの変数があります)。 私は、バックトラッキング以外の最適化アルゴリズム、つまり可能なすべての進化の空間を検索し、最大の並列化を持つものを選択することは考えられません。 エッジの重みは無視できますが、大きいバージョンのブレンドには時間がかかるため、アルゴリズムの改良版ではそれが考慮される場合があります(たとえば、サイズ200のエリアのブレンドには、サイズ100の2つのエリアの約2倍の時間がかかります)。重みを考慮に入れると、コンポーネントを選択する際の戦略が向上する可能性があります(アルゴリズムの全体的な実行時間の高速化)。 最大の並列化と最小の反復回数が得られるようにグラフの一部を選択する最良の戦略を見つける、そのような最適化アルゴリズムの手がかりはありますか?