Какова сложность времени 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
$ 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
.