是否有办法同时实现二进制搜索算法(或者理论上是否可行)?我猜这个答案很可能是因为两个原因:
但是,我想在这方面做一些澄清(如果有可能,还有任何链接或示例?)
答案 0 :(得分:1)
我认为你可以找到答案!要并行化,必须有一些可以分割的工作。在bin搜索的情况下,没有任何东西可以被分割和并行化。 bin-search进入值数组的中间。这项工作不可分割。等等......直到找到解决方案。
您认为哪些内容可以并行化?
答案 1 :(得分:1)
如果您有n个工作线程,则可以将数组拆分为n个段并同时运行n个二进制搜索,并在结果准备好后合并。除了这个廉价的技巧,我没有看到引入并行性的明显方法。
答案 2 :(得分:1)
起初,二进制搜索看起来完全不平行。但请注意,只有三种可能的结果:
所以我们开始三个并行过程:
一旦我们知道第一个结果,我们就可以杀死那个不会找到元素的结果。但与此同时,在正确位置搜索的过程使搜索率翻了一番,即目前的加速比例是可能的3。
当然,如果您拥有超过3个核心,则可以推广这种方法。重要的是,这种思维方式是在硬件内部完成的。例如,查看进位前瞻加法器。
答案 3 :(得分:1)
你总是可以尝试一个不完全二分的搜索,基本上如果你有n个核心,那么你可以将数组拆分成n + 1个。从那里你搜索每个“切割点”并查看该值是大于还是小于切割点,这导致您拥有原始搜索空间的五分之一而不是一半,因为您可以选择一个较小的部分。