Professional Documents
Culture Documents
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.
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:
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.
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:
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
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.
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).
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.
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).
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.
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.
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.
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; }
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 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.
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.
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.
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;
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];
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); } }
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); } }
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 }
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.
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); } }
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 ); }
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.
Algoritmo de Kruskal
Entrada: Un grafo ponderado conexo con todos sus pesos diferentes. Salida: Las aristas de un rbol generador minimal.
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.
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.