我有一个包含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个较小的部分,依此类推。但我不知道这是否有效。
你会如何解决这个问题?
提前致谢。
答案 0 :(得分:0)
您所描述的内容称为二进制搜索,但它不适用于此用例,因为您没有搜索已知值。相反,你正在搜索一个集合中最小数字> = 0.2的值,其中精确值0.2可能不存在(如果它保证存在,那么你可以进行二进制搜索0.2,然后你的信只是n - 1; n != 0
)。
如果您的范围始终是A-Z,那么简单的线性搜索肯定是最简单的方法。与实现时间相比,使用更有效方法的26个元素的数据集节省的时间可以忽略不计(此处为毫秒)。
编辑:我看到你实际上提到了52个元素,而不是26.我的观点仍然是相同的。 除非您在紧密循环中执行此操作,否则元素的数量需要达到数万或更多才能实现显着节省。