并发二进制斩波算法

时间:2011-01-27 01:10:44

标签: concurrency binary-search

是否有办法同时实现二进制搜索算法(或者理论上是否可行)?我猜这个答案很可能是因为两个原因:

  • 尽管有很多谷歌搜索,我还没有找到任何并发实现
  • 二进制斩波的每个迭代周期取决于前一个的值,因此即使每个迭代都是一个单独的线程,它也必须阻塞,直到前一个完成,使其成为顺序。

但是,我想在这方面做一些澄清(如果有可能,还有任何链接或示例?)

4 个答案:

答案 0 :(得分:1)

我认为你可以找到答案!要并行化,必须有一些可以分割的工作。在bin搜索的情况下,没有任何东西可以被分割和并行化。 bin-search进入值数组的中间。这项工作不可分割。等等......直到找到解决方案。

您认为哪些内容可以并行化?

答案 1 :(得分:1)

如果您有n个工作线程,则可以将数组拆分为n个段并同时运行n个二进制搜索,并在结果准备好后合并。除了这个廉价的技巧,我没有看到引入并行性的明显方法。

答案 2 :(得分:1)

起初,二进制搜索看起来完全不平行。但请注意,只有三种可能的结果:

  • 你点击了元素
  • 搜索的元素位于您点击的元素
  • 之前
  • 元素在
  • 之后

所以我们开始三个并行过程:

  • 点击元素
  • 假设元素在之前,在此搜索
  • 假设元素在之后,在那里搜索

一旦我们知道第一个结果,我们就可以杀死那个不会找到元素的结果。但与此同时,在正确位置搜索的过程使搜索率翻了一番,即目前的加速比例是可能的3。

当然,如果您拥有超过3个核心,则可以推广这种方法。重要的是,这种思维方式是在硬件内部完成的。例如,查看进位前瞻加法器。

答案 3 :(得分:1)

你总是可以尝试一个不完全二分的搜索,基本上如果你有n个核心,那么你可以将数组拆分成n + 1个。从那里你搜索每个“切割点”并查看该值是大于还是小于切割点,这导致您拥有原始搜索空间的五分之一而不是一半,因为您可以选择一个较小的部分。