PHP:函数'count'的复杂性[即O(1),O(n)]是多少?

时间:2010-12-30 21:12:08

标签: php

数组的count()函数的Big-O时间复杂度是多少?

实施例

$x = array(1,2,3);
echo count($x); // how many operation does it takes to count the elements 
                // of the array? is it 3, or is it 1

3 个答案:

答案 0 :(得分:19)

$ time php -r '$a=range(1,1000000); $b=0; for($i=0;$i<10;$i++) $b=count($a);'
real    0m0.458s
$ time php -r '$a=range(1,1000000); $a=array(1); $b=0; for($i=0;$i<10;$i++) $b=count($a);'
real    0m0.457s
对我来说似乎很漂亮O(1)。

经过测试的PHP版本:PHP 5.3.3-1ubuntu9.1 with Suhosin-Patch (cli) (built: Oct 15 2010 14:00:18)

答案 1 :(得分:17)

数组具有O(1)大小 - 也就是说,它们的大小存储在某处。该语言更新了插入/删除的计数。

答案 2 :(得分:4)

如果你想知道计数的来源,另一个线程已经回答了它:Is PHP's count() function O(1) or O(n) for arrays?

以下是答案:

  

PHP_FUNCTION(count)调用php_count_recursive(),后者又调用zend_hash_num_elements()非递归数组,这是以这种方式实现的:

ZEND_API int zend_hash_num_elements(const HashTable *ht)
{
    IS_CONSISTENT(ht);

    return ht->nNumOfElements;
}
  

所以你可以看到O(1)的{​​{1}}。