Единственный способ убедиться в этом - реализовать оба варианта и проверить, но мое обоснованное предположение состоит в том, что словарь будет быстрее, потому что двоичное дерево поиска стоит O (log (n)) для поиска и вставки, а яПодумайте, что за исключением самых пессимальных ситуаций (таких как массовые коллизии хешей), поиск O (1) в хеш-таблице перевесит случайное изменение размера.
Если вы посмотрите на реализацию словаря Python , вы увидите, что:
- словарь начинается с 8 записей (
PyDict_MINSIZE
); - словарь с размером 50 000 или менее записей увеличивается в четыре раза при увеличении;
- словарь с более чем 50 000 записей удваивается при увеличении;
- ключевые хэши кэшируются в словаре, поэтому они не пересчитываются при изменении размера словаря.
(« ЗАМЕЧАНИЯ ПО ОПТИМИЗАЦИИ СЛОВАРЕЙ » тоже стоит прочитать.)
Так что, если в вашем словаре есть 1 000 000 записей, я думаю, что он будетразмер одиннадцать раз (8 → 32 → 128 → 512 → 2048 → 8192 → 32768 → 131072 → 262144 → 524288 → 1048576 → 2097152) при стоимости 2 009 768 дополнительных вставок при изменении размеров.Похоже, что это намного меньше, чем стоимость всей перебалансировки, связанной с 1 000 000 вставок в дерево AVL.