Это иногда называют «амортизацией» набора или словаря. Это появляется время от времени как вопрос интервью. Как говорит @TimPeters, изменение размера происходит автоматически на 2/3 емкости, поэтому вы нажмете O (n), только если вы форсируете хэш самостоятельно.
In computer science, amortized analysis is a method for analyzing a given algorithm's complexity, or how much of a resource, especially time or memory, it takes to execute. The motivation for amortized analysis is that looking at the worst-case run time per operation, rather than per algorithm, can be too pessimistic.
`/* GROWTH_RATE. Growth rate upon hitting maximum load.
* Currently set to used*3.
* This means that dicts double in size when growing without deletions,
* but have more head room when the number of deletions is on a par with the
* number of insertions. See also bpo-17563 and bpo-33205.
*
* GROWTH_RATE was set to used*4 up to version 3.2.
* GROWTH_RATE was set to used*2 in version 3.3.0
* GROWTH_RATE was set to used*2 + capacity/2 in 3.4.0-3.6.0.
*/
#define GROWTH_RATE(d) ((d)->ma_used*3)`
Больше к эффективности. Почему 2/3? В статье Википедии есть хороший график https://upload.wikimedia.org/wikipedia/commons/1/1c/Hash_table_average_insertion_time.png к статье . (линейная кривая зондирования соответствует для наших целей от O(1) до O(n), цепочка — более сложный подход к хешированию) См. https://en.wikipedia.org/wiki/Hash_table для полного
Скажем, у вас есть набор или словарь, который стабилен и занимает 2/3 - 1 от его базовой емкости. Вы действительно хотите вялую производительность навсегда? Вы можете принудительно увеличить его размер.
«если ключи всегда известны заранее, вы можете хранить их в наборе и создавать свои словари из набора, используя dict.fromkeys ()». плюс некоторые другие полезные, хотя и датированные наблюдения. Повышение производительности очень большого словаря в Python
Для хорошего чтения о dictresize(): (dict был в Python до установки) https://github.com/python/cpython/blob/master/Objects/dictobject.c#L415
person
ShpielMeister
schedule
25.01.2020