Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
.
.
. y cada mensaje incluye
una lista de comentarios
Podemos almacenar una pizarra en un par formado por un árbol de búsqueda binario equilibrado (AVL) de
alumnos, usando el identificador del alumno como clave de búsqueda, y una tabla hash de asignaturas, usando
el código de asignatura como clave de búsqueda. Cada nodo de alumno del árbol incluirá, en particular, una
lista de códigos de asignaturas en las que está matriculado el alumno. Cada asignatura incluirá, en particular,
una lista de mensajes (ordenada por fecha-hora y apuntada al primero y al último de la lista). Cada mensaje de
cada lista incluirá, en particular, una lista de comentarios (ordenada por fecha-hora y apuntada al primero y al
último).
{fecha y hora}
tipos
fecha = registro
día,mes,año:entero
freg
hora = registro
hora,minuto,segundo:entero
freg
{comentario y lista de comentarios con puntero al 1º y al último}
tipos
comentario = registro
fechaComen:fecha;
horaComen:hora;
autorComen:entero; {identificador del autor}
textoComen:cadena;
freg
puntNodoComentario = nodoComentario
nodoComentario = registro
dato:comentario;
sig:puntNodoComentario
freg
listaComentarios = registro
primero,último:puntNodoComentario
freg
A continuación se presentan como ejemplo dos alternativas de implementación que se diferencian en el cálculo y
detección del cumplimiento de la condición requerida sobre los productos de los nodos de los caminos.
Alternativa A:
Alternativa B:
variables respIzq,respDer:booleano;
principio
T[nivel]:=T[nivel]+a.dato;
prodAcu:=prodAcu*a.dato;
selección
a.izq=nil and a.der=nil: respuesta:=(prodObj=prodAcu);
a.izqnil and a.der=nil: testRec(a.izq, prodObj, prodAcu, respuesta, nivel+1, T);
a.izq=nil and a.dernil: testRec(a.der, prodObj, prodAcu, respuesta, nivel+1, T);
a.izqnil and a.dernil: testRec(a.izq, prodObj, prodAcu, respIzq, nivel+1, T);
testRec(a.der, prodObj, prodAcu, respDer, nivel+1, T);
respuesta:=respIzq and respDer
fselección
fin
El procedimiento testRec realiza un recorrido del árbol (recursivo), es decir cada nodo del árbol se visita sólo una vez, y
todas las operaciones que se realizan para cada nodo del árbol son simples, de coste O(1), por tanto el coste de testRec es
O(N) siendo N el número de nodos del árbol.
El coste de la función test será el coste de su llamada a testRec, más el coste de inicializar la tabla para las sumas de
los niveles, más el coste de escribir en pantalla los resultados calculados en la tabla, en ambos casos el coste es lineal en el
tamaño de la tabla O(K). Si el valor de K dado es una buena cota para la altura del árbol (puede ser mayor que la altura
del árbol pero al menos no es mucho mayor que N), al simplificar podemos asumir que K es aproximadamente la altura
del árbol, y sabemos que la altura del árbol binario es en el mejor de los casos log2N (árbol completo) o N–1 (árbol
degenerado). Por lo tanto, el coste asintótico de la función test es O(N).