Когда люди говорят, что наборы имеют O (1) проверку членства, они говорят о случае Среднее . В худшем случае (когда все хэшированные значения вступают в противоречие) проверка членства - это O (n). См. Python wiki о сложности времени .
В статье Википедии говорится, что лучший случай сложность времени для хеш-таблицы, которая не изменяет размер, составляет O(1 + k/n)
. Этот результат не применяется напрямую к наборам Python, поскольку наборы Python используют хеш-таблицу с изменяемым размером.
Чуть дальше в статье в Википедии говорится, что для случая среднее и при условии простой равномерной хеш-функции сложность времени равна O(1/(1-k/n))
, где k/n
может быть ограничен константой c<1
.
Big-O относится только к асимптотическому поведению при n → ∞.
Поскольку k / n может быть ограничено константой, c <1, <em>независимо от n ,
O(1/(1-k/n))
не больше O(1/(1-c))
, что эквивалентно O(constant)
= O(1)
.
Таким образом, при условии равномерного простого хеширования, в среднем , проверка членства для наборов Python составляет O(1)
.