PHP在列表中查找数字的最有效方法

时间:2014-04-09 15:34:49

标签: php algorithm

我有300个号码的清单,它们没有订购。我想找到一种最有效的方法来确定一个数字是否在该列表中。

简单的答案是in_array()。这当然有一个O(n)的大O.

但是由于我完全控制了这个列表,我相信我可以让它更快。

所以我将列表设为一个关联数组,其中key是我要查找的数字isset()将产生O(1)。

$myArray = array('434342'=>true, '345235'=>true, '562211'=>true, '3333245'=>true, '99087782'=>true);

这是最好的方法吗?由于数组大小很小,O(n)的命中,其中n = 300,这不值得额外的努力。

3 个答案:

答案 0 :(得分:3)

300个数组元素:

in_array()    
0.00000000000000000000 seconds    
bool(true)

isset()    
0.00000000000000000000 seconds    
bool(true)

500,000个数组元素:

in_array()    
0.00500106811523437500 seconds    
bool(true)

isset()    
0.00000000000000000000 seconds    
bool(true)

答案 1 :(得分:2)

只要您完全控制列表,您的方式就是最有效的。

一个小变化:使用一个基于数字的简单数组,而不是使用关联数组 isset()也可以使用,不需要比较字符串。

无论如何,这是最有效的方式,但在这种数据大小中 - 这可能是浪费时间。

答案 2 :(得分:0)

如果你的阵列没有排序,你不能做得比O(n)平均好

可以通过一些统计公式证明,使用在非结构化(未排序)数组中找到特定元素的等概率

如果阵列具有特定结构,某些算法在某些情况下会更快。如果我们有关于此数组的更多详细信息,它可能会对我们有所帮助