PHP: Какова сложность (т. Е. O (1), O (n)] функции «count»?

Какова сложность времени Big-O функции count() для массивов?

пример

 $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 

Solutions Collecting From Web of "PHP: Какова сложность (т. Е. O (1), O (n)] функции «count»?"

 $ 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)

Массивы имеют размер O (1), то есть их размер где-то сохраняется. Язык обновляет количество вставки / удаления.

Если вы хотите узнать источник подсчета, на него ответил другой поток: Является ли функция count count () O (1) или O (n) для массивов PHP?

Вот ответ:

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) для $mode = COUNT_NORMAL .