0

我想明智地以大间隔扫描数字,直到找到我需要的数字。但是,我不知道这个数字可能在哪里,在搜索过程中我也不会有任何线索。

让我举一个例子,以便于陈述我的问题

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

幼稚的方法将从 100000000000000 开始并计数到 99... 一个接一个。但这并不明智,因为如果我不走运,数字可能会在远端。

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

提前致谢。

4

3 回答 3

3

你的问题没有解决办法,只有知识。如果您对数字一无所知,那么枚举它们的任何策略都同样好(或坏)。

如果您假设您正在与试图为您隐藏数字的对手作战,那么策略就是让您的下一步行动变得不可猜测。那将是随机选择范围内的数字并要求它们。(为避免重复,您必须使用数字的随机排列。)然后您会找到预期数字约为总数一半的数字,也就是说,您将从最坏的情况。但正如所说,所有这些都取决于您可以做出的假设。

于 2012-10-07T14:04:25.660 回答
0

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

于 2012-10-07T20:54:45.227 回答
0

使用二分搜索。首先看看你的数字是高于还是低于范围的中间。根据答案,分别对范围的上半部分或下半部分重复该过程。

于 2012-10-07T13:32:57.017 回答