Sie sind auf Seite 1von 20

METODOS DE ACCESO MULTIDIMENSIONALES

HASHING LINEAL MULTIDIMENSIONAL

Curso: Estructura de datos 2 Alumnos:

Mamani Riveros JeanKarlos Choqueluque Roman David

HAS HING LINEAL MULTIDIMENSIONAL


En primer lugar, revisaremos los principios bsicos de un hashing lineal y por ultimo mostramos cmo adaptarlo para manejar datos multidimensionales

HASHING LINEAL
Hashing lineal es una estructura de ndice basado en disco actualizable dinmicamente que implementa un esquema de hash y que crece o se reduce un cubo a la vez. El nombre de hashing lineal se utiliza debido a que el nmero de cubetas aumenta o disminuye de forma lineal. Los Desbordamientos se manejan mediante la creacin de una cadena de pginas en el cubo con desbordamiento. La funcin hash cambia dinmicamente y en cualquier momento dado puede haber como mximo dos funciones hash utilizados por el sistema. INSERCION: Disposicin inicial: El esquema de hashing lineal tiene m cubos iniciales etiquetados de 0 a M-1, y una funcin de hash inicial H0 (k) = f (k)% m que se utiliza para asignar cualquier k llave en uno de los m cubos (por simplicidad asumir H0 (k) = k% m), y un puntero p que seala a la cubeta para ser dividido siguiente cada vez que se genera una pgina de desbordamiento (inicialmente p = 0). Un ejemplo se muestra en la Figura

Aqu m = 4, p = 0, H0 (k) = k% 4.

Dividir Cubo Cuando el primer desbordamiento se produce (que puede ocurrir en cualquier cubo), el cubo 0, que es apuntado por p, se divide (rehashing) en dos cubos: el cubo original 0 y un nuevo cubo m. Una nueva pgina vaca se aade tambin en el cubo sobrecargado para acomodar el desbordamiento. La bsqueda de los valores inicialmente asignado en la cubeta 0 (mediante la funcin h0) ahora se distribuyen entre los cubos 0 y m utilizando una nueva funcin hash h1.Como ejemplo, se muestra la disposicin del hashing lineal de la figura anterior despus de insertar un nuevo registro con la clave 11.

Aqu p = 1, H0 (k) k = 4%, h1 (k) = k% 8. El hashing lineal despus de la insercin 11 en la Figura. Los registros marcados con un crculo son los registros existentes que se mueven a la nueva cubeta. En ms detalle, el registro se inserta en la cubeta 11 % 4 = 3. Los desbordamientos de cubo y una pgina de desbordamiento son introducidos para dar cabida al nuevo registro. El cubo 0 se divide y los registros que estaban originalmente en el cubo 0 se distribuyen entre cubo 0 y cubo 4 , utilizando una nueva funcin hash h1 ( k ) = k % 8 .

El prximo desbordamiento del cubo, provocados por la insercin de dos registros en el cubo 2 o cuatro registros en el cubo 3 en la siguiente figura , har que una nueva divisin que se fije un nuevo cubo de m+1, y el contenido de la cubeta 1 se distribuirn mediante h1 entre los cubos 1 y m + 1 . Una propiedad fundamental de h1 es que los valores de bsqueda que fueron asignados originalmente por h0 a algn cubo j deben reasignar o bien al cubo j o al cubo j + m. Esta es una propiedad necesaria para Hashing Lineal para trabajar. Un ejemplo de tal funcin hash es: h1 ( k ) = k % 2m . Otros desbordamientos de cubo causarn cubos adicionales divididos en un orden lineal del nmero de cubo (el aumento de p en uno para cada divisin). Despus de suficientes desbordamientos, se dividir todos los m cubos originales. Esto marca el fin del ciclo de divisin 0 . Durante el ciclo 0, p sali posteriormente del cubo 0 al cubo m-1. Al final del ciclo 0 el esquema de hashing lineal tiene un total de "2.M " cubos. La Funcin hash h0 ya no es necesaria ya que todos los cubos 2m pueden ser abordadas por la funcin hash h1. El puntero "p" se pone a 0 y un nuevo ciclo, ciclo de divisin 1, comienza. Una nueva funcin hash h2 se comenzar a utilizar. La siguientes figuras ilustran los casos en el fin del ciclo de divisin 0 y el principio del ciclo de divisin 1. En general, en el ciclo de divisin i, se utilizan las funciones hash "hi y "hi+1". A principios del ciclo i, p = 0 y hay (2 ^ i)*m cubos. Cuando se dividen todos estos cubos, el ciclo de divisin i + 1 comienza. p vuelve a 0. El nmero hash hi+1 de y cubos es 2^(i funciones hi+2 utilizar. de se +1). m. Y las comenzarn a

BUSQUEDA: Se necesita un sistema de bsqueda para asignar un a clave k para un cubo, ya sea en la bsqueda de un registro existente o cuando se inserta un nuevo registro. El esquema de bsqueda funciona de la siguiente manera: Si hi (k) >= p, elige cubo de hi (k), ya que el cubo no se ha dividido an en la ciclo actual. Si hi (k) <p, elegir el cubo hi +1 (k), que puede ser hi (k) o su imagen hi (k) + 2^i m. Por ejemplo, en la Figura, p = 1. Para buscar por registro 5, ya que h0 (5) = 1 p, se va directamente al cubo para buscar el registro. Pero para la bsqueda d el registro 4, ya que h0 (4) = 0 < p, es necesario utilizar h1 para decidir el cubo real. En este caso, el registro debe ser buscado en el cubo h1 (4) = 4.

Ordenamientos unidimensionales:
Cuando los datos de punto no se distribuyen uniformemente en el espacio del que se extraen, entonces, utilizando la representacin de la red fija significa que algunas de las celdas de la cuadrcula tienen demasiada cantidad de datos asociados con ellos. El resultado es que la red debe ser refinada por otras particiones. Desafortunadamente, esto conduce a la creacin de muchas celdas de la cuadrcula vacas, desperdiciando con ello el espacio. Existen formas de eliminar algunas de las celdas vacas mediante la agregacin de celdas vacas espacialmente adyacentes para formar celdas vacas ms grandes. Sin embargo, no todas las celdas vacas espacialmente adyacentes pueden agruparse de esta manera. A continuacin describiremos cmo eliminar todas las celdas vacas ordenando todas las celdas (independientemente de si estn vacos). El orden es realmente

un mapeo del espacio de dimensin d desde el cual se dibujan los datos de una dimensin. El mapeo que se elija debe ser invertible. Esto significa que, dada la posicin de una celda en el ordenamiento, debe ser fcil determinar su ubicacin. Cuando las celdas no sean del mismo tamao pero todava resultan de una rejilla fija, entonces, tambin hay que registrar el tamao de las celdas no vacas. Explicaremos ms de dos ordenamientos: el intercalado de bits y la concatenacin de bits. Cuando todos los atributos son ya sea de localizacin o numricos con rangos idnticos, entonces, los ordenamientos son aplicables a los valores de la clave, as como las ubicaciones de las celdas. Por otro lado, cuando algunos de los atributos son no locacionales, entonces, los ordenamientos son aplicables slo a las ubicaciones de las celdas. En este ltimo caso, an tenemos que hacer uso de un mapeo adicional de los rangos reales de los valores de los atributo no locacionales para las ubicaciones de las celdas.

EL INTERCALADO DE BITS

Consiste en tomar las representaciones de bits de los valores de las claves que componen un registro y la formacin de un cdigo consistente en bits de cada valor de clave alternadamente. Por ejemplo, para d = 2, el cdigo correspondiente al punto de datos A = (X, Y) = ( xmxm-1. .. x0 , ymym - 1 ... y0 ) es ymxmym - 1xm - 1 ... y0x0 , donde arbitrariamente consideramos la clave y para ser el ms significativo. Un ejemplo de mapeo de intercalado de bits cuando d = 2 (hemos etiquetado los cdigos correspondientes a las ciudades) se muestra en la figura, que corresponden a la intercalacin de bits el resultado de aplicar el mapeo f definido por f (x) = x 12,5 y f (y) = y 12,5 a los valores de las claves x e y, respectivamente.

El inconveniente del uso de intercalado de bits es el hecho de que no se lleva a cabo de manera eficiente en los equipos generales. Su complejidad depende del nmero total de bits en las claves. As, en d dimensiones, cuando la profundidad mxima es de n, el trabajo requerido es proporcional a d*n. LA CONCATENACIN DE BITS Consiste en la concatenacin de los valores de la clave (por ejemplo, para los datos del punto A, el cdigo concatenado sera ymym - 1 ... 1 ... y0xmxm - 1...x0 ) . La Concatenacin de bits es el mismo que para el orden fila o orden columna (dependiendo de si el valor de la coordenada y o el valor de la coordenada x, respectivamente, se considera el ms significativo) . Es un ordenamiento clsico para el almacenamiento de imgenes y tambin se conoce como la escaneo de trama o escaneo de orden. Debe quedar claro que, a la luz de nuestro inters en la bsqueda de rango, el intercalado de bits es superior a la concatenacin de bits ya que este ltimo resulta en resultados de largos rangos, reducir los rangos de bsqueda, mientras que el primero da lugar a la bsqueda cuadrtica de rangos. Este argumento lleva a la conclusin de que la concatenacin de bits es anlogo al mtodo de la lista invertida, mientras entrelazado de bits es anlogo al mtodo de la red fija. De hecho, los resultados de la concatenacin de bits en los registros " se clasifican de acuerdo a una clave primaria, clave secundaria, y as sucesivamente.

ADAPTANDO UN HASHING LINEAL PARA DATOS MULTIDIMENSIONALES


Se basa en iniciar con una rejilla de celdas de igual tamao, ordenar las celdas utilizando un mapeo desde d dimensiones hasta una dimensin (utilizando ordenamientos unidimensionales como intercalamiento) y luego, si es necesario, la divisin de las celdas de una en una de manera consistente con el orden elegido

hasta que todas las cuadrculas se hayan dividido. Esto da como resultado la creacin de una nueva rejilla de celdas de igual tamao, en cuyo momento se vuelve a aplicar el proceso. Cada cubo est asociado con una sola celda de la cuadrcula. La idea clave detrs de hashing lineal es la desvinculacin de la decisin en cuanto a qu celda se dividi de la identidad de la celda cuyo cubo se ha desbordado. Este es un resultado directo del orden predeterminado en el que las celdas se dividen. Dado que todava tenemos que lidiar con el hecho de que un cubo est demasiado lleno, tenemos dos tipos de cubos: primario y desbordado. Cada celda tiene un cubo primario diferente. Al intentar insertar un punto p de datos cuya celda c tiene un cubo primario que est lleno, entonces se inserta en p un cubo de desbordamiento asociado con c. En general, los cubos de desbordamiento estn encadenados a los cubos primarios. Suponien do que hay m celdas, utilizamos un directorio unidimensional dirigido desde 0 hasta m-1 para acceder a los cubos primarios asociados con las celdas de la cuadrcula. Sin embargo, si hay una correlacin uno-a-uno entre la numeracin de las celdas y las etiquetas de los cubos primarios (como vamos a suponer en nuestro ejemplo), entonces no hay necesidad de un directorio de red. Formalmente, tratamos el espacio subyacente como tener una rejilla completa T impuesta en el, diciendo que est en el nivel n, y una rejilla parcial, T, decimos que est en el nivel n +1, donde algunas de las celdas en T han tenido que ser divididos en dos partes de igual tamao. N denota el nmero de particiones totales de la rejilla que se han aplicado, donde una particin tota l de la rejilla significa que el nmero de celdas de la cuadrcula ha doblado su tamao. Dada una rejilla completa en el nivel n, tenemos m (2^n m 2^(n +1) -1) celdas disjuntas que abarcan todo el espacio subyacente: 2^(n +1) - m de las celdas que son hiperrectangulos d dimensionales de tamao v (tanto en el volumen y la orientacin), mientras que las restantes 2. (m-2^n) celdas son hiperrectangulos d-

dimensionales del tamao v / 2. El conjunto de celdas de tamao v son las que no se han dividido todava. Para que este mtodo funcione, necesitamos un orden para las celdas. Adems, necesitamos una manera de determinar la celda asociada a cada punto de datos. Por otra parte, si no asumimos una correlacin de uno -a-uno entre la numeracin de las celdas y las etiquetas de los cubos primarios, entonces tambin necesitamos una manera de determinar el elemento de directorio asociado a cada celda de modo que el cubo relevante pueda ser accesado. Puesto que estamos utilizando un orden, tendremos que hacer uso de al menos un mapeo desde d dimensiones hasta una dimensin. ENFOQUE UTILIZADO Identificar cada celda c por la ubicacin del punto en el espacio subyacente en la esquina de c que est ms cerca del origen (por ejemplo, la esquina inferior izquierda de los datos de dos dimensiones con un origen en la esquina inferior izquierda del espacio subyacente) y lo denotaremos como l (c). Tambin, haremos que u (c) sea la ubicacin del punto en el espacio subyacente en la esquina de c que est ms lejos del origen (por ejemplo, la esquina superior derecha de los datos de dos dimensiones con un origen en la esquina inferior izquierda del espacio subyacente). Necesitamos dos mapeos. En primer lugar, necesitamos un mapeo g desde d dimensiones hasta una dimensin que asigna un nmero nico a cada punto de datos en d dimensiones (es decir, un orden). Para este mapeo, se utiliza uno de los ordenamientos que se analizaran a continuacin, que satisfaga las propiedades que figuran a continuacin. La ordenacin se implementa de tal manera que el primer elemento en el orden corresponde al punto ms cercano al origen.

1. La posicin en el orden de cada punto p de datos en la celda c es mayor Io igual a la de l(c) (es decir, despus), es decir, g (p) g (l (c)). 2. La posicin en el orden de cada punto p de datos en la celda c es menor o igual a la de u (c) (es decir, antes), es decir, g (p) g (u (c)). 3. La posicin en el orden de cualquier punto de datos que no est en la celda de la cuadrcula c es ya sea antes de que l (c) o despus de la de u (c).

Todas estas propiedades estn satisfechos por ambos: bit intercalado y la concatenacin de bits. Observe que estas propiedades garantizan que el ordenamiento tambin se aplica a las celdas. Para ambos el intercalado de bits y la concatenacin de bits, el ordenamiento tambin indica el orden en el que las celdas se dividen. En particular, el orden de particin es igual al orden de izquierda a derecha en la que los bits de la representacin binaria de las claves se combinan para formar la posicin del punto en el ordenamiento. En segundo lugar, necesitamos un mapeo h desde el representante k de una dimensin de cada punto p y una celda c en una rejilla completa en el nivel n (es decir, k = g (p) y k = g (l (c)), respectivamente) a un nmero en el intervalo de 0 a M-1. El resultado de este mapeo a = h (k) sirve como un ndice en el directorio para acceder a los cubos y es una matriz unidimensional. El mapeo h es tal que las 2^(n +1)- m celdas de tamao V estn asociados con el directorio que se dirige desde m-2^n hasta 2^n -1, y las restantes 2* (m-2n) celdas de tamao v / 2 se asocian con el directorio que se dirige desde 0 hasta m -2^n-1 y 2^n hasta m-1. Cada elemento de directorio de direccin a contiene la identidad de la cubeta correspondiente a la celda asociada con a.

El Hashing lineal implementa la funcin h como dos funciones hash, hn y hn+1. La funcin HN (k) = k mod 2^n se utiliza para acceder a los cubos asociados con las celdas en el directorio direccionadas desde m-2^n hasta 2n-1; hn+1 (k) = k mod 2^(n+1) se utiliza para acceder a los cubos asociados con las celdas en el directorio direccionadas desde 0 hasta m-2^n -1 y los de directorio direccionadas desde 2n hasta m-1. Este tipo de archivo se dice que es de nivel n, n +1 de manera que las celdas que accede hn estn en el nivel n y los visitados por hn+ 1 estn en el nivel n+1. Tenga en cuenta que cuando m = 2^n, hay celdas de la cuadrcula que son accedidas por hn +1. Nuestra adaptacin de hashing lineal para datos multidimensionales requiere una funcin g que tiene la propiedad de que todos los datos punto asociados con un directorio particular de elementos (es decir, la celda de la cuadrcula) estn dentro de un rango determinado (recordemos propiedades 1-3). Por desgracia, este no es el caso cuando se utiliza la funcin de hash HN (k) = k mod 2^n, donde k = g (p). En particular, para cualquier unin de k, HN (k) tiene la propiedad de que todos los puntos en un elemento de directorio dado coinciden en los n bits menos significativos de k. Una funcin hash se utiliza para explicar hashing lineal en el Apndice B. Esto est bien para acceso aleatorio, sin embargo, no soporta eficientemente acceso a archivos secuenciales (en trminos de proximidad espacial) desde diferentes elementos del directorio, y por lo tanto diferentes cubos, que deben ser visitados. Por otro lado, si hn discriminara los bits ms significativos de k, entonces todos los puntos mapeados a un elemento de directorio dado seran dentro de un rango dado y por lo tanto en una misma celda, satisfaciendo de esta manera las propiedades 1-3 del mapeo. Suponiendo que k es de longitud fija (es decir, el nmero bits es fijo) , esto se puede lograr mediante la redefinicin de la funcin hash HN para ser HN ( k ) = inversa ( k ) mod 2^n . Una implementacin de hash lineal que satisface esta propiedad se denomina Hashing lineal con preservacin de orden (OPLH).

En una dimensin, OPLH es anlogo a un trie. Para los datos multidimensionales (por ejemplo, d dimensiones), el mismo efecto se obtiene mediante la combinacin de los bits desde distintas claves (por ejemplo, a travs de la intercalacin, la concatenacin), invirtiendo el resultado, y despus, se realiza una operacin de mdulo. Cuando la combinacin se basa en el intercalamiento de bits, el resultado es anlogo a un trie kd, y su comportamiento para la bsqueda de rango se discute con cierto detalle en la Seccin 1.6. En el resto de esta seccin, se utiliza la combinacin de intercalamiento de bits como la funcin g cuyo resultado se invierte para formar una funcin hash que llamamos intercalamiento de bits invertido, que se utiliza en conjuncin con hashing lineal. Nos referimos a esta combinacin lineal como hash con intercalamiento de bits invertido (LHRBI). EL INTERCALAMIENTO DE BITS INVERTIDO Resulta de la particin del espacio subyacente de una manera cclica. Por ejemplo, suponiendo un bit intercalado con el orden yxyxy ... (la coordenada y es el ms significativo), entonces la primera particin divide cada celda en dos usando la coordenada y , la segunda particin divide cada celda en dos usando la coordenada x , la tercera particin divide cada celda en dos utilizando la coordenada y , y as sucesivamente . Despus de cada particin, el nmero de celdas de la cuadrcula se duplica. Despus de cada ciclo de particiones (es decir, una particin por clave), el nmero de celdas de la cuadrcula crece en un factor de 2^d. Por supuesto, un orden de division diferente podra obtenerse mediante la combinacin de las claves en un orden diferente. Por ejemplo, podramos haber definido una funcin similar, llamada concatenacin de bits invertida, eso sera completar todas las particiones a lo largo de una clave antes de iniciar una particin en otra de las claves. Nos referimos a esta combinacin como hashing lineal con la concatenacin de bits invertido (LHRBC). Sin embargo, invertir la concatenacin de bits tiene el inconveniente de favorecer a algunas de las claves a travs de los otros, y por lo tanto no discutiremos su uso ms aqu.

Ahora, vamos a repasar brevemente los mecanismos de hashing lineal y luego damos un ejemplo de su uso con datos multidimensionales. Recordemos que un archivo implementado usando hashing lineal tiene cubos primarios y de desbordamiento. Una cubeta primaria est asociado con cada celda de la cuadrcula. El factor de utilizacin del almacenamiento, , se define como la relacin entre el nmero de registros (es decir, puntos) en el archivo y el nmero de posiciones disponibles en los cubos primarios y de desbordamiento existentes.

Cuando el factor de utilizacin de almacenamiento excede a un valor predeterminado, por ejemplo , entonces una de las celdas de la cuadrcula se divide. Cuando la celda de la cuadrcula c asociada con el elemento de directorio en la direccin B se divide, sus registros se rehashed usando hn+1 y se distribuyen en los cubos de las celdas asociadas con los elementos de directorio en las direcciones B y b+2^n. La identidad del elemento de directorio correspondiente a la siguiente celda a ser dividida es mantenida por el puntero s con los ciclos con valores desde 0 hasta 2^n - 1. Cuando s llega a 2^n, todas las celdas de la cuadrcula en el nivel n se han dividido, lo que hace que se incremente n y s vuelve a ponerse a 0.

Es importante observar que una divisin de celda no se produce necesariamente cuando se inserta un punto en una celda cuya cubeta principal est llena; ni siquiera el cubo principal de la celda que se divide tiene que estar llena. Sin embargo, la justificacin del uso de hashing lineal es que con el tiempo cada cubo se dividir, y, de ser posible, todos los cubos de desbordamiento se vaciarn. Esto es una lgica similar a la existente para el anlisis de algoritmos utilizando el mtodo de amortizacin [163].

Como un ejemplo de la divisin que se produce cuando g es la intercalacin de bits, considere, de nuevo, los puntos establecidos de la figura 1.1 despus de la

aplicacin de la funcin f (x) = x /12,5 y f (y) = y 12,5 para los valores de las coordenadas x e y, respectivamente. El resultado de este mapeo se da en las columnas 4 y 5 de la figura. A continuacin, aplicar el entrelazado invertido a sus claves para producir los mapeos indicados en las columnas 6 y 7 de la figura, dependiendo de si se toma la coordenada x como el ms significativo (columna 6 etiquetados CODEX) o la coordenada y (columna 7 tanto hacer uso de los valores de la columna 7. etiquetados CodeY). En nuestro ejemplo, tratamos la coordenada y como el ms significativo y por lo

Suponga que los cubos primarias y desbordamiento son tanto de tamao 2 y que un cubo se dividir cada vez que , el factor de utilizacin del almacenamiento, es mayor que o igual a 0.66 (es decir, = 0,66). Tambin asumimos que hay una correlacin uno-a-uno entre la numeracin de las celdas de la cuadrcula y las etiquetas de los cubos primarios y por lo tanto no hay necesidad de un directorio para la red. Por lo tanto, usamos nmeros para referirse tanto a las celdas de la cuadrcula y los cubos primarios asociados con ellos. Insertaremos las ciudades en el orden Chicago, Mobile, Toronto, Buffalo, Denver, Omaha, Atlanta y Miami da la particin de la base de datos que se muestra en la Figura, la cual cuenta con seis cubos primarios, etiquetados 0-5, y dos cubos de desbordamiento. Para

explicar el proceso de divisin, se examina ms de cerca cmo se obtuvo la Figura.

Inicialmente, el archivo se compone de slo la celda 0 y el cubo 0, que est vaco. El archivo es de nivel de 0,1. El puntero a la siguiente celda de la cuadrcula para ser dividido, s, se inicializa a 0. Chicago y Mobile, que se encuentran en la celda 0, se inserta en el cubo 0, lo que da = 1,00. Esto provoca que la celda 0 se divida y el cubo 1 se asigne. s conserva su valor de 0, y ambos Chicago y Mobile permanecen en el cubo de 0 (vase la figura 1.99 (a)). Toronto se encuentra en la celda 1 y se inserta en el cubo 1. Sin embargo, ahora = 0,75; causando con ello que la celda 0 se divida, s se establece en 1, el cubo 2 se asigna, y Mobile es colocado en el (vase la figura 1.99 (b)). Nuestro archivo es ahora de nivel 1,2.

A continuacin, tratamos de insertar Buffalo, que se encuentra en la celda 1 y por lo tanto, se inserta en el cubo 1. Sin embargo, ahora = 0,67, provocando de este modo que la celda 1 se divida, s se vuelve a poner a 0, el cubo 3 es asignado, y Toronto y Buffalo son colocados en el (vase la figura 1.99 (c)). Denver se encuentra en la celda 0, y se inserta en el cubo 0. Omaha se encuentra en la celda 0, y por lo tanto se inserta en el cubo 0. Sin embargo, ahora = 0,75, lo que provoca a la celda 0 a dividirse, s que se establece en 1, el cubo 4 se asignar y Denver y Chicago se muevan a l. Nuestro archivo es ahora de nivel 2,3. Desafortunadamente, Omaha tambin se encuentra en celda de la cuadrcula 4, pero el cubo 4 est lleno y por lo tanto un cubo de desbordamiento debe atribuirse y unirse a la celda 4, y Omaha se coloca en ella (vase la figura 1.99 (d)). Atlanta se encuentra en la celda 2 y se coloca en el cubo 2. Miami tambin se encuentra en celda 2 y se coloca en el cubo 2. Sin embargo, ahora = 0,67, lo que provoca a la celda 1 a dividirse, s se establece en 2, y el cubo 5 se asigna. Despus de la divisin de la celda, todava tenemos demasiados elementos en el cubo 2, y por lo tanto un cubo de desbordamiento debe atribuirse y asignarse a la celda 2, y Miami se coloca en el mismo

Das könnte Ihnen auch gefallen