找到最小试验次数的值

时间:2012-01-22 14:42:09

标签: php

我有一个包含52个不同值的数组,我可以通过一个类来获得一个数字作为回报。

$array = array("A","B","C","D"...);

通过该类传递的每个值都会给出一个不同的数字,可以是正数也可以是负数。 数字分布不均匀,但按自然顺序排序。

E.g。

$myclass->calculate("A"); // 2.3
$myclass->calculate("B"); // 0.25
$myclass->calculate("C"); // -1.3
$myclass->calculate("D"); // -6

我想获得返回数字的最后一个值> = 0.20(在示例中为“B”)。

这应该在最小数量的“类调用”中完成,以避免浪费时间。

我认为如下:将$ array分成2块并计算得到的数字,如果它是> = 20,则将$ array的最后一部分拆分为其他2个较小的部分,依此类推。但我不知道这是否有效。

你会如何解决这个问题?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您所描述的内容称为二进制搜索,但它不适用于此用例,因为您没有搜索已知值。相反,你正在搜索一个集合中最小数字> = 0.2的值,其中精确值0.2可能不存在(如果它保证存在,那么你可以进行二进制搜索0.2,然后你的信只是n - 1; n != 0)。

如果您的范围始终是A-Z,那么简单的线性搜索肯定是最简单的方法。与实现时间相比,使用更有效方法的26个元素的数据集节省的时间可以忽略不计(此处为毫秒)。

编辑:我看到你实际上提到了52个元素,而不是26.我的观点仍然是相同的。 除非您在紧密循环中执行此操作,否则元素的数量需要达到数万或更多才能实现显着节省。