Коли люди кажуть, що набори мають перевірку членства O (1), вони говорять про середній випадок. У гіршому випадку (коли всі стихійні значення стикаються) перевірка членства - це O (n). Дивіться вікі на Python про складність у часі .
У статті Вікіпедії сказано, що найкраща часова складність для хеш-таблиці, яка не змінює розмір, - це O(1 + k/n)
. Цей результат не застосовується безпосередньо до наборів Python, оскільки в наборах Python використовується хеш-таблиця з розміром.
Трохи далі у статті Вікіпедії йдеться про те, що для середнього випадку та припускаючи просту функцію однорідного хешуваннявання, складність у часі полягає в тому O(1/(1-k/n))
, де k/n
можна обмежити константу c<1
.
Big-O відноситься лише до асимптотичної поведінки як n → ∞. Оскільки k / n може бути обмежена постійною, c <1, незалежно від n ,
O(1/(1-k/n))
не більше, ніж O(1/(1-c))
еквівалентно O(constant)
= O(1)
.
Таким чином, якщо припустити, однакове просте хешуваннявання, в середньому перевірка членства для наборів Python є O(1)
.
set
реалізація насправді булаdict
з фіктивними значеннями, і вона була оптимізована пізніше.