好的,这不是“如何获取所有唯一性”或“如何从php中的数组中删除重复项”的问题。这是关于时间复杂度的问题。
我认为array_unique有点O(n ^ 2–n),这是我的实现:
array_unique
function array_unique2($array) { $to_return = array(); $current_index = 0; for ( $i = 0 ; $i < count($array); $i++ ) { $current_is_unique = true; for ( $a = $i+1; $a < count($array); $a++ ) { if ( $array[$i] == $array[$a] ) { $current_is_unique = false; break; } } if ( $current_is_unique ) { $to_return[$current_index] = $array[$i]; } } return $to_return; }
但是,当针对基准进行测试时,array_unique我得到以下结果:
测试(array_unique2)…操作耗时0.52146291732788 s。
测试(array_unique)…操作耗时0.28323101997375秒。
这使array_unique快一倍,我的问题是,为什么(两者都有相同的随机数据)?
我的一个朋友写道:
function array_unique2($a) { $n = array(); foreach ($a as $k=>$v) if (!in_array($v,$n)) $n[$k]=$v; return $n; }
这是内置在php中的两倍。
我想知道,为什么?
array_unique和in_array的时间复杂度是多少?
编辑 我从两个循环中删除了count($ array),只是在函数顶部使用了一个变量,在100000个元素上获得了2秒!
虽然我不能说原生的array_unique函数,但我可以告诉您,您的朋友算法更快,因为:
尽管这些因素都不是一个巨大的因素,但我可以看到累积影响将使您的算法花费比您的朋友更长的时间。