我正在解决“融合”重叠图像集的问题。这些集合可以由无向加权图表示,例如:
每个节点代表一个图像。重叠的图像通过边缘连接。边缘权重代表重叠区域的大小(更快混合更大的重叠会导致更好的整体质量)。
该算法通常去除边缘。它可以顺序执行或并行执行。但是,发生混合时,节点会合并,并且图形结构也会更改。因此,只有在自身不重叠的连接组件上才可以并行化!
这样的不重叠组件是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的区域花费大约两倍的时间进行混合)。考虑权重可能会导致选择组件时采用更好的策略(算法的整体运行时间更快)。
对于这种优化算法,您是否有任何线索,可以找到选择图的各个部分的最佳策略,以便最大程度地实现并行化并减少迭代次数?