You are on page 1of 46

UNIDAD II ARBOLES

2.1 DEFINICIN DE UN RBOL:


Un grafo que no tiene ciclos y que conecta a todos los puntos, se llama un rbol. En un grafo con n vrtices, los rboles tienen exactamente n - 1 aristas, y hay nn-2 rboles posibles. Su importancia radica en que los rboles son grafos que conectan todos los vrtices utilizando el menor nmero posible de aristas. Un importante campo de aplicacin de su estudio se encuentra en el anlisis filogentico, el de la filiacin de entidades que derivan unas de otras en un proceso evolutivo, que se aplica sobre todo a la averiguacin del parentesco entre especies; aunque se ha usado tambin, por ejemplo, en el estudio del parentesco entre lenguas.
En teora de grafos, un rbol es un grafo en el que dos vrtices estn conectados por exactamente un camino. Un bosque es un grafo en el que dos vrtices cualquiera estn conectados por como mximo un camino. Un rbol a veces recibe el nombre de rbol libre.

Definiciones
Un rbol es un grafo simple unidireccional G que satisface alguna de las siguientes condiciones equivalentes:

G es conexo y no tiene ciclos simples. G no tiene ciclos simples y, si se aade alguna arista se forma un ciclo simple. G es conexo y si se le quita alguna arista deja de ser conexo. G es conexo y el grafo completo de 3 vrtices K3 no es un menor de G. Dos vrtices cualquiera de G estn conectados por un nico camino simple.

Si G tiene muchos vrtices, n, entonces las definiciones anteriores son tambin equivalentes a cualquiera de las siguientes condiciones:

G es conexo y tiene n 1 aristas. G no tiene aristas simples y tiene n 1 aristas. La cantidad de hojas de un rbol siempre es mayor o igual a la mitad de la totalidad de los nodos

En grfico unidireccional simple G se recible el nombre de bosque si no tiene ciclos simples. Un rbol dirigido es un grafo dirigido que sera un rbol si no se consideraran las direcciones de las aristas. Algunos autores restringen la frase al caso en el que todos las aristas se dirigen a un vrtice particular, o todas sus direcciones parten de un vrtice particular.

Un rbol recibe el nombre de rbol con raz si cada vrtice ha sido designado raz, en cuyo caso las aristas tienen una orientacin natural hacia o desde la raz. Los rboles con raz, a menudo con estructuras adicionales como orden de los vecinos de cada vrtice, son una estructura clave en informtica; vase rbol (programacin). Un rbol dirigido es una estructura jerrquica, organizada y dinmica, Jerrquica porque los componentes estn a distinto nivel, Organizada porque importa la forma en que est dispuesto el contenido y Dinmica porque su forma, tamao y contenido pueden variar durante la ejecucin. Si hay un camino de A hasta B, se dice que A es antecesor de B, y que B es sucesor de A. Padre es el antecesor inmediato de un nodo Hijo, cualquiera de sus descendientes inmediatos. Descendiente de un nodo, es cualquier sucesor de dicho nodo. Hermano de un nodo, es otro nodo con el mismo padre. Generacin, es un conjunto de nodos con la misma profundidad. Raz es el nodo que no tiene ningn predecesor (sin padre). Hoja es el nodo que no tiene sucesores (sin hijos) (Terminal). Los que tienen predecesor y sucesor se llaman nodos interiores. Rama es cualquier camino del rbol. Bosque es un conjunto de rboles desconectados. Nivel o profundidad de un nodo, es la longitud del camino desde la raz hasta ese nodo. El nivel puede de}irse como 0 para la raz y nivel (predecesor)+1 para los dems nodos. Los nodos de la misma generacin tienen el mismo nivel. Grado de un nodo, es el nmero de flechas que salen de ese nodo (hijos). El nmero de las que entran siempre es uno. Grado de un rbol, es el mayor grado que puede hallarse en sus nodos. Longitud del camino entre 2 nodos: es el nmero de arcos que hay entre ellos.

Un rbol etiquetado es un rbol en el que cada vrtice tiene una nica etiqueta. Los vrtices de un rbol etiquetado de n vrtices reciben normalmente las etiquetas {1,2, ..., n}. Un rbol regular ( homogneo) es un rbol en el que cada vrtice tiene el mismo grado. Vase grafo regular.

Un rbol etiquetado con 6 vrtices y 5 aristas

Ejemplo
En rbol de ejemplo mostrado a la derecha tiene 6 vrtices y 6 1 = 5 aristas. El nico camino simple que conecta los vrtices 2 y 6 es 2-4-5-6.

Propiedades
Todo rbol es a su vez un grafo bipartito. Todo rbol con slo un conjunto contable de vrtices es adems un grafo plano. Todo grafo conexo G admite un rbol de cobertura, que es un rbol que contiene cada vrtice de G y cuyas aristas son aristas de G. Dado n vrtices etiquetados, hay n n2 maneras diferentes de conectarlos para construir un grafo. El resultado se llama frmula de Cayley. El nmero de rboles con n vrtices de grado d1,d2,...,dn es:

que es un coeficiente multinomial.

No se conoce frmula para el nmero t(n) de rboles con n vrtices de un isomorfismo de grafos. Sin embargo, el comportamiento asinttico de t(n) se conoce; hay nmeros 3 y 0.5 tales que

INTRODUCCIN
Los rboles forman una de las subclases de grficas que ms se utilizan. La ciencia de la computacin hace uso de los rboles ampliamente, especialmente para organizar y relacionar datos en una base de datos. Los rboles surgen en problemas tericos como el tiempo ptimo para ordenar.

2.2 TERMINOLOGA Y CARACTERIZACIN DE LOS RBOLES


Un rbol T (libre) es una grfica simple que satisface lo siguiente; si v y w son vrtices en T, existe una trayectoria simple nica de v a w. Se muestra un ejemplo:

Un rbol con raz es un rbol en el que un vrtice especfico se designa como raz, se presenta un ejemplo:

Como la trayectoria simple de la raz a cualquier vrtice dado es nica, cada vrtice esta en un nivel determinado de manera nica. As, el nivel de la raz es el nivel 0, los vrtices que estn debajo de la raz estn en el nivel 1, y as sucesivamente. Por lo tanto podemos decir que: el nivel de un vrtice v es la longitud de la trayectoria simple de la raz a v. La altura de un rbol con raz es el nmero mximo de nivel que ocurre. Ejemplo: Tomando como referencia el grfico del rbol con raz determine el nivel del vrtice a, b, g y determine tambin la altura del rbol. Para el vrtice a su nivel es 0 Para el vrtice b su nivel es 1 Para el vrtice g su nivel es 2 La altura del rbol es de 2. Ejercicio: Construya dos rboles libres uno de 7 vrtices y el otro de 5 vrtices, luego determine cuantas aristas tiene cada rbol.

2. 3 RBOLES DE EXPANSIN

Un rbol T es un rbol de expansin de una grfica G si T es una subgrfica de G que contiene a todos los vrtices de G. Una grafica G tiene un rbol de expansin si y solo si G es conexa. El rbol de expansin para la grafica G que se presenta, se muestra con lnea seguida.

Existen dos mtodos para encontrar el rbol de expansin de una grafica G: 1. Por bsqueda a lo ancho: permite procesar todos los vrtices en un nivel dado antes de moverse al nivel ms alto que lo sigue; primero se selecciona un orden de los vrtices, considerando el primer vrtice de ese orden como raz. 2. Por bsqueda en profundidad: o conocido tambin como de regreso. Ejemplo Utilice la bsqueda a profundidad con el orden h, g, f, e, d, c, b, a de los vrtices para determinar un rbol de expansin de la grafica G. Tomado h como vrtice raz tenemos:

rboles de expansin mnimo

Un rbol de expansin comprende un grafo que posee nodos, arcos cada uno con longitud (peso) no negativa. Para encontrar el rbol de expansin mnima se debe recorrer todos los vrtices del rbol en el que la suma de los pesos de sus aristas sea mnima, no se incluyen ciclos en la solucin. Un rbol de expansin mnima de G es un rbol de expansin de G con peso mnimo. Algoritmo de la ruta ms corta en un rbol Se lo obtiene aplicando el algoritmo de Dijkstra, al recorrer el rbol se lo hace desde un Vo a un Vf por las aristas cuyos pesos sean menores y la suma del recorrido sea menor, no es necesario que se abarque todos los vrtices. Ejemplo: Determine el rbol de expansin mnimo para la grfica de la pgina 405 del texto base ejercicio 4. Utilizando el algoritmo de la ruta ms corta. Luego de haber recorrido las diferentes alternativas de la grfica propuesta en el texto bsico obtenemos como resultado la que se muestra:

Si realizamos la suma de sus pesos es de 35; sumatoria mnima. Ejercicio: Realice el mismo ejercicio propuesta anteriormente utilizando el algoritmo de Prim.

rbol de expansin

Un rbol de expansin (aristas azules gruesas) de un grafo de rejilla.

En el campo matemtico de la teora de grafos, un rbol de expansin T de un grafo conexo, no dirigido G es un rbol compuesto por todos los vrtices y algunas (quiz todas) de las aristas de G. Informalmente, un rbol de expansin de G es una seleccin de aristas de G que forman un rbol que cubre todos los vrtices. Esto es, cada vrtice est en el rbol, pero no hay ciclos. Por otro lado, todos los puentes de G deben estar contenidos en T.

Un rbol de expansin de un grafo conexo G puede ser tambin definido como el mayor conjunto de aristas de G que no contiene ciclos, o como el mnimo conjunto de aristas que conecta todos los vrtices. En ciertos campos de la teora de grafos es til encontrar el mnimo rbol de expansin de un grafo ponderado. Tambin se han abordado otros problemas de optimizacin relacionados con los rboles de expansin, como el mximo rbol de expansin, el mximo rbol que cubre al menos k vrtices, el mnimo rbol de expansin con k aristas por vrtice como mximo (rbol de expansin de mnimo grado, MDST por sus siglas en ingls), el rbol de expansin con el mximo nmero de hojas (estrechamente relacionado con el problema del menos conjunto dominante y conexo), el rbol de expansin con el menor nmero de hojas (relacionado con el problema del camino hamiltoniano), el rbol de expansin de mnimo dimetro o el rbol de expansin de la mnima dilacin.

Ciclos fundamentales y cortes fundamentales


Si se aade una sola arista a un rbol de expansin, se crea un ciclo: los ciclos de ese tipo se denominan ciclos fundamentales. Hay un ciclo fundamental distinto para cada arista; es decir, hay una correspondencia biyectiva (uno a uno) entre ciclos fundamentales y aristas ausentes del rbol de expansin. Para un grafo conexo con V vrtices, cualquier rbol de expansin tiene V-1 aristas, y as, un grafo con E aristas tiene E-V+1 ciclos fundamentales. En cualquier rbol de expansin dado, esos ciclos forman una base del espacio de ciclos. De manera dual a la nocin de ciclo fundamental, existe el concepto de corte fundamental. Al eliminar una arista del rbol de expansin, los vrtices se dividen en dos conjuntos disjuntos (desconectados). El corte fundamental se define como el conjunto de aristas que deben ser eliminados de un grafo G para llegar a la misma divisin. Por tanto, hay exactamente V-1 cortes fundamentales en un grafo, uno por cada arista del rbol de expansin. La dualidad entre cortes y ciclos fundamentales se manifiesta al observar que las aristas de un ciclo que no pertenece al rbol de expansin slo pueden aparecer en los cortes de otras aristas del ciclo, y viceversa: las aristas en un corte slo pueden aparecer en aquellos ciclos no contenidos en la arista correspondiente al corte.

Bosques de expansin
Un bosque de expansin es un tipo de subgrafo que generaliza el concepto de rbol de expansin. Hay dos definiciones de uso comn:

Segn la primera, un bosque de expansin es un subgrafo que consiste en un rbol de expansin en cada componente conexo del grafo (equivalentemente, es un subgrafo libre de ciclos maximal). Esta definicin es frecuente en informtica y optimizacin, as como la que se emplea habitualmente al tratar los bosques mnimos de expansin, la generalizacin a subgrafos disconexos de rboles de expansin minimales. Otra definicin, empleada en teora de grafos, es la de un bosque de expansin es un subgrafo que es a la vez bosque (es decir, no contiene ciclos) y de expansin (es decir, incluye a todos los vrtices).

Conteo de rboles de expansin


El nmero t(G) de rboles de expansin de un grafo conexo es un invariante importante. En algunos casos, es fcil calcular t(G) directamente, y es un elemento de uso frecuente en estructuras de datos en distintos lenguajes de programacin. Trivialmente, si G es un rbol, entonces t(G)=1. Si G es un ciclo Cn con n vrtices, entonces t(G)=n. Para un grafo genrico G, el nmero t(G) puede obtenerse a travs del teorema de matriz-rbol de Kirchhoff. La frmula de Cayley es una frmula para obtener el nmero de rboles de expansin en un grafo completo Kn con n vrtices. La frmula establece que t(Kn) = nn 2. Otra prueba de la frmula de Cayley es la existencia de exactamente nn 2 rboles etiquetados con n vrtices. La frmula de Cayley puede ser demostrada mediante el teorema de matriz-rbol de Kirchhoff o mediante el cdigo de Prfer. Si G es un grafo completo bipartido Kp,q, entonces se cumple t(G) = pq 1qp 1. Si G es el grafo hipercbico n-dimensions Qn, entonces se verifica que son tambin corolarios del teorema matriz-rbol. . Estas frmulas

Si G es un multigrafo y e es una arista de G, entonces el nmero t(G) satisface la recurrencia de supresin-contraccin: t(G) = t(G e) + t(G / e) donde G-e es el multigrafo que se obtiene al eliminar la arista e, y G/e es la contraccin de G sobre e, en la que las mltiples aristas de esta contraccin no son eliminadas.

rboles de expansin uniforme


Un rbol de expansin escogido aleatoriamente, con igual probabilidad, entre todos los rboles de expansin se denomina rbol de expansin uniforme (AEU). Este modelo ha sido ampliamente investigado en los mbitos de la Probabilidad y la Fsica matemtica.

Algoritmos
El algoritmo clsico para los rboles de expansin, Depth-First Search (DFS, bsqueda priorizando la profundidad en espaol), fue diseado por Robert Tarjan. Otro algoritmo relevante est basado en la bsqueda priorizando la amplitud (Breadth-First Search, BFS).

rbol recubridor mnimo

Un ejemplo de rbol recubridor mnimo. Cada punto representa un vrtice, cada arista est etiquetada con su peso, que en este caso equivale a su longitud.

Dado un grafo conexo, un rbol recubridor mnimo de ese grafo es un subgrafo que tiene que ser un rbol y contener todos los vrtices del grafo inicial. Cada arista tiene asignado un peso proporcional entre ellos, que es un nmero representativo de algn objeto, distancia, etc.. , y se usa para asignar un peso total al rbol recubridor mnimo computando la suma de todos los pesos de las aristas del rbol en cuestin. Un rbol recubridor mnimo o un rbol expandido mnimo es un rbol recubridor que pesa menos o igual que otros rboles recubridores. Todo grafo tiene un bsque recubridor mnimo.

Un ejemplo sera una compaa de cable trazando cable a una nueva vecindad. Si est limitada a trazar el cable por ciertos caminos, entonces se har un grafo que represente los puntos conectados por esos caminos. Algunos de estos caminos podrn ser ms caros que otros, por ser ms largos. Estos caminos seran representados por las aristas con mayores pesos. Un rbol recubridor para este grafo sera un subconjunto de estos caminos que no tenga ciclos pero que mantenga conectadas todas las casas. Puede haber ms de un rbol recubridor posible. El rbol recubridor mnimo ser el de menos coste. En el caso de un empate, porque podra haber ms de un rbol recubridor mnimo; en particular, si todos los pesos son iguales, todo rbol recubridor ser mnimo. De todas formas, si cada arista tiene un peso distinto existir slo un rbol recubridor mnimo. La demostracin de esto es trivial y se puede hacer por induccin. Esto ocurre en muchas situaciones de la realidad, como con la compaa de cable en el ejemplo anterior, donde es extrao que dos caminos tengan exactamente el mismo coste. Esto tambin se generaliza para los bsques recubridores.

Si los pesos son positivos, el rbol recubridor mnimo es el subgrafo de menor costo posible conectando todos los vrtices, ya que los subgrafos que contienen ciclos necesariamente tienen ms peso total.

Algoritmo de Prim
El algoritmo de Prim es un algoritmo perteneciente a la teora de los grafos para encontrar un rbol recubridor mnimo en un grafo conexo, no dirigido y cuyas aristas estn etiquetadas. En otras palabras, el algoritmo encuentra un subconjunto de aristas que forman un rbol con todos los vrtices, donde el peso total de todas las aristas en el rbol es el mnimo posible. Si el grafo no es conexo, entonces el algoritmo encontrar el rbol recubridor mnimo para uno de los componentes conexos que forman dicho grafo no conexo. El algoritmo fue diseado en 1930 por el matemtico Vojtech Jarnik y luego de manera independiente por el cientfico computacional Robert C. Prim en 1957 y redescubierto por Dijkstra en 1959. Por esta razn, el algoritmo es tambin conocido como algoritmo DJP o algoritmo de Jarnik.

Descripcin conceptual
El algoritmo incrementa continuamente el tamao de un rbol, comenzando por un vrtice inicial al que se le van agregando sucesivamente vrtices cuya distancia a los anteriores es mnima. Esto significa que en cada paso, las aristas a considerar son aquellas que inciden en vrtices que ya pertenecen al rbol. El rbol recubridor mnimo est completamente construido cuando no quedan ms vrtices por agregar.

Pseudocdigo del algoritmo

Estructura de datos auxiliar: Q = Estructura de datos Cola de prioridad (se puede implementar con un heap)

JARNIK (Grafo G, nodo_fuente s) // Inicializamos todos los nodos del grafo. La distancia la ponemos a infinito y el padre de cada nodo a NULL // Encolamos, en una cola de prioridad donde la prioridad es la distancia, todas las parejas <nodo,distancia> del grafo por cada u en V[G] hacer distancia[u] = INFINITO padre[u] = NULL Aadir(cola,<u,distancia[u]>) distancia[s]=0 mientras cola != 0 do // OJO: Se entiende por mayor prioridad aquel nodo cuya distancia[u] es menor. u = extraer_minimo(cola) //devuelve el minimo y lo elimina de la cola.

por cada v adyacente a 'u' hacer si ((v cola) && (distancia[v] > peso(u, v)) entonces padre[v] = u distancia[v] = peso(u, v) Actualizar(cola,<v,distancia[v]>)

Cdigo en JAVA
public class Algorithms { public static Graph PrimsAlgorithm (Graph g, int s) { int n = g.getNumberOfVertices (); Entry[] table = new Entry [n]; for (int v = 0; v < n; ++v) table [v] = new Entry (); table [s].distance = 0; PriorityQueue queue = new BinaryHeap (g.getNumberOfEdges()); queue.enqueue ( new Association (new Int (0), g.getVertex (s))); while (!queue.isEmpty ()) { Association assoc = (Association) queue.dequeueMin(); Vertex v0 = (Vertex) assoc.getValue (); int n0 = v0.getNumber (); if (!table [n0].known) { table [n0].known = true; Enumeration p = v0.getEmanatingEdges (); while (p.hasMoreElements ()) { Edge edge = (Edge) p.nextElement (); Vertex v1 = edge.getMate (v0); int n1 = v1.getNumber (); Int wt = (Int) edge.getWeight (); int d = wt.intValue (); if (!table[n1].known && table[n1].distance>d) { table [n1].distance = d; table [n1].predecessor = n0; queue.enqueue ( new Association (new Int (d), v1)); } } } } Graph result = new GraphAsLists (n); for (int v = 0; v < n; ++v) result.addVertex (v); for (int v = 0; v < n; ++v) if (v != s) result.addEdge (v, table [v].predecessor); return result; } }

Demostracin
Sea G un grafo conexo y ponderado. En toda iteracin del algoritmo de Prim, se debe encontrar una arista que conecte un nodo del subgrafo a otro nodo fuera del subgrafo. Ya que G es conexo, siempre habr un camino para todo nodo. La salida Y del algoritmo de Prim es un rbol porque las aristas y los nodos agregados a Y estn conectados. Sea Y el rbol recubridor mnimo de G. Si es el rbol recubridor mnimo.

Si no, sea e la primera arista agregada durante la construccin de Y, que no est en Y1 y sea V el conjunto de nodos conectados por las aristas agregadas antes que e. Entonces un extremo de e est en V y el otro no. Ya que Y1 es el rbol recubridor mnimo de G hay un camino en Y1 que une los dos extremos. Mientras que uno se mueve por el camino, se debe encontrar una arista f uniendo un nodo en V a uno que no est en V. En la iteracin que e se agrega a Y, f tambin se podra haber agregado y se hubiese agregado en vez de e si su peso fuera menor que el de e. Ya que f no se agreg se concluye:

Sea Y2 el grafo obtenido al remover f y agregando . Es fcil mostrar que Y2 conexo tiene la misma cantidad de aristas que Y1, y el peso total de sus aristas no es mayor que el de Y1, entonces tambin es un rbol recubridor mnimo de G y contiene a e y todas las aristas agregadas anteriormente durante la construccin de V. Si se repiten los pasos mencionados anteriormente, eventualmente se obtendr el rbol recubridor mnimo de G que es igual a Y. Esto demuestra que Y es el rbol recubridor mnimo de G.

Ejemplo de ejecucin del algoritmo


Image Descripcin No visto En el grafo En el rbol

Este es el grafo ponderado de partida. No es un rbol ya que requiere que no haya ciclos y en este grafo los hay. Los nmeros cerca de las aristas indican el peso. Ninguna de las aristas est marcada, y el vrtice D ha sido elegido arbitrariamente como el punto de partida.

C, G

A, B, E, F

El segundo vrtice es el ms cercano a D: A est a 5 de distancia, B a 9, E a 15 y F a 6. De estos, 5 es el C, G valor ms pequeo, as que marcamos la arista DA.

B, E, F A, D

El prximo vrtice a elegir es el ms cercano a D o A. B est a 9 de distancia de D y a 7 de A, E est a 15, y F est a 6. 6 es el valor ms pequeo, as que marcamos el vrtice F y a la arista DF.

B, E, G

A, D, F

El algoritmo continua. El vrtice B, que est a una distancia de 7 de A, es el siguiente marcado. En este punto la arista DB es marcada en rojo porque sus dos extremos ya estn en el rbol y por lo tanto no podr ser utilizado.

null

C, E, G

A, D, F, B

Aqu hay que elegir entre C, E y G. C est a 8 de distancia de B, E est a 7 de distancia de B, y G est a 11 de distancia de F. E est ms cerca, entonces null marcamos el vrtice E y la arista EB. Otras dos aristas fueron marcadas en rojo porque ambos vrtices que unen fueron agregados al rbol.

C, G

A, D, F, B, E

Slo quedan disponibles C y G. C est a 5 de distancia de E, y G a 9 de distancia de E. Se elige C, y se marca con el arco EC. El arco BC tambin se marca con rojo.

null

A, D, F, B, E, C

G es el nico vrtice pendiente, y est ms cerca de E que de F, as que se agrega EG al rbol. Todos los vrtices estn ya marcados, el rbol de expansin mnimo se muestra en verde. En este caso con un peso de 39.

null

null

A, D, F, B, E, C, G

Algoritmo de Kruskal
El algoritmo de Kruskal es un algoritmo de la teora de grafos para encontrar un rbol recubridor mnimo en un grafo conexo y ponderado. Es decir, busca un subconjunto de aristas que, formando un rbol, incluyen todos los vrtices y donde el valor total de todas las aristas del rbol es el mnimo. Si el grafo no es conexo, entonces busca un bosque expandido mnimo (un rbol expandido mnimo para cada componente conexa). El algoritmo de Kruskal es un ejemplo de algoritmo voraz.
Un ejemplo de rbol expandido mnimo. Cada punto representa un vrtice, el cual puede ser un rbol por s mismo. Se usa el Algoritmo para buscar las distancias ms cortas (rbol expandido) que conectan todos los puntos o vrtices.

Funciona de la siguiente manera:


se crea un bosque B (un conjunto de rboles), donde cada vrtice del grafo es un rbol separado se crea un conjunto C que contenga a todas las aristas del grafo mientras C es no vaco o eliminar una arista de peso mnimo de C o si esa arista conecta dos rboles diferentes se aade al bosque, combinando los dos rboles en un solo rbol o en caso contrario, se desecha la arista

Al acabar el algoritmo, el bosque tiene un solo componente, el cual forma un rbol de expansin mnimo del grafo. Este algoritmo fue publicado por primera vez en Proceedings of the American Mathematical Society, pp. 4850 en 1956, y fue escrito por Joseph Kruskal.

Pseudocdigo
1 function Kruskal(G) 2 for each vertex v in G do 3 Define an elementary cluster C(v) {v}. 4 Initialize a priority queue Q to contain all edges in G, using the weights as keys. 5 Define a tree T //T will ultimately contain the edges of the MST 6 // n es el nmero total de vrtices 7 while T has fewer than n-1 edges do 8 // edge u, v is the minimum weighted route from/to v 9 (u,v) Q.removeMin() 10 // previene ciclos en T. suma u, v solo si T no contiene una arista que una u y v. 11 // Ntese que el cluster contiene ms de un vrtice si una arista une un par de 12 // vrtices que han sido aadidos al rbol. 13 Let C(v) be the cluster containing v, and let C(u) be the cluster containing u. 14 if C(v) C(u) then 15 Add edge (v,u) to T. 16 Merge C(v) and C(u) into one cluster, that is, union C(v) and C(u). 17 return tree T

Cdigo en C++
// Declaraciones en el archivo .h int cn; //cantidad de nodos vector< vector<int> > ady; //matriz de adyacencia // Devuelve la matriz de adyacencia del arbol minimo. vector< vector<int> > Grafo :: kruskal(){ vector< vector<int> > adyacencia = this->ady; vector< vector<int> > arbol(cn); vector<int> pertenece(cn); // indica a que arbol pertenece el nodo for(int i = 0; i < cn; i++){ arbol[i] = vector<int> (cn, INF); pertenece[i] = i;

} int nodoA; int nodoB; int arcos = 1; while(arcos < cn){ // Encontrar el arco minimo que no forma ciclo y guardar los nodos y la distancia. int min = INF; for(int i = 0; i < cn; i++) for(int j = 0; j < cn; j++) if(min > adyacencia[i][j] && pertenece[i] != pertenece[j]){ min = adyacencia[i][j]; nodoA = i; nodoB = j; } // Si los nodos no pertenecen al mismo arbol agrego el arco al arbol minimo. if(pertenece[nodoA] != pertenece[nodoB]){ arbol[nodoA][nodoB] = min; arbol[nodoB][nodoA] = min; // Todos los nodos del arbol del nodoB ahora pertenecen al arbol del nodoA. int temp = pertenece[nodoB]; pertenece[nodoB] = pertenece[nodoA]; for(int k = 0; k < cn; k++) if(pertenece[k] == temp) pertenece[k] = pertenece[nodoA]; arcos++; } } return arbol; }

Complejidad del algoritmo


m el nmero de aristas del grafo y n el nmero de vrtices, el algoritmo de Kruskal muestra una complejidad O(m log m) o, equivalentemente, O(m log n), cuando se ejecuta sobre estructuras de datos simples. Los tiempos de ejecucin son equivalentes porque:

m es a lo sumo n2 y log n2 = 2logn es O(log n). ignorando los vrtices aislados, los cuales forman su propia componente del rbol de expansin mnimo, n 2m, as que log n es O(log m).

Se puede conseguir esta complejidad de la siguiente manera: primero se ordenan las aristas por su peso usando una ordenacin por comparacin (comparison sort) con una complejidad del orden de O(m log m); esto permite que el paso "eliminar una arista de peso mnimo de C" se ejecute en tiempo constante. Lo siguiente es usar una estructura de datos sobre conjuntos disjuntos (disjoint-set data structure) para controlar qu vrtices estn en qu componentes. Es necesario hacer orden de O(m) operaciones ya que por cada arista hay dos operaciones de bsqueda y posiblemente una unin de conjuntos. Incluso una

estructura de datos sobre conjuntos disjuntos simple con uniones por rangos puede ejecutar las operaciones mencionadas en O(m log n). Por tanto, la complejidad total es del orden de O(m log m) = O(m log n). Con la condicin de que las aristas estn ordenadas o puedan ser ordenadas en un tiempo lineal (por ejemplo, mediante el ordenamiento por cuentas o con el ordenamiento Radix), el algoritmo puede usar estructuras de datos de conjuntos disjuntos ms complejas para ejecutarse en tiempos del orden de O(m (n)), donde es la inversa (tiene un crecimiento extremadamente lento) de la funcin de Ackermann.

Demostracin de la correccin
Sea P un grafo conexo y valuado y sea Y el subgrafo de P producido por el algoritmo. Y no puede tener ciclos porque cada vez que se aade una arista, sta debe conectar vrtices de dos rboles diferentes y no vrtices dentro de un subrbol. Y no puede ser disconexa ya que la primera arista que une dos componentes de Y debera haber sido aadida por el algoritmo. Por tanto, Y es un rbol expandido de P. Sea Y1 el rbol expandido de peso mnimo de P, el cual tiene el mayor nmero de aristas en comn con Y. Si Y1=Y entonces Y es un rbol de expansin mnimo. Por otro lado, sea e la primera arista considerada por el algoritmo que est en Y y que no est en Y1. Sean C1 y C2 las componentes de P que conecta la arista e. Ya que Y1 es un rbol, Y1+e tiene un ciclo y existe una arista diferente f en ese ciclo que tambin conecta C1 y C2. Entonces Y2=Y1+e-f es tambin un rbol expandido. Ya que e fue considerada por el algoritmo antes que f, el peso de e es al menos igual que que el peso de f y ya que Y1 es un rbol expandido mnimo, los pesos de esas dos aristas deben ser de hecho iguales. Por tanto, Y2 es un rbol expandido mnimo con ms aristas en comn con Y que las que tiene Y1, contradiciendo las hiptesis que se haban establecido antes para Y1. Esto prueba que Y debe ser un rbol expandido de peso mnimo. Otros algoritmos para este problema son el algoritmo de Prim y el algoritmo de Boruvka.

Ejemplo:

Este es el grafo original. Los nmeros de las aristas indican su peso. Ninguna de las aristas est resaltada.

AD y CE son las aristas ms cortas, con peso 5, y AD se ha elegido arbitrariamente, por tanto se resalta.

Sin embargo, ahora es CE la arista ms pequea que no forma ciclos, con peso 5, por lo que se resalta como segunda arista.

La siguiente arista, DF con peso 6, ha sido resaltada utilizando el mismo mtodo.

La siguientes aristas ms pequeas son AB y BE, ambas con peso 7. AB se elige arbitrariamente, y se resalta. La arista BD se resalta en rojo, porque formara un ciclo ABD si se hubiera elegido.

El proceso contina marcando las aristas, BE con peso 7. Muchas otras aristas se marcan en rojo en este paso: BC (formara el ciclo BCE), DE (formara el ciclo DEBA), y FE (formara el ciclo FEBAD).

Finalmente, el proceso termina con la arista EG de peso 9, y se ha encontrado el rbol expandido mnimo.

2.4 RBOLES BINARIOS


Estn entre los tipos de rboles binarios especiales con raz, su caracterstica es que todo vrtice tiene cuando mucho dos hijos. Donde cada hijo se designa como un hijo izquierdo o un hijo derecho, adems, su posicin en el rbol los identifica. Formalizando se dice que un rbol binario es un rbol con raz en el que cada vrtice tiene ningn hijo, un hijo o dos hijos. Si el vrtice tiene un hijo se designa como un hijo izquierdo o como derecho (pero no ambos). Si un vrtice tiene dos hijos, un hijo se designa como hijo izquierdo y el otro como hijo derecho. Un rbol binario completo es un rbol binario en el que cada vrtice tiene dos o cero hijos. Ejemplo

La altura de este rbol es de 2.

rbol binario
En ciencias de la computacin, un rbol binario es una estructura de datos en la cual cada nodo siempre tiene un hijo izquierdo y un hijo derecho. No pueden tener ms de dos hijos (de ah el nombre "binario"). Si algn hijo tiene como referencia a null, es decir que no almacena ningn dato, entonces este es llamado un nodo externo. En el caso contrario el hijo es llamado un nodo interno. Usos comunes de los rboles binarios son los rboles binarios de bsqueda, los montculos binarios y Codificacin de Huffman.

Definicin de teora de grafos

Un rbol binario sencillo de tamao 9 y altura 3, con un nodo raz cuyo valor es 2.

En teora de grafos, se usa la siguiente definicin: Un rbol binario es un grafo conexo, acclico y no dirigido tal que el grado de cada vrtice no es mayor a 3. De esta forma slo existe un camino entre un par de nodos. Un rbol binario con enraizado es como un grafo que tiene uno de sus vrtices, llamado raz, de grado no mayor a 2. Con la raz escogida, cada vrtice tendr un nico padre, y nunca ms de dos hijos. Si rehusamos el requerimiento de la conectividad, permitiendo mltiples componentes conectados en el grafo, llamaremos a esta ltima estructura un bosque.

Tipos de rboles binarios


Un rbol binario es un rbol con raz en el que cada nodo tiene como mximo dos hijos. Un rbol binario lleno es un rbol en el que cada nodo tiene cero o dos hijos. Un rbol binario perfecto es un rbol binario lleno en el que todas las hojas (vrtices con cero hijos) estn a la misma profundidad (distancia desde la raz, tambin llamada altura). A veces un rbol binario perfecto es denominado rbol binario completo. Otros definen un rbol binario completo como un rbol binario lleno en el que todas las hojas estn a profundidad n o n-1, para alguna n.

Un rbol binario es un rbol en el que ningn nodo puede tener ms de dos subrboles. En un rbol binario cada nodo puede tener cero, uno o dos hijos (subrboles). Se conoce el nodo de la izquierda como hijo izquierdo y el nodo de la derecha como hijo derecho.

Implementacin en C
Un rbol binario puede declararse de varias maneras. Algunas de ellas son: Estructura con manejo de memoria dinmica, siendo puntA el puntero que apunta al rbol de tipo tArbol:
struct celda { telemento dato; struct celda *izdo, *dcho; }; typedef struct celda *arbolbin;

Estructura con arreglo indexado:


typedef struct tArbol { int clave; int hIzquierdo, hDerecho; } tArbol; tArbol rbol[NUMERO_DE_NODOS];

En el caso de un rbol binario casi-completo (o un rbol completo), puede utilizarse un sencillo arreglo de enteros con tantas posiciones como nodos deba tener el rbol. La informacin de la ubicacin del nodo en el rbol es implcita a cada posicin del arreglo. As, si un nodo est en la posicin i, sus hijos se encuentran en las posiciones 2i+1 y 2i+2, mientras que su padre (si tiene), se encuentra en la posicin truncamiento((i-1)/2) (suponiendo que la raz est en la posicin cero). Este mtodo se beneficia de un almacenamiento ms compacto y una mejor localidad de referencia, particularmente durante un recorrido en preorden. La estructura para este caso sera por tanto:
int rbol[NUMERO_DE_NODOS];

2.5 RECORRIDO DE UN RBOL


Existen tres mtodos extras que permiten recorrer un rbol, ellos son: Recorrido preorden: considera para el recorrido del rbol el siguiente orden (raz izquierda - derecha) Recorrido entreorden o inorden: considera para el recorrido del rbol el siguiente orden (izquierda -raz - derecha) Recorrido postorden: considera para el recorrido del rbol el siguiente orden (izquierda derecha - raz)

Respuesta: PREORDEN: * - + A B - * C D / E F A ENTREORDEN (inorden): A + B C * D E / F * A POSTORDEN: A B + C D * E F / - - A *

Recorridos sobre rboles binarios


Recorridos en profundidad
El mtodo de este recorrido es tratar de encontrar de la cabecera a la raz en nodo de unidad binaria. Ahora pasamos a ver la implementacin de los distintos recorridos:

Recorrido en preorden

En este tipo de recorrido se realiza cierta accin (quizs simplemente imprimir por pantalla el valor de la clave de ese nodo) sobre el nodo actual y posteriormente se trata el subrbol izquierdo y cuando se haya concluido, el subrbol derecho. Otra forma para entender el recorrido con este mtodo seria seguir el orden: nodo raz, nodo izquierda, nodo derecha. En el rbol de la figura el recorrido en preorden sera: 2, 7, 2, 6, 5, 11, 5, 9 y 4.
void preorden(tArbol *a) { if (a != NULL) { tratar(a); //Realiza una operacin en nodo preorden(a->hIzquierdo); preorden(a->hDerecho); } }

Implementacin en pseudocdigo de forma iterativa:


push(s,NULL); //insertamos en una pila (stack) el valor NULL, para asegurarnos de que est vaca push(s,raz); //insertamos el nodo raz MIENTRAS (s <> NULL) HACER p = pop(s); //sacamos un elemento de la pila tratar(p); //realizamos operaciones sobre el nodo p SI (D(p) <> NULL) //preguntamos si p tiene rbol derecho ENTONCES push(s,D(p)); FIN-SI SI (I(p) <> NULL) //preguntamos si p tiene rbol izquierdo ENTONCES push(s,I(p)); FIN-SI FIN-MIENTRAS

Recorrido en postorden

En este caso se trata primero el subrbol izquierdo, despus el derecho y por ltimo el nodo actual. Otra forma para entender el recorrido con este mtodo seria seguir el orden: nodo izquierdo, nodo derecho, nodo raz. En el rbol de la figura el recorrido en postorden sera: 2, 5, 11, 6, 7, 4, 9, 5 y 2.

void postorden(tArbol *a) { if (a != NULL) { postorden(a->hIzquiedo); postorden(a->hDerecho); tratar(a); //Realiza una operacin en nodo } }

Recorrido en inorden

En este caso se trata primero el subrbol izquierdo, despus el nodo actual y por ltimo el subrbol derecho. En un ABB (rbol binario de bsqueda) este recorrido dara los valores de clave ordenados de menor a mayor. Otra forma para entender el recorrido con este mtodo seria seguir el orden: nodo izquierda, nodo raz, nodo derecha. En el rbol de la figura el recorrido en inorden sera: 2, 7, 5, 6, 11, 2, 5, 4 y 9. Esquema de implementacin:
void inorden(tArbol *a) { if (a != NULL) { inorden(a->hIzquierdo); tratar(a); inorden(a->hDerecho); } }

//Realiza una operacin en nodo

Recorridos en amplitud (o por niveles)


En este caso el recorrido se realiza en orden por los distintos niveles del rbol. As, se comenzara tratando el nivel 1, que slo contiene el nodo raz, seguidamente el nivel 2, el 3 y as sucesivamente. En el rbol de la figura el recorrido en amplitud sera: 2, 7, 5, 2, 6, 9, 5, 11 y 4. Al contrario que en los mtodos de recorrido en profundidad, el recorrido por niveles no es de naturaleza recursiva. Por ello, se debe utilizar una cola para recordar los subrboles izquierdos y derecho de cada nodo. El esquema algoritmo para implementar un recorrido por niveles es exactamente el mismo que el utilizado en la versin iterativa del recorrido en preorden pero cambiando la estructura de datos que almacena los nodos por una cola. Implementacin en C:
void arbol_recorrido_anch (tipo_Arbol* A) { tipo_Cola cola_nodos; // esta cola esta implementada previamente, almacena punteros (posiciones de nodos de arbol) tipo_Pos nodo_actual; // este es un puntero llevara el recorrido

if (vacio(A)) // sie el arbol esta vacio, salimos return; cola_inicializa(&cola_nodos); // obvio, y necesario cola_enqueue(A, &cola_nodos); // se encola la raiz while (!vacia(&cola_nodos)) { // mientras la cola no se vacie se realizara el recorrido nodo_actual = cola_dequeue(&cola_nodos) // de la cola saldran los nodos ordenados por nivel printf("%c,", nodo_actual->info); // se "procesa" el nodo donde va el recorrido, en este caso se imprime if (nodo_actual->izq != null) // si existe, ponemos el hijo izquierdo en la cola cola_enqueue(nodo_actual->izq, &cola_nodos); if (nodo_actual->der != null) // si existe, ponemos el hijo derecho en la cola cola_enqueue(nodo_actual->der, &cola_nodos); } // al vaciarse la cola se han visitado todos los nodos del arbol }

Mtodos para almacenar rboles binarios


Los rboles binarios pueden ser construidos a partir de lenguajes de programacin de varias formas. En un lenguaje con registros y referencias, los rboles binarios son construidos tpicamente con una estructura de nodos y punteros en la cual se almacenan datos, cada uno de estos nodos tiene una referencia o puntero a un nodo izquierdo y a un nodo derecho denominados hijos. En ocasiones, tambin contiene un puntero a un nico nodo. Si un nodo tiene menos de dos hijos, algunos de los punteros de los hijos pueden ser definidos como nulos para indicar que no dispone de dicho nodo. En la figura adjunta se puede observar la estructura de dicha implementacin.

Los rboles binarios tambin pueden ser almacenados como una estructura de datos implcita en vectores, y si el rbol es un rbol binario completo, este mtodo no

desaprovecha el espacio en memoria. Tomaremos como notacin la siguiente: si un nodo tiene un ndice i, sus hijos se encuentran en ndices 2i + 1 y 2i + 2, mientras que sus padres (si los tiene) se encuentra en el ndice (partiendo de que la raz tenga ndice cero). Este mtodo tiene como ventajas el tener almacenados los datos de forma ms compacta y por tener una forma ms rpida y eficiente de localizar los datos en particular durante un preoden transversal. Sin embargo, desperdicia mucho espacio en memoria.

Codificacin de rboles n-arios como rboles binarios


Hay un mapeo uno a uno entre los rboles generales y rboles binarios, el cual en particular es usado en Lisp para representar rboles generales como rboles binarios. Cada nodo N ordenado en el rbol corresponde a un nodo N 'en el rbol binario; el hijo de la izquierda de N es el nodo correspondiente al primer hijo de N, y el hijo derecho de N' es el nodo correspondiente al siguiente hermano de N, es decir, el prximo nodo en orden entre los hijos de los padres de N. Esta representacin como rbol binario de un rbol general, se conoce a veces como un rbol binario primer hijo hermano, o un rbol doblemente encadenado. Una manera de pensar acerca de esto es que los hijos de cada nodo estn en una lista enlazada, encadenados junto con el campo derecho, y el nodo slo tiene un puntero al comienzo o la cabeza de esta lista, a travs de su campo izquierdo. Por ejemplo, en el rbol de la izquierda, la A tiene 6 hijos (B, C, D, E, F, G). Puede ser convertido en el rbol binario de la derecha. Un ejemplo de transformar el rbol n-ario a un rbol binario Cmo pasar de rboles n-arios a rboles FLOFO.

El rbol binario puede ser pensado como el rbol original inclinado hacia los lados, con los bordes negros izquierdos representando el primer hijo y los azules representado los siguientes hermanos. Las hojas del rbol de la izquierda seran escritas en Lisp como:
(((M N) H I) C D ((O) (P)) F (L))

Que se ejecutar en la memoria como el rbol binario de la derecha, sin ningn tipo de letras en aquellos nodos que tienen un hijo izquierdo.

rbol binario de bsqueda Un rbol binario de bsqueda es aquel que es: - Una estructura vaca o - Un elemento o clave de informacin (nodo) ms un nmero finito -a lo sumo dos- de estructuras tipo rbol, disjuntos, llamados subrboles y adems cumplen lo siguiente: * Todas las claves del subrbol izquierdo al nodo son menores que la clave del nodo. * Todas las claves del subrbol derecho al nodo son mayores que la clave del nodo. * Ambos subrboles son rboles binarios de bsqueda. Un ejemplo de rbol binario de bsqueda:

Figura 5 Al definir el tipo de datos que representa la clave de un nodo dentro de un rbol binario de bsqueda es necesario que en dicho tipo se pueda establecer una relacin de orden. Por ejemplo, suponer que el tipo de datos de la clave es un puntero (da igual a lo que apunte). Si se codifica el rbol en Pascal no se puede establecer una relacin de orden para las claves, puesto que Pascal no admite determinar si un puntero es mayor o menor que otro. En el ejemplo de la figura 5 las claves son nmeros enteros. Dada la raz 4, las claves del subrbol izquierdo son menores que 4, y las claves del subrbol derecho son mayores que 4. Esto se cumple tambin para todos los subrboles. Si se hace el recorrido de este rbol en orden central se obtiene una lista de los nmeros ordenada de menor a mayor. Cuestin: Qu hay que hacer para obtener una lista de los nmeros ordenada de mayor a menor? Una ventaja fundamental de los rboles de bsqueda es que son en general mucho ms rpidos para localizar un elemento que una lista enlazada. Por tanto, son ms rpidos para insertar y borrar elementos. Si el rbol est perfectamente equilibrado -esto es, la

diferencia entre el nmero de nodos del subrbol izquierdo y el nmero de nodos del subrbol derecho es a lo sumo 1, para todos los nodos- entonces el nmero de comparaciones necesarias para localizar una clave es aproximadamente de logN en el peor caso. Adems, el algoritmo de insercin en un rbol binario de bsqueda tiene la ventaja sobre los arrays ordenados, donde se empleara bsqueda dicotmica para localizar un elemento- de que no necesita hacer una reubicacin de los elementos de la estructura para que esta siga ordenada despus de la insercin. Dicho algoritmo funciona avanzando por el rbol escogiendo la rama izquierda o derecha en funcin de la clave que se inserta y la clave del nodo actual, hasta encontrar su ubicacin; por ejemplo, insertar la clave 7 en el rbol de la figura 5 requiere avanzar por el rbol hasta llegar a la clave 8, e introducir la nueva clave en el subrbol izquierdo a 8. El algoritmo de borrado en rboles es algo ms complejo, pero ms eficiente que el de borrado en un array ordenado. Ahora bien, suponer que se tiene un rbol vaco, que admite claves de tipo entero. Suponer que se van a ir introduciendo las claves de forma ascendente. Ejemplo: 1,2,3,4,5,6 Se crea un rbol cuya raz tiene la clave 1. Se inserta la clave 2 en el subrbol derecho de 1. A continuacin se inserta la clave 3 en el subrbol derecho de 2. Continuando las inserciones se ve que el rbol degenera en una lista secuencial, reduciendo drsticamente su eficacia para localizar un elemento. De todas formas es poco probable que se de un caso de este tipo en la prctica. Si las claves a introducir llegan de forma ms o menos aleatoria entonces la implementacin de operaciones sobre un rbol binario de bsqueda que vienen a continuacin son en general suficientes. Existen variaciones sobre estos rboles, como los AVL o Red-Black (no se tratan aqu), que sin llegar a cumplir al 100% el criterio de rbol perfectamente equilibrado, evitan problemas como el de obtener una lista degenerada.

Operaciones bsicas sobre rboles binarios de bsqueda - Bsqueda Si el rbol no es de bsqueda, es necesario emplear uno de los recorridos anteriores sobre el rbol para localizarlo. El resultado es idntico al de una bsqueda secuencial. Aprovechando las propiedades del rbol de bsqueda se puede acelerar la localizacin. Simplemente hay que descender a lo largo del rbol a izquierda o derecha dependiendo del elemento que se busca. boolean buscar(tarbol *a, int elem) { if (a == NULL) return FALSE; else if (a->clave < elem) return buscar(a->der, elem); else if (a->clave > elem) return buscar(a->izq, elem); else return TRUE; }

- Insercin

La insercin tampoco es complicada. Es ms, resulta practicamente idntica a la bsqueda. Cuando se llega a un rbol vaco se crea el nodo en el puntero que se pasa como parmetro por referencia, de esta manera los nuevos enlaces mantienen la coherencia. Si el elemento a insertar ya existe entonces no se hace nada. void insertar(tarbol **a, int elem) { if (*a == NULL) { *a = (arbol *) malloc(sizeof(arbol)); (*a)->clave = elem; (*a)->izq = (*a)->der = NULL; } else if ((*a)->clave < elem) insertar(&(*a)->der, elem); else if ((*a)->clave > elem) insertar(&(*a)->izq, elem); }

- Borrado La operacin de borrado si resulta ser algo ms complicada. Se recuerda que el rbol debe seguir siendo de bsqueda tras el borrado. Pueden darse tres casos, una vez encontrado el nodo a borrar: 1) El nodo no tiene descendientes. Simplemente se borra. 2) El nodo tiene al menos un descendiente por una sola rama. Se borra dicho nodo, y su primer descendiente se asigna como hijo del padre del nodo borrado. Ejemplo: en el rbol de la figura 5 se borra el nodo cuya clave es -1. El rbol resultante es:

3) El nodo tiene al menos un descendiente por cada rama. Al borrar dicho nodo es necesario mantener la coherencia de los enlaces, adems de seguir manteniendo la estructura como un rbol binario de bsqueda. La solucin consiste en sustituir la informacin del nodo que se borra por el de una de las hojas, y borrar a continuacin dicha hoja. Puede ser cualquier hoja? No, debe ser la que contenga una de estas dos claves: la mayor de las claves menores al nodo que se borra. Suponer que se quiere borrar el nodo 4 del rbol de la figura 5. Se sustituir la clave 4 por la clave 2. la menor de las claves mayores al nodo que se borra. Suponer que se quiere borrar el nodo 4 del rbol de la figura 5. Se sustituir la clave 4 por la clave 5.

El algoritmo de borrado que se implementa a continuacin realiza la sustitucin por la mayor de las claves menores, (aunque se puede escoger la otra opcin sin prdida de generalidad). Para lograr esto es necesario descender primero a la izquierda del nodo que se va a borrar, y despus avanzar siempre a la derecha hasta encontrar un nodo hoja. A continuacin se muestra grficamente el proceso de borrar el nodo de clave 4:

Codificacin: el procedimiento sustituir es el que desciende por el rbol cuando se da el caso del nodo con descencientes por ambas ramas. void borrar(tarbol **a, int elem) { void sustituir(tarbol **a, tarbol **aux); tarbol *aux; if (*a == NULL) /* no existe la clave */ return; if ((*a)->clave < elem) borrar(&(*a)->der, elem); else if ((*a)->clave > elem) borrar(&(*a)->izq, elem); else if ((*a)->clave == elem) { aux = *a; if ((*a)->izq == NULL) *a = (*a)->der; else if ((*a)->der == NULL) *a = (*a)->izq; else sustituir(&(*a)->izq, &aux); /* se sustituye por la mayor de las menores */ free(aux); } }

2.6 ARBOLES DE DECISIN Y EL TIEMPO MNIMO PARA EL ORDENAMIENTO:

rbol de decisin
Un rbol de decisin es un modelo de prediccin utilizado en el mbito de la inteligencia artificial. Dada una base de datos se construyen diagramas de construcciones lgicas, muy

similares a los sistemas de prediccin basados en reglas, que sirven para representar y categorizar una serie de condiciones que ocurren de forma sucesiva, para la resolucin de un problema. Un rbol de decisin tiene unas entradas las cuales pueden ser un objeto o una situacin descrita por medio de un conjunto de atributos y a partir de esto devuelve una respuesta la cual en ltimas es una decisin que es tomada a partir de las entradas. Los valores que pueden tomar las entradas y las salidas pueden ser valores discretos o continuos. Se utilizan ms los valores discretos por simplicidad, cuando se utilizan valores discretos en las funciones de una aplicacin se denomina clasificacin y cuando se utilizan los continuos se denomina regresin. Un rbol de decisin lleva a cabo un test a medida que este se recorre hacia las hojas para alcanzar as una decisin. El rbol de decisin suele contener nodos internos, nodos de probabilidad, nodos hojas y arcos. Un nodo interno contiene un test sobre algn valor de una de las propiedades. Un nodo de probabilidad indica que debe ocurrir un evento aleatorio de acuerdo a la naturaleza del problema, este tipo de nodos es redondo, los dems son cuadrados. Un nodo hoja representa el valor que devolver el rbol de decisin y finalmente las ramas brindan los posibles caminos que se tienen de acuerdo a la decisin tomada. De forma ms concreta, refirindonos al mbito empresarial, podemos decir que los rboles de decisin son diagramas de decisiones secuenciales nos muestran sus posibles resultados. stos ayudan a las empresas a determinar cuales son sus opciones al mostrarles las distintas decisiones y sus resultados. La opcin que evita una prdida o produce un beneficio extra tiene un valor. La habilidad de crear una opcin, por lo tanto, tiene un valor que puede ser comprado o vendido. Los rboles de decisin son una tcnica que permite analizar decisiones secuenciales basada en el uso de resultados y probabilidades asociadas. Los rboles de decisin se pueden usar para generar sistemas expertos, bsquedas binarias y rboles de juegos. Las ventajas de un rbol de decisin son: Resume los ejemplos de partida, permitiendo la clasificacin de nuevos casos siempre y cuando no existan modificaciones sustanciales en las condiciones bajo las cuales se generaron los ejemplos que sirvieron para su construccin. Facilita la interpretacin de la decisin adoptada. Proporciona un alto grado de comprensin del conocimiento utilizado en la toma de decisiones. Explica el comportamiento respecto a una determinada tarea de decisin. Reduce el numero de variables independientes. Es una magnifica herramienta para el control de la gestin empresarial. Los rboles de decisin se utilizan en cualquier proceso que implique toma de decisiones, ejemplos de estos procesos son:

Bsqueda binaria. Sistemas Expertos rboles de juegos Los rboles de decisin generalmente son binarios, es decir que cuentan con dos opciones, aunque esto no significa que no puedan existir rboles de 3 o mas opciones BSQUEDA BINARIA Bsqueda binaria es el mtodo en el cual la bsqueda se realiza partiendo el rbol en dos.

En el rbol anterior realizaremos una bsqueda binaria con un rbol de decisin. Supongamos que se desea buscar un numero X en el rbol. - Comparamos si el numero que estamos buscando es igual a la raz, si es igual se devuelve la raz y se termina la bsqueda. - Si no es igual se compara nuevamente el numero para saber si es mayor o menor que la raz con lo que se despreciara la mitad del rbol volviendo la bsqueda mas rpida. - Si es menor recorremos la bsqueda hacia el lado izquierdo, hasta encontrar el siguiente elemento del rbol, el cual volvemos a comparar como lo hicimos con la raz. - Si es mayor se realiza la bsqueda hacia el lado derecho del rbol, el cual lo tomamos como si fuera una raz y comparamos de la misma forma que la primera raz. Los pasos anteriores se realizan hasta encontrar el elemento buscado, o llegar a null, que nos indicara que el elemento no se encuentra en el rbol.

RBOLES DE JUEGOS Los rboles de juegos son una aplicacin de los rboles de decisin. Tomemos por ejemplo el conocido juego del gato y consideremos una funcin evala que acepta una posicin del tablero y nos devuelve un valor numrico (entre mas grande es este valor, mas buena es esta posicin).Un ejemplo de la implantacin de esta funcin es considerando el numero de renglones, columnas y diagonales restantes abiertas para un jugador menos el numero de las mismas para su oponente, por ejemplo la siguiente posicin en un juego y sus posibles continuaciones :

Dada un posicin del tablero, el mejor movimiento siguiente esta determinado por la consideracin de todos los movimientos posibles y las posiciones resultantes. Tal anlisis no conduce sin embargo al mejor movimiento, como se ve en el ejemplo anterior cuando las cuatro primeras posibilidades dan todas el mismo valor de evaluacin, sin embargo la cuarta posicin es sin duda mejor, por lo que se debe mejorar esta funcin. Ahora se introduce la posibilidad de prever varios movimientos. Entonces la funcin se mejorara en gran medida, se inicia con cualquier posicin y se determinan todos los posibles movimientos en un rbol hasta un determinado nivel de previsin. Este rbol se conoce como rbol de juego cuya profundidad es igual a la profundidad de dicho rbol.

Designamos el turno del jugador 1 como +, y el turno del jugador 2 como -, es claro que como el rbol empieza con el turno de +, entonces el rbol estar evaluado de acuerdo a la conveniencia de +. De acuerdo al rbol anterior el mejor primer turno para + ser la cruz en el centro, por lo que el jugador decidir hacer este movimiento, en esta fase se ve que el turno que sigue es de -, - deber seleccionar la jugada que tenga el menor valor , pues esta ser la que perjudique mas a + y convendr a -. As es como funciona un rbol de juego que es una aplicacin de un rbol de decisin, puesto que se genera el rbol de acuerdo al nivel de previsin y cada jugador va diciendo que jugada le conviene mas de acuerdo a la evaluacin de una determinada posicin.

RBOLES DE DECISIN UTILIZADOS EN SISTEMAS EXPERTOS Los rboles de decisin se usan en los sistemas expertos porque son mas precisos que el hombre para poder desarrollar un diagnostico con respecto a algo, ya que el hombre puede dejar pasar sin querer un detalle, en cambio la maquina mediante un sistema experto con un rbol de decisin puede dar un resultado exacto. Una deficiencia de este es que puede llegar a ser mas lento pues analiza todas las posibilidades pero esto a su vez es lo que lo vuelve mas preciso que al hombre. A continuacin se presenta un ejemplo de un sistema experto y de cmo puede llegar a diagnosticar que se emplee un frmaco X en una persona con presin arterial .

Se le administra un frmaco X al paciente si: 1.- Tiene presin alta, su azcar en la sangre es alto, es alrgico a antibiticos y NO tiene otras alergias. 2.- Tiene presin alta, su azcar en la sangre es alto, y NO es alrgico a antibiticos. 3.- Tiene presin arterial alta y su azcar en la sangre es bajo. 4.- Tiene presin arterial media y su ndice de colesterol es bajo. 5.- Tiene presin arterial baja. No le se le administra el frmaco X si: 1.- Tiene presin arterial alta, su azcar en la sangre es bajo, es alrgico a los antibiticos y SI tiene otras alergias 2.- Tiene presin arterial media y su ndice de colesterol es alto.
rboles de decisin. El rbol de decisin es un diagrama que representan en forma secuencial condiciones y acciones; muestraqu condiciones se consideran en primer lugar, en segundo lugar y as sucesivamente. Este mtodo permite mostrar la relacin que existe entre cada condicin y el grupo de acciones permisibles asociado con ella. Un rbol de decisin sirve para modelar funciones discretas, en las que el objetivo es determinar el valor combinado de un conjunto de variables, y basndose en el valor de cada una de ellas, determinar la accin a ser tomada. Los rboles de decisin son normalmente construidos a partir de la descripcin de la narrativa de un problema. Ellos proveen una visin grfica de la toma de decisin necesaria, especifican las variables que son evaluadas, qu acciones deben ser tomadas y el orden en la cual la toma de decisin ser efectuada. Cada vez que se ejecuta un rbol de decisin, solo un camino ser seguido dependiendo del valor actual de la variable evaluada. Se recomienda el uso del rbol de decisin cuando el nmero de acciones es pequeo y no son posibles todas las combinaciones. Uso de rboles decisiones. El desarrollo de rboles de decisin beneficiado analista en dos formas. Primero que todo, la necesidad de describir condiciones y acciones llevan a los analistas a identificar de manera formal las decisiones que actualmente deben tomarse. De esta forma, es difcil para ellos pasar por alto cualquier etapa del proceso de decisin, sin importar que este dependa de variables cuantitativas o cualitativas. Los rboles tambin obligan a los analistas a considerar la consecuencia de las decisiones. Se ha demostrado que los rboles de decisin son eficaces cuando es necesario describir problemas con ms de una dimensin o condicin. Tambin son tiles para identificar los requerimientos de datos crticos que rodean al proceso de decisin, es decir, los rboles indican los conjuntos de datos que la gerenciarequiere para formular decisiones o tomar acciones. El

analista debe identificar y elaborar una lista de todos los datos utilizados en el proceso de decisin, aunque el rbol de decisin no muestra todo los datos. Si los rboles de decisin se construyen despus de completar el anlisis de flujo de datos, entonces es posible que los datos crticos se encuentren definidos en el diccionariode datos (el cual describe los datos utilizados por el sistema y donde se emplean). Si nicamente se usan rboles de decisiones, entonces el analista debe tener la certeza de identificar con precisin cada dato necesario para tomar la decisin. Los rboles de decisin no siempre son la mejor herramienta para el anlisis de decisiones. El rbol de decisiones de un sistema complejo con muchas secuencias de pasos y combinaciones de condiciones puede tener un tamao considerable. El gran nmero de ramas que pertenecen a varias trayectorias constituye ms un problema que una ayuda para el anlisis. En estos casos los analistas corren el riesgo de no determinar qu polticas o estrategias de la empresa son la gua para la toma de decisiones especficas. Cuando aparecen estos problemas, entonces es momento de considerar las tablas de decisin. Ejemplo de rbol de Decisin.

Mtodos de Ordenamiento Mtodo de la burbuja (BubleSort) Es uno de los mtodos ms extendidos y ms fciles, pero a la vez es uno de los menos eficaces. Este mtodo se basa en la ordenacin por cambio de elementos, ya que se van comparando de dos en dos los elementos de la tabla. Si nosotros deseamos ordenar dicha tabla de menor a mayor (ascendente) al realizar la comparacin entre dos elementos se produce el intercambio en el momento en el que el primer elemento es mayor que el segundo. De esta forma el elemento ms grande pasa a estar en el ltimo lugar de la tabla. El elemento sube por la tabla, al igual que una burbuja en un recipiente, de ah proviene su nombre. Los pasos a seguir utilizando este mtodo son los siguientes, imaginando que deseamos realizar una ordenacin creciente: 1.- Se compara el primer elemento con el segundo. Si estn desordenados se intercambian. Luego se mira el segundo con el tercero, intercambiando tambin si es necesario. As hasta que llegamos

al ltimo elemento. De esta forma tenemos en la ltima posicin de nuestra tabla el elemento ms grande. 2.- Repetimos lo mismo que antes pero ahora con todos los elemento, menos el ltimo, que ya est ordenado. 3.- Repetimos el primer paso pero esta vez con otro elemento menos, ya que este tambin est ordenado. Este mtodo finaliza en el momento en el que se han realizado tantas pasadas como objetos - 1 hay en la lista. Su hace menos 1 pasadas porque el primero de los objetos, como es lgico si pensamos que los dems ya estn ordenados, ya est ordenado. Ejemplo con Algoritmo. Para comprobar que no se ha realizado ningn tipo de cambio necesitaremos insertar una variable de tipo booleana que solo permitir dos valores, Verdadero o Falso. 1- Indice = 1 2- Repetir 3- Ordenado = Verdadero 4- Mientras Indice2 <> TotalElem - 1 hacer 5- Si Tabla(Indice2) > Tabla(Indice + 1) Entonces 6- Intercambiar Tabla(Indice2), Tabla(Indice2 + 1) 7- Ordenado = Falso 8- Fin Si 9- Indice2 = Indice2 + 1 10- Fin Mientras 11- Hasta que Indice > TotalElem - 1 o Ordenado = Verdadero Mtodo de ordenacin rpida (Quicksort). Este mtodo se basa en la tctica "divide y vencers" , que consiste en ir subdividiendo el array en arrays ms pequeos, y ordenar stos. Para hacer esta divisin, se toma un valor del array como pivote, y se mueven todos los elementos menores que este pivote a su izquierda, y los mayores a su derecha. A continuacin se aplica el mismo mtodo a cada una de las dos partes en las que queda dividido el array. Normalmente se toma como pivote el primer elemento de array, y se realizan dos bsquedas: una de izquierda a derecha, buscando un elemento mayor que el pivote, y otra de derecha a izquierda, buscando un elemento menor que el pivote. Cuando se han encontrado los dos, se intercambian, y se sigue realizando la bsqueda hasta que las dos bsquedas se encuentran. Por ejemplo, para dividir el array {21,40,4,9,10,35}, los pasos seran: {21,40,4,9,10,35} <-- se toma como pivote el 21. La bsqueda de izquierda a derecha encuentra el valor 40, mayor que pivote, y la bsqueda de derecha a izquierda encuentra el valor 10, menor que el pivote. Se intercambian: {21,10,4,9,40,35} <-- Si seguimos la bsqueda, la primera encuentra el valor 40, y la segunda el valor 9, pero ya se han cruzado, as que paramos. Para terminar la divisin, se coloca el pivote en su lugar (en el nmero encontrado por la segunda bsqueda, el 9, quedando: {9,10,4,21,40,35} <-- Ahora tenemos dividido el array en dos arrays ms pequeos: el {9,10,4} y el {40,35}, y se repetira el mismo proceso * El Metodo Quick Sort*/

public class QuickAl extends Metodo { public void QuickSort(int a[], int iz, int de) throws Exception { int i = iz; int j = de; int mitad = a [(iz+de)/2]; do { while(a[i] < mitad) { i++; } while(a[j] > mitad) { j--; } if ( i <= j) { int aux = a[i]; a[i] = a[j]; a[j] = aux; i++; j--; } pause(i,j); }while (i <= j); if( j > iz ) QuickSort( a, iz, j ); if( i < de ) QuickSort( a, i, de ); }

2.7 ISOMORFISMOS DE RBOLES


Dos graficas simples G1 y G2 son isomorfas si y solo si existe una funcin f uno a uno y sobre del conjunto de vrtices de G1 al conjunto de vrtices de G2 que preserva la relacin de adyacencia en el sentido de que los vrtices vi y vj son adyacentes en G1 si y solo si los vrtices f(vi) y f(vj) son adyacentes en G2. Ejemplos a)

Existe isomorfismo porque: f(a) = 1, f(b) = 3, f(c) = 2 , f(d) = 4, f(e) = 5 b)

Los rboles con raz no son isomorfos, pues existe una invariante debido a que el rbol T1 tiene un vrtice de grado 2 en el nivel 1 y T2 no.

El concepto matemtico de isomorfismo (del griego iso-morfos: Igual forma) pretende captar la idea de tener la misma estructura. Dos estructuras matemticas entre las que existe una relacin de isomorfismo se llaman isomorfas. El descubrimiento de Platn de que la forma es lo que importa se recoge en matemticas con el concepto de isomorfismo. Una aplicacin f:XY entre dos conjuntos dotados del mismo tipo de estructura es un isomorfismo cuando cada elemento de Y proviene de un nico elemento de X y f transforma las operaciones, relaciones, etc. que hay en X en las que hay en Y. Cuando entre dos estructuras hay un isomorfismo, ambas son indistinguibles, tienen las mismas propiedades, y cualquier enunciado es simultneamente cierto o falso. Por eso en matemticas las estructuras deben clasificarse salvo isomorfismos.

Ejemplos de isomorfismos

Por ejemplo, si X es un nmero real positivo con el producto e Y es un nmero real con la suma, el logaritmo ln:XY es un isomorfismo, porque ln(ab)=ln(a)+ln(b) y cada nmero real es el logaritmo de un nico nmero real positivo. Esto significa que cada enunciado sobre el producto de nmeros reales positivos tiene (sin ms que sustituir cada nmero por su logaritmo) un enunciado equivalente en trminos de la suma de nmeros reales, que suele ser ms simple. Otro ejemplo: si en el espacio E elegimos una unidad de longitud y tres ejes mutuamente perpendiculares que concurren en un punto, entonces a cada punto del espacio podemos asociarles sus tres coordenadas cartesianas, obteniendo as una aplicacin f:ER en el conjunto de las sucesiones de tres nmeros reales. Cuando en E consideramos la distancia que define la unidad de longitud fijada y en R consideramos la distancia que define la raz cuadrada de la suma de los cuadrados de las diferencias, f es un isomorfismo. Este descubrimiento fundamental de Descartes permite enunciar cualquier problema de la geometra del espacio en trminos de sucesiones de tres nmeros reales, y este mtodo de abordar los problemas geomtricos es el corazn de la llamada geometra analtica.

Caractersticas del isomorfismo El descubrimiento de un isomorfismo entre dos estructuras significa esencialmente que el estudio de cada una puede reducirse al de la otra, lo que nos da dos puntos de vista diferentes sobre cada cuestin y suele ser esencial en su adecuada comprensin. Tambin significa una analoga como una forma de inferencia lgica basada en la asuncin de que dos cosas son la misma en algunos aspectos, aquellos sobre los que est hecha la comparacin.

Algoritmos simples de Kruskal y Prim


A continuacin se detalla el algoritmo seguido por los procesos de Kruskal y Prim, que ser comn tanto cuando ambos procesos no comparten aristas, cmo cuando comparten aristas medianto sockets o threads.

Algoritmo de Kruskal

Pseudocdigo del algoritmo:

Entrada: Un grafo ponderado conexo con todos sus pesos diferentes. Salida: Las aristas de un rbol generador minimal.

i : = 1; N := tamao del grafo de Entrada en nmero de vrtices;

mientras (i < N) hacer escoger la arista de peso mnimo A de entre todas las que an no han sido escogidas; si A no forma ciclo con las que ya forman parte de la Salida entonces aadir A a la Salida; i := i + 1; fsi fmientras

Por lo tanto, como podemos ver, el algoritmo de Kruskal va generando diferentes bosques con las aristas que va seleccionando y posteriormente se van uniendo hasta formar el rbol de expansin mnimo.

Algoritmo de Prim
Pseudocdigo del algoritmo:

Entrada: Un grafo ponderado conexo con todos sus pesos diferentes. Salida: Las aristas de un rbol generador minimal.

i : = 1; N := tamao del grafo de Entrada en nmero de vrtices;

mientras (i < N) hacer escoger la arista de peso mnimo A de entre todas las que an no han sido escogidas y son incedentes a alguna que ya forma parte de la Salida; si la Salida an est vaca, es decir, que estamos en la primera iteracin entonces escoge la arista A de menor peso; fsi si A no forma ciclo con las que ya forman parte de la Salida entonces aadir A a la Salida; i := i + 1; fsi fmientras

En este caso podemos observar que el algoritmo de Prim a cada iteracin va formando un rbol que va creciendo hasta completar el rbol de expansin mnimo del grafo de entrada.

You might also like