Redjik
Джедай-мастер
http://nikic.github.io/2012/03/28/Understanding-PHPs-internal-array-implementation.html
Почему будет много коллизий - их же будет одинаковое кол-во независимо от величины.
1) У нас всегда юзается одна и та же функция для хэша.
2) Потом применяется маска, чтобы числа были не сильно большие.
То есть даже если хэши будут одинаковые, то после применения маски индексы массива будут одинаковые.
ЗЫ. Статья классная, все понятно и разжевано, кроме этого момента. Посмотрел как поиск происходит
http://lxr.php.net/xref/PHP_5_4/Zend/zend_hash.c#913
все логично
Не понимаю или Никита ошибся или я чего-то недопонимаю именно с nTableSize
Не могу осилить.
- nTableSize specifies the size of the internal C array. It is always the next power of 2 greater or equal to nNumOfElements. E.g. if an array stores 32 elements, the internal C array also has a size of 32. But if one more element is added, i.e. the array then contains 33 elements, the internal C array is resized to 64 elements.
This is done to always keep the hash table efficient in space and time. It is clear that if the internal array is too small there will be many collisions and the performance will degrade. If the internal array is too big on the other hand, we’d be wasting memory. The power-of-2 size is a good compromise.
Почему будет много коллизий - их же будет одинаковое кол-во независимо от величины.
1) У нас всегда юзается одна и та же функция для хэша.
2) Потом применяется маска, чтобы числа были не сильно большие.
То есть даже если хэши будут одинаковые, то после применения маски индексы массива будут одинаковые.
ЗЫ. Статья классная, все понятно и разжевано, кроме этого момента. Посмотрел как поиск происходит
http://lxr.php.net/xref/PHP_5_4/Zend/zend_hash.c#913
все логично
Не понимаю или Никита ошибся или я чего-то недопонимаю именно с nTableSize