首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并行二分查找

并行二分查找
EN

Stack Overflow用户
提问于 2011-12-08 07:01:31
回答 6查看 15.7K关注 0票数 13

我刚刚开始学习并行编程,我正在研究二进制搜索。

这不能通过投入更多的处理器来真正优化它,对吗?我知道这应该是分而治之,但你实际上是在“减少和征服”(来自Wikipedia)。

或者,您可以将这些比较并行化吗?(如果X小于array[mid],则从low搜索到mid - 1;否则,如果X大于array[mid],则从mid + 1搜索到high,否则返回X的索引mid )

或者,您可以将数组的一半分配给一个处理器进行二进制搜索,而将另一半分配给另一个处理器?不过,这不是很浪费吗?因为它在减少和征服,而不是简单地划分和征服?有什么想法?

EN

回答 6

Stack Overflow用户

发布于 2012-10-02 06:38:05

您可以很容易地使用并行性。

对于k小于n的处理器,请将阵列拆分为n/k组,并为每个组分配一个处理器。

在该组上运行二进制搜索。

现在时间是log(n/k)。

还有一个名为logn/log(k+1).的crew方法

票数 15
EN

Stack Overflow用户

发布于 2013-01-11 19:33:49

我认为它当然有资格并行化。至少,跨两个线程。让一个线程执行深度优先搜索,另一个线程执行广度优先搜索。优胜者是执行速度最快的算法,不同的数据集可能不同。

票数 4
EN

Stack Overflow用户

发布于 2011-12-08 07:30:57

我在并行编程方面没有太多经验,但我怀疑这是一个很好的并行处理候选者。算法的每一步都依赖于执行一次比较,然后根据该比较沿着一条设置的“路径”前进(您要么找到了自己的值,要么现在必须根据比较在设置的“方向”上进行搜索)。两个单独的线程执行相同的比较不会让您更快,并且单独的线程都需要依靠相同的比较来决定下一步要做什么,所以它们不能真正单独完成任何有用的、划分的工作。

至于你拆分数组的想法,我认为在这种情况下你只是否定了二进制搜索的好处。你的值(假设它在你的数组中),要么在你数组的上半部分,要么在下半部分。二分查找中的第一个比较(在中点)将告诉您应该查找哪一半。如果更进一步,可以考虑将N个元素的数组分成N个不同的二进制搜索(这是一种简单的并行化尝试)。你现在正在做N个比较,当你不需要的时候。您正在失去二进制搜索的能力,因为每次比较都会将您的搜索范围缩小到适当的子集。

希望这能有所帮助。欢迎评论。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8423873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档