Me encontré con una afirmación de que HashSet <T> .Contains() es una operación O (1). Esto me sorprendió ya que cada discusión de hashing que he encontrado menciona la posibilidad de colisiones, lo que potencialmente puede llevar a O (n) tiempo de ejecución.O (1) hash ups?
Siendo curioso, miré en la documentación para HashSet <T> .Contiene y también HashTable.Contains. La documentación de ambos métodos hace el mismo reclamo.
Cuando miro en el reflector, HashSet <T> .Contains() se implementa con un bucle for, pasando por una lista de ranuras que contienen valores que tienen el mismo hash.
Ahora bien, esas mismas discusiones de hashing también han mencionado que un buen algoritmo hashing evita colisiones y en esas circunstancias la búsqueda será de hecho O (1). Pero mi comprensión de la notación Big O es que es el peor tiempo de ejecución, no el mejor.
¿El reclamo O (1) es incorrecto? ¿O me estoy perdiendo algo?
Odio la notación O grande =] – Luiscencio
@Luiscencio La notación Big O es simplemente las palabras que le permiten decirle a otro programador cómo se escalará una función. ¿Qué palabras sugiere que rápidamente le den a otro programador una idea semi-precisa de qué tan bien se escala una función determinada? –
[broma] ¿qué pasa con sus "funciones es f ***** g comiendo el procesador f ***** g" – Luiscencio