明智地在一个区间中遍历数字

时间:2012-10-07 13:25:11

标签: c performance algorithm search counting

我想明智地扫描一个大间隔的数字,直到找到我需要的那个。 但是,我对这个数字可能没有任何线索,在搜索过程中我不会有任何线索。

让我举一个例子来说明我的问题

假设我正在搜索100000000000000和999999999999999之间的数字

天真的方法将从100000000000000开始,一个接一个地计数到99 ...... 但这并不明智,因为数字可以在远端如果我不幸运。

那么,解决这个问题的最佳方法是什么。我不是在寻找数学上最好的,我需要一种易于在C编程语言中实现的技术。

提前感谢。

3 个答案:

答案 0 :(得分:3)

你的问题没有解决方案,但知识。如果你对这个数字一无所知,任何列举它们的策略都同样好(或坏)。

如果你认为你正在与一个试图为你隐藏号码的对手作战,那么策略就是让你的下一步行动变得不可思议。那将是随机选择范围内的数字并要求它们。 (为了避免重复,你必须使用你的数字的随机排列。)然后你就可以找到你的数字,预期数量大约是总数的一半,也就是你从中得到两倍。最坏的情况。但正如所说的那样取决于你可以做出的假设。

答案 1 :(得分:0)

使用二分搜索。首先看看您的号码是否高于或低于范围的中间位置。根据答案,分别重复该范围的上半部分或下半部分的过程。

答案 2 :(得分:0)

正如您所知,没有提高搜索速度的策略。您所能做的就是通过使用多线程来加速搜索本身。所以技术上最好的方法可能是尝试在OpenCL中实现算法(它与C非常相似,可以通过C库使用)并且并行运行数百个测试,具体取决于您的硬件(GPU) )。