Auxs: Carla Paredes, Javier Gonzales, Rodrigo Paredes
Problema 1:
Se define una skipList como
una lista enlazada en donde, además de la referencia al siguiente nodo, cada
elemento puede tener otras referencias a nodos posicionados más adelante en la
lista. Un ejemplo de este tipo de lista es el siguiente:
Se le pide que implemente un método de búsqueda de un elemento en una skipList. Si el elemento no se encuentra, retorne null.
Suponga que la estructura de una skipList es la siguiente:
class skipList {
int llave;
int k; // número de referencias del nodo, cantidad de niveles
skipList[] ref;
Object info;
int maxlevel;
// constructor de lista vacia
public skipList (int level) {
maxlevel = level;
llave = -1; // o algún valor que signifique NULL
info = NULL;
ref = new skipList[maxlevel];
for (int j = 0; j < k ; j++) ref[j] = null;
}
// constructor de lista con un elemento
public skipList (Object info, int max, int llave) {
if (max > maxlevel) max = maxlevel;
this.k = max;
this.llave = llave;
this.info = info;
ref = new skipList[k];
for (int j = 0; j < k ; j++) ref[j] = null;
}
}
Solución:
Object buscar(int x){
skipList raiz = this;
int k = maxlevel;
while (true) {
if (raiz.ref[k] != NULL) && (raiz.ref[k].llave <= x)
// verifico si el siguiente nodo al nivel k es menor o mayor
// al elemento buscado x, si es mayor paso al siguiente en el
// nivel
raiz = raiz.ref[k];
else if (k>0) k--;
// el siguiente del nivel es mayor que el buscado, bajo un nivel
else if (k==0) && (raiz.llave >= 0)
// estoy en el nivel 0, corto el while si encontre a la llave
// o ya llegue a un nodo mayor que la llave
break;
}
// si encontre la llave la retorno
if (raiz.llave == x) return info;
// este es el valor de retorno cuando no encuentro la llave
return NULL;
}
Problema 2:
Suponga que tiene una estructura de datos compuesta por 2 subestructuras:
ABD {
ABD hijo0, hijo1; // puntero a hijo 0 e hijo 1
Info datos; // punto a una hoja en disco
}
Proponga una codificación binaria para las llaves y muestre el proceso:EJEMPLO DE INSERCION
Solución:
Consideremos la siguiente codificación:
A 00001 K 01011 T 10101
B 00010 L 01100 U 10110
C 00011 M 01101 V 10111
D 00100 N 01110 W 11000
E 00101 Ñ 01111 X 11001
F 00110 O 10000 Y 11010
G 00111 P 10001 Z 11011
H 01000 Q 10010
I 01001 R 10011
J 01010 S 10100
Con esto la secuencia de inserción sería:

0: E J E M P, revienta con la L

0: E J E M L, revienta con la D
1: P O

0: E E D E E, revienta con la C
1: P O S R
2: J M L I N

0: C
1: P O S R
2: J M L I N, revienta con la I
3: E E D E E

0: C
1: P O S R O
2: J I I
3: E E D E E
4: M L N N