Concurrency 并行二进制chop算法

Concurrency 并行二进制chop算法,concurrency,binary-search,Concurrency,Binary Search,有没有一种方法(或者理论上可能)可以同时实现二进制搜索算法?我猜答案很可能是否定的,原因有两个: 尽管谷歌搜索了很多,但我还没有发现任何并发实现 二进制切分的每个迭代周期都取决于前一个周期的值,因此,即使每个迭代是一个单独的线程,它也必须阻塞,直到前一个周期完成,使其连续 不过,我想对这方面做一些澄清(如果可能的话,还有任何链接或示例?我想你可以找到答案!要并行化,必须有一些可以划分的工作。在bin搜索的情况下,并没有任何东西可以被分割和并行化。bin搜索进入值数组的中间。这项工作不能分割。

有没有一种方法(或者理论上可能)可以同时实现二进制搜索算法?我猜答案很可能是否定的,原因有两个:

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

不过,我想对这方面做一些澄清(如果可能的话,还有任何链接或示例?

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


您认为什么可以并行化?

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

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

  • 你击中了元素
  • 搜索的元素在您所点击的元素之前
  • 元素在后面
因此,我们开始三个并行过程:

  • 击中元素
  • 假设元素在前面,请在此处搜索
  • 假设元素在后面,在那里搜索
一旦我们知道第一个的结果,我们就可以杀死那个找不到元素的。但同时,在正确的位置搜索的过程,搜索率翻了一番,也就是说,当前的加速比是3分之2


当然,如果您有3个以上的内核可供使用,则可以推广这种方法。重要的一点是,这种思维方式是在硬件内部完成的。例如,查找进位先行加法器。

您始终可以尝试不完全的二进制搜索,基本上,如果您有n个核,则可以将数组拆分为n+1个部分。从这里搜索每个“切点”,并查看值是否大于或小于切点,这将导致您拥有原始搜索空间的五分之一,而不是一半,因为您可以选择更小的部分。

类似问题:对不起,我的回答,我不想说检查这个有什么坏处。这根本不是我的意见。。。我已经说过,从我的研究来看,我认为这是不可能的,我只是在澄清了这一点之后才说不可能。我想我们过去都遇到过这样的情况,我们假设某件事不可能发生,然后震惊地发现这是出于任何原因,我认为检查这一点没有什么坏处,以防这是其中的一个时刻!您可以乐观地启动进程,然后将其多路复用。看看我的答案。