Cuando la gente dice conjuntos tienen O (1) membresía de comprobación, que son hablando sobre el caso promedio. En el caso peor (cuando todos los valores hash colisionan) la comprobación de membresía es O (n). Vea el Python wiki on time complexity.
El Wikipedia article dice el mejor de los casos complejidad de tiempo para una tabla hash que no cambia el tamaño es O(1 + k/n)
. Este resultado no se aplica directamente a los conjuntos Python ya que los conjuntos Python usan una tabla hash que cambia de tamaño.
Un poco más en el artículo de Wikipedia dice que para el caso promedio, y asumiendo una simple función de hash uniforme, la complejidad del tiempo es O(1/(1-k/n))
, donde k/n
puede estar delimitado por una constante c<1
.
Big-O se refiere solo al comportamiento asintótico como n → ∞. Desde k/n puede estar delimitado por una constante, c < 1, independiente de n,
O(1/(1-k/n))
es no más grande que O(1/(1-c))
que es equivalente a O(constant)
= O(1)
.
Asumiendo hashing simple uniforme, en promedio, comprobación de pertenencia para conjuntos de Python es O(1)
.
IIRC, el original 'aplicación set' realidad era * *' dict' con valores ficticios, y se puso optimizado después. – dan04
No es grande O el peor de los casos? Si puede encontrar una instancia donde el tiempo es O (n), entonces es O (n). No entiendo nada ahora mismo de todos esos tutoriales. –
No, el caso promedio es O (1) pero el peor de los casos es O (N) para la búsqueda de la tabla hash. –