Quando as pessoas dizem que os conjuntos têm O (1) verificação de associação, estão falando sobre o caso médio . Na pior das hipóteses (quando todos os valores de hash colidem), a verificação de associação é O (n). Veja o wiki do Python sobre complexidade de tempo .
O artigo da Wikipedia diz que a melhor complexidade de tempo para uma tabela de hash que não é redimensionada é O(1 + k/n)
. Esse resultado não se aplica diretamente aos conjuntos Python, pois os conjuntos Python usam uma tabela de hash que é redimensionada.
Um pouco mais adiante, no artigo da Wikipedia, diz que, para o caso médio , e assumindo uma função simples de hash uniforme, a complexidade do tempo é O(1/(1-k/n))
onde k/n
pode ser limitada por uma constante c<1
.
Big-O refere-se apenas ao comportamento assintótico como n → ∞. Como k / n pode ser limitado por uma constante, c <1, independente de n ,
O(1/(1-k/n))
não é maior O(1/(1-c))
que o equivalente a O(constant)
= O(1)
.
Portanto, assumindo um hash simples e uniforme, em média , a verificação de associação para conjuntos Python é O(1)
.
set
implementação original estavadict
com valores fictícios e foi otimizada mais tarde.