09.05.2013 Views

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

17.6. Ejercicios 389<br />

Árboles g<strong>en</strong>erales<br />

En el apartado 17.4 se han estudiado los árboles binarios; esta estructura se<br />

puede g<strong>en</strong>eralizar a estructuras <strong>en</strong> las que los nodos pued<strong>en</strong> t<strong>en</strong>er más de dos<br />

subárboles hijos. Esta g<strong>en</strong>eralización puede hacerse de dos formas distintas:<br />

1. Pasando a árboles n-arios, <strong>en</strong> los que cada nodo ti<strong>en</strong>e a lo sumo n subárboles<br />

hijos.<br />

Un árbol árbol n-ario se puede repres<strong>en</strong>tar como un árbol de registros de<br />

n compon<strong>en</strong>tes, o bi<strong>en</strong> como un vector de subárboles.<br />

2. Considerando árboles g<strong>en</strong>erales, <strong>en</strong> los que no existe limitación <strong>en</strong> el número<br />

de subárboles hijo que puede t<strong>en</strong>er.<br />

Los árboles g<strong>en</strong>erales se implem<strong>en</strong>tan mediante un árbol de listas (puesto<br />

que no se sabe el número máximo de hijos de cada nodo).<br />

La elección de un tipo de árbol o de otro dep<strong>en</strong>de del problema particular<br />

que se esté tratando: el uso de registros acelera el acceso a un hijo arbitrario;<br />

sin embargo, un número elevado de registros puede consumir bu<strong>en</strong>a parte de la<br />

memoria disponible. El otro <strong>en</strong>foque, el de un árbol g<strong>en</strong>eral, resulta apropiado<br />

para evitar el derroche de memoria si no se usa la mayoría de los campos de los<br />

registros con la contrapartida de un mayor tiempo de acceso a los nodos.<br />

Entre las aplicaciones típicas de los árboles g<strong>en</strong>erales se <strong>en</strong>cu<strong>en</strong>tran los árboles<br />

de juegos o los árboles de decisión. Veamos brevem<strong>en</strong>te qué se <strong>en</strong>ti<strong>en</strong>de por un<br />

árbol de juego (de mesa, como, por ejemplo, las damas o el ajedrez):<br />

La raíz de un árbol de juegos es una posición de las fichas <strong>en</strong> el tablero; el<br />

conjunto de sus hijos lo forman las distintas posiciones accesibles <strong>en</strong> un movimi<strong>en</strong>to<br />

desde la posición anterior. Si no es posible realizar ningún movimi<strong>en</strong>to<br />

desde una posición, <strong>en</strong>tonces ese nodo no ti<strong>en</strong>e desc<strong>en</strong>di<strong>en</strong>tes, es decir, es una<br />

hoja; como ejemplo de árbol de juegos, <strong>en</strong> la figura 17.16 se muestra un árbol<br />

para el juego del tres <strong>en</strong> raya, repres<strong>en</strong>tando una estrategia que permite ganar<br />

siempre al primero <strong>en</strong> jugar.<br />

Convi<strong>en</strong>e saber que no es corri<strong>en</strong>te razonar sobre juegos desarrollando explícitam<strong>en</strong>te<br />

todo el árbol de posibilidades, sino que suele “recorrerse” implícitam<strong>en</strong>te<br />

(hasta cierto punto) al efectuarse llamadas de subprogramas recursivos.<br />

17.6 Ejercicios<br />

1. Escriba una versión iterativa de la función longitud de una lista.<br />

2. Se d<strong>en</strong>omina palíndromo una palabra o frase que se lee igual de izquierda a derecha<br />

que de derecha a izquierda. Por ejemplo,

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!