我有一个结构,看起来很像一个图,但我可以对它进行"排序"。因此,我可以有两个等价的图,但一个是排序的,而不是另一个。我的目标是计算最小优势集(使用适合我的特定问题的自定义算法,所以请不要链接到其他"有效"算法(。
问题是,我搜索大小为一、二等的优势集,直到找到一个。如果不存在大小为i
的主集合,则使用排序图的效率要高得多。如果有,使用未排序的图会更好。
我考虑过使用线程/多处理,这样就可以同时探索两个图,一旦其中一个找到了答案(没有解决方案或特定的解决方案(,另一个就会停止,我们进入下一步或结束算法。这并没有起到作用,只会使处理速度慢得多(尽管与使用没有线程/多处理的最佳图相比,我预计每一步所需的时间只会增加一倍(。
我不知道为什么这不起作用,我想知道是否有更好的方法,甚至不需要使用线程/多处理,有线索吗?
如果你不想要算法建议,那么懒惰评估似乎是最好的选择。
在数据结构中设置二者,以便使用class_instance.next_step(work_to_do_this_step)
,其中类实例是一种图类型的解算器。你需要两个。你可以让每个图移动一个";步骤";(无论你定义了什么样的步骤(前进。通过仔细选择(可能根据进展情况动态选择(步骤是什么,您可以有效地在排序图方法和未排序图方法上交替花费多少工作/时间。当然,只有当其中一种算法至少有可能在另一种算法之前完成时,这才有用。
理论上,如果你可以独立地定义这些步骤是什么,那么你可以将工作分开并行运行,但重要的是,每个进程/线程所做的"工作"量大致相同;工作;所以他们都差不多在同一时间完成。尽管为这类事情编写并行算法可能有点棘手。
听起来你没有做你描述的事情。也许你在等待这两件事以某种方式结束?试着这样做,看看时间是否会改变。