蛮力搜索优化

时间:2013-05-31 09:33:23

标签: algorithm computer-science brute-force

我的功能设计如下:

int brutesearch(startNumber,endNumber);

如果通过执行线性搜索匹配我的条件,则此函数返回正确的数字;如果在搜索的数字中找不到,则返回null。

说:

  • 我想搜索所有6位数字,找到一个能做我想做的事情
  • 我可以运行brutesearch()函数multithreaded
  • 我有一台4核的笔记本电脑

我的问题如下:

优化此搜索的最佳选择是什么?将数字空间划分为4个段并在每个核心上运行4个函数实例一个?或者例如分成10个段并将它们全部一起运行,或者分成12个段并使用队列以4个批次运行它们?

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

对您的搜索条件一无所知(可能还有内存子系统创建的其他注意事项),这里的权衡取决于让某些处理器比其他处理器做更多工作的成本(例如,因为搜索谓词在某些值上更快)比其他人,或因为其他线程被安排)和协调工作的成本。对我来说运行良好的策略是拥有一个工作队列,每次线程从中获取剩余任务的常量/ #thread部分,但只有四个处理器,很难出错,尽管运行时间非常长胜利在于算法。

答案 1 :(得分:0)

没有一般答案。您需要提供更多信息。

如果您的每个比较完全独立于其他比较,并且没有机会在全局资源中保存计算,则说没有涉及全局哈希表,并且您的操作都在一个阶段完成,

那么最好的办法是将问题空间划分为可用的核心数,在这种情况下为4,并将1/4的数据发送到每个核心。

例如,如果你有1000万个唯一数字,你想测试素数。或者如果你有1000万个密码,你试图哈希找到一个匹配,那么只需要除以4。

如果您遇到现实问题,那么您需要了解更多有关基础操作的信息才能获得良好的解决方案。例如,如果涉及全局资源,那么除非以某种方式隔离全局资源上的操作,否则不会从并行性中获得任何改进。