¿Cuál es la explicación rigurosa de por qué n / m es el factor de carga en una tabla hash?

No me refiero a ser frívolo, pero el factor de carga se define como el número de entradas dividido el número de cubos. (Las variables nym no tienen sentido sin contexto).

Una pregunta más útil es, quizás, “¿por qué es significativo el factor de carga?” Esto depende un poco de la implementación de una tabla hash que se esté utilizando.

Si estamos utilizando una tabla hash de tamaño fijo con encadenamiento de listas enlazadas, entonces la sabiduría convencional de que el tiempo esperado para recuperar un valor es O (1) es un poco engañoso. El número esperado de comparaciones realizadas por un “get” es igual a (la mitad) del número esperado de entradas en un depósito, que es O (N / B), donde N es el número de entradas y B es el número de depósitos. Esta fórmula proviene de la probabilidad básica: si las entradas se distribuyen al azar, el valor esperado es el número medio de entradas por segmento, que es N / B. Dado el número de entradas por segmento, deberíamos esperar visitar aproximadamente la mitad de ellas, en promedio, antes de encontrar la clave que nos interesa. Es decir, el tiempo esperado es O (factor de carga).

(Un análisis más sofisticado usaría una distribución real en lugar del valor medio, y vería el número de errores de caché que probablemente sea más relevante para el rendimiento).

Ahora, una tabla hash generalmente está diseñada para que B sea O (N), lo que significa que el factor de carga es N / O (N). una constante, entonces O (factor de carga) = O (1). Es por eso que el factor de carga es una medida útil: es proporcional al número de comparaciones requeridas.

La forma en que entendí es la siguiente:

El factor de carga es cuánto puede ser la longitud de una ranura mientras se realiza el hashing. El peor de los casos que conocemos sería n (todos los números en esa ranura) y el mínimo es 1 número. Queremos saber qué puede ser en promedio.

Suposición: Suponemos que cualquier número de n puede asignarse a la ranura m. 1 / m de probabilidad de que se asigne a un espacio determinado

Suponemos que cualquier número de n puede asignarse a la ranura m. Y las asignaciones entre n números son independientes. Ahora el factor de carga, que es la longitud promedio de una ranura que puede ser, es

Diga SLOT 1, si se le asigna un número, la variable aleatoria es 1, y si no es cero. P (Éxito) = p = 1 / m, P (Fracaso) = q = (m-1) / m

Esto forma una distribución binomial sobre cuál podría ser la longitud de una ranura, y esa expectativa de distribución binomial es np, donde p aquí es 1 / m, por lo tanto n / m.

Una mejor explicación podría ser la prueba del Teorema 11.2 del libro CLRS en el capítulo Hash Tables.

El factor de carga de una tabla hash indica qué tan lleno está. Entonces, si [math] n [/ math] es el número actual de entradas y [math] m [/ math] es el tamaño actual, entonces, sí, [math] \ frac {n} {m} [/ math] es El factor de carga. En Java se puede especificar el factor de carga cuando se construye la tabla hast. Lo que esto significa es que la tabla crecerá si el factor de carga se vuelve más alto que el factor de carga. ¿Por qué? porque a medida que la tabla se llena, hay una mayor probabilidad de colisiones (es decir, que cuando inserte una nueva entrada, ya habrá una con el mismo código hash). Las colisiones deben resolverse (esto podría ser, por ejemplo, mediante encadenamiento, o simplemente buscando desde donde se realizó la inserción hasta que haya un espacio vacío). Básicamente, existe una compensación entre el gasto de colisiones (tiempo y posible costo de memoria), asignando una tabla grande para comenzar (costo de memoria) y expansión (costo de tiempo).

Si no tiene limitaciones de memoria, una buena estrategia general es asignar una tabla que sea al menos dos veces mayor que la cantidad de elementos esperados. Si eso es demasiado grande, haga una suposición razonable.

Debe definir sus términos en términos inequívocos, alguna notación. Una tabla hash genérica puede cubrir todas las implementaciones. Luego, con una exigencia verbal, muestra la “carga”. ¿Cómo se sigue la carga de las definiciones?

More Interesting

¿Qué aumenta más tu capacidad lógica y de razonamiento, física, matemática o programación de computadoras?

Teóricamente, ¿se puede implementar algún algoritmo en el marco de MapReduce?

¿Existe una secuencia de bits perfectamente aleatoria?

X resuelve el problema de la Torre de Hanoi, primero con n discos en el tiempo t1 y luego con n + 2 discos en el tiempo t2. Suponiendo que él toma la misma cantidad de tiempo para cada movimiento de disco y resuelve el problema en los menores pasos posibles, ¿cuál será la relación entre t1 y t2?

¿Qué es una explicación intuitiva de los teoremas de jerarquía y sus pruebas en la teoría de la complejidad computacional?

¿Cuál es el papel de las matemáticas en la programación?

Cómo mejorar mi habilidad de programación en los temas de matemática y geometría

¿Cuál es la conexión entre la teoría de conjuntos avanzada y la informática teórica?

¿Cuáles son los fundamentos matemáticos de la inteligencia artificial?

¿Cuántas matemáticas se requieren para la informática?

¿Cómo se relacionan los cierres del lenguaje de programación con el cierre en matemáticas?

¿Por qué los estudiantes que se especializan en matemáticas, física, informática y estadística no se gustan?

Hice un programa en C que nos da la tabla de distribución normal, pero debo hacer un archivo Excel desde C. ¿Cómo puedo hacer esto?

En Python, ¿cómo sería el código si quisiera que el usuario ingrese un número de 3 dígitos y luego obtenga la suma de esos tres números individuales?

Criptografía: ¿Cómo explicaría el encadenamiento de hash para evitar la técnica de colisiones de hash?