El de dirección abierto, o el cerró el picado, es un método de la resolución de la colisión en las tablas de elección arbitraria . Con este método una colisión del picadillo es resuelta por el que sonda, o buscando con localizaciones alternas en el arsenal (la secuencia de la punta de prueba del ) hasta o el expediente de la blanco se encuentra, o se encuentra una ranura inusitada del arsenal, que indica que no hay tal llave en la tabla. Las secuencias bien conocidas de la punta de prueba incluyen:
; probing linear: en cuál es fijo el intervalo entre las puntas de prueba--a menudo en 1. ; probing cuadrático: en cuáles aumenta el intervalo entre las puntas de prueba linear (por lo tanto, los índices son descritos por una función cuadrático). ; Picado doble : en cuál es fijo para cada expediente pero es computado el intervalo entre las puntas de prueba por otra función de picadillo.
Las compensaciones principales entre estos métodos son que el sondar linear tenga el mejor funcionamiento del escondrijo pero son las más sensibles al agrupamiento, mientras que el picado doble tiene funcionamiento pobre pero objetos expuestos del escondrijo virtualmente ninguÌn agrupamiento; caídas que sondan cuadráticos mientras tanto en ambas áreas. El picado doble puede también requerir más cómputo que otras formas de sondar. Algunos métodos de dirección abiertos, por ejemplo llaves existentes Pasado-venir-primero-servidas del movimiento del picado del cuco de que desmenuzan y alrededor en el arsenal para hacer el sitio para la nueva llave. Esto da mejores tiempos de búsqueda máximos que los métodos basados en sondar.
Una influencia crítica en funcionamiento de una tabla de elección arbitraria de dirección abierta es el factor de carga del ; es decir, la proporción de las ranuras en el arsenal se utilizan que. Mientras que el factor de carga aumenta hacia 100%, el número de puntas de prueba que se puedan requerir para encontrar o para insertar una llave dada se levanta dramáticamente. Una vez que la tabla llega a ser llena, los algoritmos probing pueden incluso no poder terminar. Incluso con buenas funciones de picadillo, los coeficientes de carga se limitan normalmente hasta el 80%. Una función de picadillo pobre puede exhibir degradación de las prestaciones incluso en los coeficientes de carga muy bajos generando el agrupamiento significativo. Qué hace funciones de picadillo arracimar no es haber entendido bien, y es fácil escribir inintencionalmente una función de picadillo que cause el agrupamiento severo.
El Pseudocode siguiente es una puesta en práctica de una tabla de elección arbitraria de dirección abierta con sondar linear y la solo-ranura que caminan, un acercamiento común que sea eficaz si la función de picadillo es buena. Cada uno de las operaciones de búsqueda, el determinado y el quitan funciones de utilizan un findSlot interno común de la función para localizar la ranura del arsenal que hace o debe contener una llave dada.
pares de registro del {llave, valor} los pares del del var ponen en orden la ranura de find_slot de la función (llave) i: = num_slots (dominantes) del modulo del picadillo búsqueda de // del hasta nosotros encontramos la llave, o encontramos una ranura vacía. mientras que ((se ocupa la ranura) y (&ne de slot.key; el de la llave)) hace i: = (i + 1) num_slots del modulo repetición de vuelta i operaciones de búsqueda de la función (llave) i: = find_slot (llave) el si la ranura de es llave ocupada de // está en de la tabla de vuelta slot.value la llave otra del // no está en de la tabla de vuelta no encontrado la función fijó (llave, el valor) i: = find_slot (llave) si se ocupa la ranura de slot.value: = valor otro si la tabla es casi lleno reconstruir la tabla un más grande ( de la nota 1) i: = find_slot (llave) slot.value: = valor
Otra técnica de dirección abierta de la demostración del ejemplo. La actual función está convirtiendo cada parte (4) de una dirección del Internet Protocol, donde NO bitwise, XOR es bitwise XOR, O está bitwise O, Y está bitwise Y y << y >> cambiar de puesto-izquierdo y cambiar de puesto-derecho:
// key_1, key_2, key_3, key_4 están siguiendo 3 números del dígito - partes de del IP address xxx.xxx IP de la función (partes fundamentales) j: = 1 el hace llave: = (key_2 << 2) llave: = (llave + (key_3 << 7)) llave: = llave + (j O key_4 >> 2) * (key_4) * (j + key_1) XOR j llave: = el _prime_ de la llave Y del _prime_ // es un del número primero j: = (j+1) mientras que colisión de llave de vuelta del
; nota 1: La reconstrucción de la tabla requiere el asignación de un arsenal más grande y usar la operación determinada del para insertar recurrentemente todos los elementos del viejo arsenal en el nuevo arsenal más grande. Es común aumentar el exponencial del tamaño del arsenal, por ejemplo doblando el viejo tamaño del arsenal.
la función quita (la llave) i: = find_slot (llave) si la ranura de es vacante la llave de vuelta de // no está en el de la tabla j: = i lazo j: = (j+1) num_slots del modulo si la ranura de es vacante lazo de la salida del k: = num_slots del modulo del picadillo (slot.key) si (j > del y de de i ( del <= i de k o k > j)) o (j < yo y ( del <= i de k y k > j)) ( de la nota 2) ranura: = ranura i: = j marcar la ranura como vacante
; nota 2: Para todos los expedientes en un racimo, no debe haber ranuras vacantes entre su posición natural del picadillo y su cargo actual (las operaciones de búsqueda otras terminarán antes de encontrar el expediente). A este punto en el pseudocode, el de i es una ranura vacante que pudo invalidar esta característica para los expedientes subsecuentes en el racimo. el de j es un expediente tan subsecuente. el de k es el picadillo crudo donde el expediente en el de j aterrizaría naturalmente en la tabla de elección arbitraria si no había colisiones. Esta prueba está preguntando si el expediente en el de j inválido se coloca con respecto a las características required de un racimo ahora que el de i es vacante.
Otra técnica para el retiro es simplemente marcar la ranura según lo suprimido. Sin embargo esto requiere eventual la reconstrucción de la tabla simplemente para quitar expedientes suprimidos. Los métodos antedichos proporcionan O (1) puesta al día y retiro de expedientes existentes, con la reconstrucción ocasional si la marca del apogeo del tamaño de la tabla crece.
El O (1) quita el método antedicho es solamente posible en tablas de elección arbitraria linear sondadas con el escalonamiento de la solo-ranura. En el caso donde están ser suprimida muchos expedientes en una operación, el marcado de las ranuras para la canceladura y la reconstrucción posterior puede ser más eficiente.
| Random links: | Hollister, Idaho | Seaham | Wellington Koo | Alejandro-Antonin Taché | Línea de Zittau-Oybin-Jonsdorf |