Está en la página 1de 7

Modelos y Conceptos de Programacin o

Gustavo Gutirrez e 23 de noviembre de 2006

1.

Lineamientos

Este proyecto constituye el 20 % de la nota del curso Modelos y conceptos de programacin. Debe ser entregada a ms tardar1 el d 11 de Diciembre de 2006 a las o a a 12:00 m. La entrega se debe hacer de manera f sica en un sobre que contenga un documento y el programa en algn medio de almacenamiento. u

2.

Descripcin del problema o

Existen diferentes estructuras para modelar diccionarios de palabras, entre estas se cuenta con rboles alfabticos, donde cada nodo del rbol tiene un hijo por cada letra a e a del alfabeto. En este trabajo se debe implementar esta estructura de datos y proveer un conjunto de operaciones que permitan acceso concurrente utilizando las tcnicas e vistas en clase.

2.1.

Arboles alfabticos e

Un rbol alfabtico es una estructura de datos que permite almacenar palabras de un a e lenguaje particular. Para el propsito del presente trabajo solamente se consideraran o 26 letras, sin embargo, durante la explicacin del proyecto solamente se utilizar el o a alfabeto {a, e, s, t, n}. Un rbol alfabtico esta compuesto por nodos que tienen un a e conjunto de hijos, y cada hijo es a su vez un nodo. Para este caso, el nmero mximo u a
1

Se penalizar con 10 % sobre la nota por cada d de retraso. a a

de hijos es el nmero de letras del alfabeto. Cada nodo del rbol tiene una bandera u a que indica si el nodo representa o no la terminacin de una palabra. o

a e s

Figura 1: Nodo de un rbol alfabtico (suponiendo alfabeto simplicado), si el circulo a e est coloreado quiere decir que el nodo representa el n de una palabra. a Las palabras son almacenadas (recursivamente) en el rbol mediante las conexiones a de cada nodo con sus hijos. Si la palabra a insertar tiene longitud cero, el nodo es marcado para representar el nal de la palabra. De cualquier otra forma, se considera la adicin de la primera letra y recursivamente se adiciona el resto de la palabra. Si o al insertar la palabra uno de los nodos no existe, el procedimiento de insercin los o debe crear. La Figura 2 muestra la insercin paso a paso de cada una de las letras de la palabra o estar a partir de un rbol vac Por su parte, la Figura 3 muestra el rbol resultante a o. a de las insercin de las palabras: estar, estaran, es, esta, esa, tener. o Algunas de las propiedades de un rbol alfabtico son: a e S los hijos de cada nodo estn ordenados alfabticamente es sencillo imprimir a e recursivamente todas las palabras del rbol alfabticamente. a e Encontrar las palabras que tengan un prejo comn es sencillo debido a que u estn agrupadas en un sub-rbol. a a

2.2.

Operaciones a implementar

A continuacin se enumeran las operaciones (en forma de funciones) que deben ser o implementadas. Estas operaciones pueden ser funciones o mtodos de clases. En e cualquier caso se debe justicar la decisin. o {NewAlphaTree ?AT}. Esta funcin debe retornar un rbol alfabtico vac o a e o.

"e" + "star"
a e s t n r

"s" + "tar"
a e s t n r

"t" + "ar"
a e s t n r

"a" + "r"
a e s t n r

"r" + ""
a e s t n r

""
a e s t n r

a e s

a e s

a e s

a e s

a e s

a e s

a e s

a e s

a e s

a e s

a e s

a e s

a e s

a e s

a e s

Figura 2: Insercin de la palabra star o

a e s

a e s

a e s

a e s

a e s

a e s

a e s

a e s

a e s

a e s

a e s

a e s

a e s

a e s

4 Figura 3: Arbol alfabtico con las palabras: estar, estaran, esta, es, esa, tener, ten. e

{AddWord AT W ?B}. Adiciona la palabra W al rbol AT si esta no existe y a retorna true. De lo contrario retorna false. {IsWord AT W ?B}. Retorna true si la palabra W se encuentra en el rbol a AT de lo contrario, retorna false. {DeleteWord AT W ?B}. Borra la palabra W del rbol AT y retorna true. a S la palabra no se encuentra en el rbol, esta funcin retorna false. a o {Print AT}. Imprime en pantalla todo el contenido del diccionario ordenado alfabticamente. e {PrintPrex AT Pr}. Imprime todos las palabras del rbol AT que tengan a como prejo Pr. {Interrupt AT T}. Hace que la estructura no sea accesible durante un tiempo T.

2.3.

Agentes concurrentes

Sobre el diccionario pueden actuar concurrentemente diferentes agentes de manera concurrente. Los conceptos vistos durante la ultima parte del curso (concurrencia de estado compartido) deben ser aplicados para garantizar un correcto funcionamiento de la estructura. Recuerde que el objetivo no es eliminar la concurrencia sino permitir tanta concurrencia como sea posible. Para lograr una interaccin interesante de los agentes, cada agente debe tener asoo ciado un retardo de operacin y una lista de acciones a realizar. Estas acciones deben o comenzar despus de haber ocurrido el retardo y no desde su creacin. e o La forma de modelar los agentes concurrentes debe ser a travs de transacciones. e Esto debe involucrar la ejecucin justa, es decir, debe haber un orden en la ejecucin o o de las transacciones que sea coherente con el tiempo en que cada una de ellas fue creada.

2.4.

Interfaz grca a

El programa presentado debe contar con una interfaz grca para facilitar su uso. a Esta interfaz debe permitir:

Visualizacin en todo momento del estado de la estructura que almacena las o palabras. Visualizacin o diferenciacin de los nodos que en cada momento estn siendo o o a accedidos por agentes concurrentes. Visualizacin de los nodos que estn siendo accedidos por los diferentes agentes. o a Identicacin de los diferentes tipos de agentes que pueden actuar sobre la o estructura. Creacin de nuevos agentes que puedan ejecutar una o ms operaciones sobre o a la estructura. Creacin aleatoria de agentes de diferentes tipos que realicen operaciones sobre o la estructura. Es necesario contar con una interfaz grca para visualizar la actuacin de los agentes a o sobre la estructura. Esta parte es de gran importancia y omitirla implica una gran dicultad al realizar las pruebas durante la sustentacin del trabajo. o

3.

Criterios de calicacin o

Los siguientes aspectos sern tenidos en cuenta a la hora de la calicacin: a o Correctitud: Signica que su implementacin debe prevenir interferencia entre o agentes que actuen concurrentemente. Adems se deben garantizar las proa piedades de safety: en ningn momento el programa o sus estructuras deben u alcanzar estados invlidos y liveness: todos los agentes que se ejecutaron dea ben alcanzar su terminacin. El documento presentado debe argumentar por o qu estas propiedades se mantienen con la implementacin propuesta. e o Concurrencia: Se debe garantizar acceso concurrente a las estructuras de datos del programa tanto como sea posible sin ir en contra de la correctitud. En el documento presentado se debe argumentar como se logra el grado de concurrencia de la implementacin y debe justicar por qu no es posible proveer una mayor o e concurrencia de las operaciones. Claridad: Tanto el documento como el cdigo fuente del programa deben ser claros o y fciles de entender. El cdigo debe estar bien documentado y se deben utia o lizar nombres signicativos para los procedimientos. El reporte debe describir 6

claramente las decisiones tomadas y una justicacin de por qu estas llevan a o e una implementacin correcta y concurrente. o