Una matriz de tabla hash tabla hash (zend_array)

 A. tabla hash, también conocida como tabla hash

  Como se muestra en la figura.

  clave: la clave, puede ser recuperada rápidamente por un valor correspondiente a la misma. Típicamente números o cadenas.

  Valor: el valor de los datos de destino. Puede ser una estructura de datos compleja.

  slot: ranura, generalmente se llama la unidad de tabla hash, toda la tabla hash es una larga mesa

  cubo: barril, valor almacenado correspondiente a la ranura, puede ser un tipo complejo

  función Hash: ranura de la llave obtenida por la función de hash, tal como la clave% = tabla de la ranura longitud, dará la ranura correspondiente

  Hash colisión: ranura de la llave obtenida por la función hash es el mismo, esto se llama colisión de hash. En general, utilizar la ley dirección de la cadena y método de dirección abierta a resolver conflictos

  Baidu específicas ver

 II. tabla hash PHP

  PHP en la parte superior del hash hizo los siguientes cambios:

  Hash1 función aumentó (y los efectos de la función de hash hash2 como anteriormente, el mapa digital en la ranura). clave hash1 mapeado en el valor de h, hash2 asigna valor h del valor del índice de ranura.

  h cubo interior para aumentar el campo.

  cubeta dentro del campo clave como clave de cadena, ya no representa una tecla numérica.

  Para ello por dos razones principales:

  Debido a que la clave hash puede ser un número o una cadena de caracteres, por lo que, h representa un número de teclas, con la cadena de clave que representa la clave, si la clave es una cadena, entonces hash1 obtenido por teclas numéricas, y luego por encima de hash como , el h (teclas numéricas) al tanque. Si la clave es un número, no hash1 en consecuencia, el valor de h es la clave, y luego el mismo hash anterior, el h (teclas numéricas) al tanque.

  Acelerar la comparación y la mirada, mirada a la comparación, el primer valor de comparación de h, h valor igual y luego comparar la longitud y el contenido, pero después de que el valor de h hash1 obtener más del noventa por ciento no son iguales, lo que puede comparar rápidamente la h como resultado, en lugar de la longitud y el contenido de la comparación, se aumentó la velocidad.

 III. tabla PHP7 almohadilla (véase la figura zend_array más alta, es decir, una matriz)

  PHP7 o el uso de la ley dirección de la cadena para resolver el conflicto. Sin embargo, la lista se utiliza en una cadena lógica, todo el cubo ya no se mantiene la relación de aguas abajo por un puntero, como se muestra en la figura.

  Y una serie de ranuras en el interior de la bañera, -1 a -N correspondiente a la anterior ranura mencionada (ranura), a la derecha de 0 a n-1 correspondiente a la ranura en el montaje del barril, el efecto máximo es para hacerlo:

  Una matriz de acceso aleatorio (es decir, acceso directo), adquirida por los valores subíndice de matriz directamente, como en fin de acceder a la lista enlazada de hash A diferencia, en la que al menos la mitad de la mayor eficiencia de

  También es muy intuitivo para ver por qué se ordena la matriz PHP (es decir, como resultado de la inserción y atravesar hacia fuera), insertado en la inserción eficaz porque el cubo, es decir, 0 a n-1, y es atravesada directamente así que lea a cabo a partir de cero. matriz PHP está diseñado para cumplir estas dos condiciones: 1. El diccionario es que la clave 2. ordenó. Ahora bien, estas dos condiciones se han satisfecho

   Aquí, de hecho, a algunas preguntas:

  1. El diseño de matrices anterior es la forma en la ranura de la cartografía, la ranura es como barriles de asociación, cubos y barriles y cómo relacionados?

  Resuelve este resolvería el índice de matriz es negativa, ¿por qué, por qué la máscara es negativo? Es decir value.arr.nTableMask (véase la figura superior)

  ¿Cómo resolver la primera ranura asignada a la, por hash2 h a la ranura, dar un ejemplo sencillo, como la longitud de la tabla de dispersión 8, para obtener el valor de 10 h, 10% 8 = 2 será asignada a la segunda ranura después de una matriz para almacenar el mismo principio (aquí diseñado muy inteligentemente), con el valor h y la longitud de bits de la tabla por el mismo tomado 8 y 10, esta vez para convertirse -8 8 almacenada en el ordenador, el complemento almacenado (números en complemento se almacenan en el ordenador, principalmente para resolver la resta símbolo bit y razones de procesamiento) a 1,111,111,111,111,111 1,111,111,111,111,000 (sistema de 32 bits), donde se puede contar el código original, código anti-complemento = -1 = 

1.111.111.111.111.111 1.111.111.111.110.111 ha invertido, el código anti-código original = invertida (el primer bit de signo no se invierte) = 1.000.000.000.000.000 0,000,000,000,001,000, este conteo binario es -8, almacenado en el ordenador es el complemento de 000 (frente a ignorar Todos 1), y este valor y cualquier bit a bit número entero después de sólo para satisfacer [-n, -1] en el intervalo de, por ejemplo, ahora ejemplifican -8, es decir,

  000 -8

  001 -7

  010 -6

  011 -5

  100 -4

  101 -3

  110 -2

  111 -1

  Aquí exactamente [-8, -1] variar, a continuación, el ejemplo anterior, el 10-bit y -8 después de la prensa obtiene -2

  11111111 11111111 11111111 11111000 = -8

  00000000 ................... 00001010 = 10

Tener 1,111,111,111,111,111 1,111,111,111,111,010 = -2, -2 es la segunda ranura, no es muy sorprendente, a continuación, el valor almacenado en el índice de ranura de cubo, y el resto como se muestra en la figura.

 

  2. Ya que se encuentra después de la ranura, para encontrar un cubo a través de la primera ranura, y luego encontrar el segundo cubo, a continuación, la lista y es de la misma manera, también como esta lista enlazada, encontrar la ranura, el puntero de lista enlazada encontrar el primer cubo, a continuación, un puntero para encontrar la siguiente a través del segundo cubo, de todos modos, ah, donde la eficiencia se mejora ahora?

  Empecé este problema se presenta, la braza de comenzar, el libro hay una explicación clara por esta razón, puesto que tal un autor de diseño, debe tener sus razones, la eficiencia debe ser mejorado, pero no creo que la actualización en lo que, después, pensar con cuidado, ya que el principio sigue siendo el mismo, y que se refleja en la forma en la apariencia, encarnado en este lugar:

  Los ejemplos más simples, a * puntero apunta al cubo, el cubo a un valor obtenido, cpu obtener un valor del registro de la variable mediante el acceso a la memoria, y luego vuelve a la CPU, que se refiere en el presente documento como un acceso a la memoria, es decir, dos instrucciones operación, ya que el valor de una variable es una dirección después de la primera CPU para obtener de nuevo el mismo valor que el valor de la dirección de cubo obtenido, aquí dos accesos a memoria. A través de la matriz de arriba diseñado para funcionar, entonces, sólo para obtener se dirige la dirección de la cabeza de la matriz, entonces (índice de desplazamiento en la matriz) se obtiene desplazando el valor de la memoria es devuelto a la CPU, donde sólo una memoria el acceso, la reducción de un acceso a la memoria, la eficiencia se refleja aquí.

  

 

Supongo que te gusta

Origin www.cnblogs.com/GH-123/p/12656831.html
Recomendado
Clasificación