Professional Documents
Culture Documents
z
Unidad Guadalajara
Unidad Guadalajara
Algoritmo
Unidad Guadalajara
Definicin: Un algoritmo es un conjunto finito de instrucciones que pueden sirven a resolver un problema si fueron construidas correctamente. Criterios generales de los algoritmos: 1. Tiene cero o ms cantidades de entrada 2. Existe al menos una salida 3. No debe existir claro y no ambiguo 4. En la mayora de los casos el algoritmo debe terminar en un nmero finito de pasos.
Unidad Guadalajara
Ejemplo: ordene un conjunto de enteros n 1 For (i=0 ; i < n ; i= n ; i++) { Examinar list[i] to list[n-1] y dejar el mnimo en list[min]; intercambiar list[i] y list[min]; }
[0]
Unidad Guadalajara
i=4
Unidad Guadalajara
Escriba el programa en C Hint: divida el problema en dos partes Encontrar el mas pequeo Intercambiar elementos Aprovechemos este ejercicio para repasar apuntadores. ptr-y = &y x = *ptr-y Operador de direccin Operador de referencia
Esto es tenemos dos maneras de acceder a una variable 1. Directamente por su nombre y 2. Por medio del operador de referencia *ptr-y
Unidad Guadalajara
Direccin Memoria
2362
ptr-y
-34
Programa de intercambio
Unidad Guadalajara
/* funcin que intercambia los valores de dos lugares de memoria indicados por los apuntadores x e y. */ Void swap(int *x, int *y) { int temp; Temp = *x; *x = *y; *y = temp; } La manera de llamar esta funcin es: swap (&a, &b)
Funciones Recursivas
Unidad Guadalajara
Un algoritmo es recursivo si se llama a si mismo (recursin directa) o llama a otras funciones que la invocan a su vez (recursin indirecta) Ejemplo: Algoritmo para generar e imprimir todas las permutaciones del conjunto {a, b ,c, d}. 1. a seguido de todas las permutaciones de {b, c, d}. 2. b seguido de todas las permutaciones de {a, c, d}. 3. c seguido de todas las permutaciones de {a, b, d}. 4. d seguido de todas las permutaciones de {a, b, c}.
Algoritmos iterativos
Unidad Guadalajara
Algoritmo iterativo: Este tipo de algoritmos en general calcula sus valores tomando los valores de la funcin previamente calculados en pasos anteriores
Version Recursiva
Unidad Guadalajara
Algoritmo recursivo: En la mayora de los casos la recursin resulta mas natural pero hay que recordar que tiene un costo. Ejemplo: suma de los cuadrados de los n nmeros recursivo void main (void){ int sum; sum = sumsqr(10); printf(sum=%d, sum); } int sumsqr(int i){ if(i>0) return sumsqr(i-1) + i*i; }
Complejidad
Unidad Guadalajara
La complejidad nos sirve para ver cuanto cuesta la ejecucin de un programa. Complejidad en espacio: se refiere a la cantidad de memoria necesaria para la ejecucin del algoritmo. Complejidad en tiempo: ejecucin del algoritmo. tiempo necesario para la
Complejidad
Unidad Guadalajara
Paso del algoritmo: es un segmento del algoritmo cuyo tiempo de ejecucin es independiente de las caractersticas de la instancia. Tamao del problema: es el numero de pasos que contenga. Ejemplo: producto de dos matrices A y B de n x n
ci,k = ai,l bl ,k
l =1
Paso del Algoritmo: suma o multiplicacin. Tamano del problema: n3 n2(n-1) multiplicaciones sumas
Complejidad
Unidad Guadalajara
El paso de un algoritmo nos permite calcular la complejidad de un algoritmo. Para el ejemplo anterior podemos calcular la complejidad de la siguiente manera.
f(n) cg(n) n N
Complejidad
Unidad Guadalajara
Ejemplo: Obtener la
= O(n), por lo
Complejidad
Unidad Guadalajara
Por lo que f(n) = O(g(n)) solo establece que cg(n) es un lmite superior al valor f(n) para todo n N. No quiere
2n + 3 = O(n),
No podamos decir
2n + 3 = O(n2),
Aunque este ltimo tambin sea correcto.
Complejidad
Unidad Guadalajara
Existen combinaciones mas complicadas por ejemplo: O(n log n), O(n2n), etc
Complejidad
Unidad Guadalajara
Ejemplo: for( i = 0; i < n; i++){ for( k=0; k < n; k++){ Calcula ci ,k = ai ,l bl ,k /* complejidad O(n) */ l =0 } } Por lo cual la complejidad es O(n3)
n 1
Complejidad
Unidad Guadalajara
Propiedad aditiva: si el algoritmo tiene dos ciclos diferentes: for( i = 0; i = n; i++){ Calcula /* complejidad O(f(n)) */ } for( k=0; k = m; k++){ Calcula /* complejidad O(g(m)) */ } Por lo cual la complejidad es O(f(n) + g(m))
Complejidad
Unidad Guadalajara
Propiedad multiplicativa: si el algoritmo incluye ciclos anidados: for( i = 0; i = n; i++){ for( k=0; k = m; k++){ Calcula } /* complejidad O(g(m)) */ } Por lo cual la complejidad es: O(n g(m))
Abstraccin de datos
Unidad Guadalajara
Definicin: Un tipo de dato es una coleccin de objetos y una coleccin de operadores que le pueden ser aplicados. Ejemplo: Los datos de tipo entero consisten de los objetos Int = {0, +1, -1, +2, -2, . Imax, Imin} y {+, -, *, /, %, etc.} Imax y Imin son los enteros que pueden ser representados en el sistema que se este usando.
Abstraccin de datos
Unidad Guadalajara
Una Estructura de Datos es la manera en que estn organizados los datos Definicin: un tipo de dato abstracto (ADT) es un tipo de dato organizado de tal manera que la especificacin de los objetos y sus operaciones estn separadas de la representacin de los objetos. Razn de ADT es que pueden usar cualquier maquina y lenguaje Ejemplo: El ADT Set esta definido como varios nmeros diferentes con operaciones que pueden incluir: Crear, Insertar, Remover, Unir, Insertar, etc. Definicin: Une estructura de datos es la manera en que los datos estn organizados
Estructura de Datos
Una estructura de datos puede implementarse en C Ejemplo: Estructura de datos address
Unidad Guadalajara
Unidad Guadalajara
Para declarar una variable info de address se escribe: struct address info; Para referenciar miembros de una estructura se usa el operador punto. Por ejemplo, para asignar el valor 10 al elemento number se escribe: info.number = 10; Para referenciar miembros declarados como cadenas de caracteres se usa el mismo operador punto. info.city ;
Unidad Guadalajara
Ejemplo: Para signar la cadena Hamilton a City printf ( Teclee Ciudad); gets (info.city); Al ejecutar el programa si se teclea Hamilton, entonces se asignara el valor deseado a la variable
Arreglos y Estructuras
Unidad Guadalajara
Arreglos como ADT Matemticamente, un arreglo de una dimensin es un vector: a = [a0, a1, a2, ., an-1]T Un arreglo de dos dimensiones es una matriz:
Arreglos y Estructuras
Unidad Guadalajara
Obviamente, empilando las columnas de la matriz A en otro vector b = [a0,0, a1,0, ., an-1,0, a0,1, an-1,1, , an-1,n-1 ]T De esta manera un arreglo de dos dimensiones se representa como uno de una dimensin. Las variables no han cambiado, nicamente su especificacin y la especificacin de las operaciones. Los arreglos son un ADT En C, la declaracin de un arreglo de una dimensin es: Int list [5]; /* declaracin de un arreglo de 5 enteros */ Int *plist; /* declaracin de un arreglo de 5 apuntadores a enteros */
Arreglos y Estructuras
Int list [5] define un arreglo de 5 enteros: list[0], list[1], list[2], list[3], list[4] De la misma manera Int *plist; define un arreglo de 5 apuntadores a enteros a plist[0], plist[1], plist[2], plist[3], plist[4] La direccin de list[0] se llama direccin de base. Las variables list y plist[0] ambas designan la direccin de base de list[0] list+i Es un apuntador a list[i]
Unidad Guadalajara
Arreglos y Estructuras
list+i = plist[i]? Si lo son a que apuntan? En general y sin importar el tipo del arreglo list[i], list+i = &list[i] *(list+i) = list[i] Un arreglo de dos dimensiones se declara: Int matr[10][10] Arreglos de mas de dos dimensiones se declaran Int mdarray[5][10][4][7];
Unidad Guadalajara
Arreglos y Estructuras
Estructuras Ejemplo: estructura empleado struct employee { char name[20]; int age; float salary; };
Unidad Guadalajara
Arreglos y Estructuras
Estructuras Ejemplo: estructura empleado struct employee { char name[20]; int age; float salary; }; /* tipo char */ /* tipo int */ /* tipo float */
Unidad Guadalajara
Arreglos y Estructuras
Estructuras Ejemplo: estructura empleado
struct employee { char name[20]; int age; float salary; }; /* tipo char */ /* tipo int */ /* tipo float */
Unidad Guadalajara
Una vez hecha la declaracin es posible declarar variables (person) que contienen los tres tipos de datos diferentes. struct employee person1, person2;
Arreglos y Estructuras
Unidad Guadalajara
Una vez hecha la declaracin es posible declarar variables (person) que contienen los tres tipos de datos diferentes. struct employee person1, person2; Ahora si asignamos valores determinados a person1 la siguiente es posible person2 = person1; Que hace que todos los elementos de person2 tengan los mismos valores que los elementos de person1.
Arreglos y Estructuras
Unidad Guadalajara
Es posible definir arreglos de estructuras, declarando las variables de la estructura como variables. struct employee { char name[20]; int age; float salary; }; Struct employee person[9]; /* arreglo de estructuras */ Para seleccionar un elemento particular se utiliza el operador punto.
Arreglos y Estructuras
Unidad Guadalajara
Es posible definir arreglos de estructuras, declarando las variables de la estructura como variables. struct employee { char name[20]; int age; float salary; }; Struct employee person[9]; /* arreglo de estructuras */ Para seleccionar un elemento particular se utiliza el operador punto.
Arreglos y Estructuras
Unidad Guadalajara
Arreglos y Estructuras
Unidad Guadalajara
Para referenciar los miembros de la estructura received se usa el operador doble punto. Por ejemplo para la instancia letter anterior: letter.date.day letter.date.month letter.date.year
Arreglos y Estructuras
Unidad Guadalajara
Estructuras auto referenciadas: Cuando una estructura contiene una o mas componentes los cuales son apuntadores a la misma estructura.
Arreglos y Estructuras
Unidad Guadalajara
ADT Polinomio
Unidad Guadalajara
K ak Ejemplo:
Para almacenar estos polinomios es suficiente almacenar sus parmetros: coeficientes y grado
ADT Polinomio
Unidad Guadalajara
A1(x) = 1+ 3x + 10x2 +4x3 + 2x4 A2(x) = 1+ 8x7 +2x100 Para almacenar los coeficientes, un arreglo 1D es til
6 ceros
92 ceros
El segundo vector es ralo. Si almacenamos los vectores en arreglos a1[4] y a2[100], el segundo polinomio que es ralo, desperdicia mucha memoria ya que se almacenan 97 ceros
ADT Polinomio
Unidad Guadalajara
Con esta representacin no es necesario almacenar informacin redundante, es decir los coeficientes cero
ADT Polinomio
Unidad Guadalajara
ADT Polinomio
Unidad Guadalajara
ADT Polinomio
Unidad Guadalajara
Para seleccionar y acceder una variable particular del arreglo de estructuras ADT polinomio, usamos el operador punto. pol [i].coef[k] pol [i].expon[k] Con i=0, .,M-1;k==,.,N-1
ADT Cadena
Unidad Guadalajara
Una cadena string es un arreglo de caracteres: S = s0,s1, , sN-1 Donde si son los caracteres tomados del conjunto de caracteres del lenguaje de programacin. Si N=0 entonces S es la cadena vaca. En C, las cadenas son representadas como arreglos de caracteres que terminan con el carcter null o vaci \0 Ejemplo: Representar la palabra student como una cadena
ADT Cadena
Unidad Guadalajara
En C, la cadena anterior puede determinarse por: char s[] = {student} Para imprimirla en su totalidad printf(string =%s,s); Para imprimir cualquier elemento printf(s[i] = %c, s[i]); Cualquier iesimo carcter ser impreso si 0 i 7
ADT Cadena
Unidad Guadalajara
Concatenacin de cadenas: para concatenar cadenas utilizamos la funcin strcat. Por ejemplo concatenar good y student e insertar el carcter espacio entre ellas: char s[]= student; char p[] = good; strcat(p,s); La cadena resultante good student queda almacenada en p[]
Una pila es un arreglo o lista con elementos ordenados en el cual todas las inserciones y borrados son realizados en un extremo llamado tope. Dada una pila: S= [s0,s1,,sn-1] Tenemos: s0 sn-1 si elemento base o bottom elemento tope elemento al tope de si-1
Insercin y borrado de elementos de una pila Push b Push c Push d Pop d Pop c
ADT cola: es un arreglo (lista) con elementos ordenados in el cual todas las inserciones toman lugar en un extremo llamado frente o cabeza y todas las eliminaciones en el otro extremo llamado trasero o cola Dada una cola: Q = [q0, q1, , qn-1] q0 qn-1 in b in c in d frente o cabeza trasero o cola
out
out o
Ejemplo: Calendario de trabajo Un tpico ejemplo de uso de colas es la cola de trabajo de un sistema operativo con iguales prioridades. Caractersticas de la cola de trabajo: Los trabajos son procesados en el orden de llegada
Para eliminar trabajos posteriores, se deben eliminar los trabajos previos Ya que los trabajos entran y dejan el sistema, la cola se recorre gradualmente a la derecha. Cuando el tamao mximo de la cola es alcanzado, la cola entera debe ser corrida a la izquierda, de tal manera que el ndice del elemento frente se vuelva cero.
cabeza
cola
Comentarios
Ya que recorrer arreglos puede ser costoso por el tiempo que se consume, la lista circular puede ser una opcin cuando el tiempo es muy importante. Cola vaca Cola no vaca Cola llena Cola llena
Frente = 0 Cola = 0
Frente = 0 Cola = 3
Frente = 0 Cola = 7
Frente = 5 Cola = 4
En una cola circular: Un elemento en blanco se deja para macar el frente La operacin mdulo se usa para transformar un arreglo convencional en una representacin circular No es necesario correr la cola
La operacin mod N es utilizada para denotar la extensin peridica [n] de la secuencia y[n]:
ADT Listas
Unidad Guadalajara
Acerca de la representacin secuencial Para implementar colas y pilas empleamos arreglos y un mapeo secuencial. Sin embargo borrar e insertar con esta clase de mapeo es costoso en tiempo. Una dificultad adicional resulta cuando tenemos que almacenar los mismos elementos usando diferentes tipos de ordenamiento (i.e. la lista de correos debe de almacenarse por fecha, por correspondiente, por tema, etc.) Si se almacenan usando estos criterios habr un desperdicio de espacio. Por otra parte si los almacenamos en un solo arreglo entonces se tendr que hacer un movimiento importante de datos, por lo cual tendremos un importante uso de tiempo.
ADT Listas
Unidad Guadalajara
Representacin ligada La representacin ligada en comparacin con la representacin secuencial, no requieren que la representacin de elementos sucesivos de una lista sean localizados uno despus del otro en la memoria. La idea de la representacin ligada es almacenar la direccin del siguiente elemento. De esta manera cada nodo de la lista contendr dos elementos que son un valor y una direccin (apuntador) al siguiente elemento. Operadores C: & * Operador direccin Operador de deferencia
ADT Listas
Unidad Guadalajara
Tener ms de una liga por Informacin es posible. Por ejemplo: los e-mails Pueden ser ligados por Tamao o fecha
ADT Listas
Unidad Guadalajara
Ejemplo simple con variable y su apuntador int i, *pi; i = 10; pi = &i ; *pi = 10; /* i es un entero, pi es un apuntador a entero */ /* valor asignado a i directamente*/ /* direccin de i asignada a pi */ /*a valor asignado a i indirectamente */
Insercin y borrado Tengamos los items a, b, c y d y la lista ligada [a, b, d]. Queremos insertar c entre b y d y luego borrar b.
ADT Listas
Unidad Guadalajara
ADT Listas
Unidad Guadalajara
ADT Listas
Unidad Guadalajara
Lista final
ADT Listas
Unidad Guadalajara
como una lista ligada Exponentes enteros Coeficientes no cero Por ejemplo:
ADT Listas
Unidad Guadalajara
Nodo de un polinomio
Representacin polinomial
ADT Listas
Unidad Guadalajara
Listas doblemente ligadas Listas ligadas tienen problemas porque solo facilitan su recorrido en la direccin de las ligas. Como hacer si nos localizamos en un nodo especifico de la lista y nos queremos mover al nodo precedente. Las listas doblemente ligadas ayudan a resolver este problema
ADT rbol
Unidad Guadalajara
Los rboles son estructuras muy importantes pues reflejan alguna realidad
rbol genealgico
ADT rbol
Terminologa y Descripcin: Existe un nodo especial llamado raz Los nodos restantes estn divididos en n0 conjuntos disjuntos T1, ..Tn donde cada uno de estos conjuntos es un rbol y es llamado sub-rbol de la raz.
Unidad Guadalajara
ADT rbol
Terminologa y Descripcin:
Unidad Guadalajara
Un nodo es la unidad de informacin y de ramas hacia otros nodos. El grado de un nodo es el nmero de sub-rboles de un nodo El grado de un rbol es el grado mximo de los nodos en el rbol La hoja o nodo Terminal es un nodo con grado cero El nivel de un nodo es definido permitiendo inicialmente que la raz se encuentre al nivel uno El hijo de un nodo esta definido como la raz (nodo) del sub-rbol La profundidad de un rbol es el nivel mximo de cualquier nodo en el rbol.
ADT rbol
Unidad Guadalajara
nivel
hoja
ADT rbol
Unidad Guadalajara
abuelo
padre
hijo
hermanos
ADT rbol
Ejemplo1: Aplicacin de los rboles en codificacin de fuente discreta.
Unidad Guadalajara
Cuando los smbolos fuente no son igualmente probables, un mtodo de codificacin eficiente es usar un cdigo de longitud variable. Donde los cdigos ms cortos de palabra son usados para codificar los smbolos ms frecuentes. Est filosofa es usada en el cdigo Morse tambin.
ADT rbol
Se necesita codificar y transmitir el siguiente texto que involucra cuatro smbolos a1, a2, a3, a4. Considere los siguientes tres cdigos diferentes.
Unidad Guadalajara
ADT rbol
El cdigo 1 no es decodificable unvocamente no es propio.
Unidad Guadalajara
El cdigo 2 es decodificable unvocamente e instantneamente. Se puede representar este cdigo a travs de los nodos terminales del siguiente rbol
El cdigo 3 es decodificable unvocamente, pero no es instantneamente. Este tiene otra estructura de rbol.
ADT rbol
Otra manera de representacin del cdigo de palabras es embeberlas en un rbol completo. Por ejemplo: El cdigo 2 puede ser embebido en el siguiente rbol binario:
Unidad Guadalajara
ADT rbol
Unidad Guadalajara
ADT rbol
Unidad Guadalajara
Para cada nodo, podemos crear una representacin similar y as representar el rbol completo como una
ADT rbol
Unidad Guadalajara
ADT rbol
Unidad Guadalajara
Con la representacin anterior, solo es posible moverse hacia abajo, es decir de padrea a hijos. Para poderse mover en ambas direcciones, es necesario tener ligas de los padres a los hijos y tambin de los hijos a los padres el uso de listas doblemente ligadas. Por ejemplo para el nodo B, el elemento de lista doblemente ligada es:
ADT rbol
Unidad Guadalajara
ADT rbol
Representacin Hijo Izquierdo-Hermano Derecho (LCRS) Tomando en cuenta el orden de los nodos/ramas del rbol. Observamos lo siguiente: Cada nodo tiene solo un hijo mas a la izquierda y hermano mas a la derecha Es apropiado seleccionar el orden de los nodos basndonos en como el dibujo del rbol. Por ejemplo, el rbol de la izquierda se puede re dibujar en la forma LCRS
Unidad Guadalajara
ADT rbol
Unidad Guadalajara
Similarmente a la representacin convencional en forma de listas para rboles, la representacin LCRS puede tambin ser escrita en la forma de lista. El elemento bsico de lista ligada es:
ADT rbol
Unidad Guadalajara
rbol Binario Definicin: Un rbol binario es un conjunto finito de nodos que consiten de una raz y dos subrboles ordenados Observaciones: El grado de cualquier nodo no debe exceder dos Para rboles binarios, distinguimos entre rboles derecho e izquierdo. Ejemplo: los dos rboles siguientes son diferentes.
Nivel 2
Propiedad 3: Para cualquier rbol binario no vaco, si n0 es el nmero de nodos hoja y n2 es el nmero de nodos de grado 2, entonces: n0 = n2 + 1 Prueba: Sea n1 el nmero de nodos de grado uno y n el nmero total de nodos. Ya que el grado mximo de nodos es dos, tenemos: n = n0 + n1 + n2 (1) Ahora, cuente el nmero de ramas nb. Observe que cualquier nodo excepto la raz corresponde a la rama que llega a el. De esta manera nb = n 1 (2)
Todas lar ramas inician nicamente de nodos de grado uno o dos, as: nicamente una rama se origina de un nodo de grado uno Dos ramas se originan de nodos de grado dos Por lo que: nb = n1 + 2n2 De 2 y 3 n = nb + 1 = n1 + 2n2 + 1 Restando 4 de 1, obtenemos finalmente: 0 = n0 + n1 + n2 n1 -2n2 1 = n0 n2 -1 (4) (3)
n0 = n2 + 1
probado
Nodos de grado 2
Nodos hoja
Problema: Suponga que tenemos k secuencias ordenadas en orden creciente. Como unimos estas secuencias en una secuencia nica ordenada? Idea: Examinar las listas en paralelo y sacar el elemento ms pequeo y ponerlo al final de una nueva secuencia tota. Recorra las secuencias involucradas despus de que cada elemento sea sacado.
Basandonos en el concepto de rbol binario conmpleto, podemos representar un rbol por medio de un arreglo 1secuencial
Basndonos en el concepto de rbol binario completo, podemos representar un rbol por medio de un arreglo 1D secuencial.
Obviamente esto se puede emplear para representar cualquier rbol binario completo.
Representar rboles binarios completos con arreglos esta bien, sin embargo para rboles no llenos significa desperdicio de espaci. En este caso la representacin ligada es una buena opcin.
Recorridos o visitas de rbol binario, consiste en visitar una sola vez cada nodo del rbol. Los recorridos son importantes para las operaciones de bsqueda, insercin y borrado. En el programa de recorrido de funciones, es deseable tratar todos los nodos de la misma manera. Definamos las siguientes operaciones: V I D Visitar Ve a la Izquierda Ve a la Derecha
Existen seis posibles combinaciones para aplicar estas operaciones que son: {IVD, IDV, VID, VDI, DVI, DIV} Adoptando la convencin de que siempre recorrer izquierda antes que derecha del conjunto anterior tenemos: {IVD, IRV, VID} que son los recorridos que conocemos VID IDV IVD Pre-orden, Post-orden En orden
Los compiladores usan estructuras rbol para pre-procesar almacenar y calcular expresiones:
a - b(c / d + e / f)
(a / b) cd + e
En orden? a/b * c * d + e
Definicin: Un heap mximo es un rbol binario completo en el cual el valor de la llave de cualquier nodo no es mas pequea que el valor de la llave de sus hijos Definicin: Un heap mnimo es un rbol binario completo en el cual el valor de la llave de cualquier nodo no es mas grande que el valor de la llave de sus hijos
Heap mximo
Heap mnimo
Ejercici: Implemente una cola de prioridades, en la cual se borra el elemento de mxima (mnima) prioridad, se pueda insertar un elemento de cualquier prioridad. De la complejidad de su algoritmo. Insercin
Definicin: Un rbol binario de bsqueda es un rbol binario que satisface las siguientes propiedades: Todos los elementos tienen un identificador nico. Los identificadores del subrbol izquierdo deben ser menores que los identificadores del subrbol derecho. Los identificadores del subrbol derecho deben ser mayores que el de la raz. Los subrboles izquierdo y derecho deben ser tambin rboles binarios de bsqueda.
Binario de bsqueda
rbol de seleccin: Definicin: Un rbol de seleccin es un rbol binario donde cada nodo representa el ms pequeo de sus dos hijos. Aplicaciones: Ordenamiento y seleccin Concepto: Involucrar los elementos de la secuencia ordenada en un torneo de juego
Complejidad
complejidad total = 1 + 2 + 4 + 8 + . + n/2 Esta es la progresin geomtrica con p = log2n trminos y q = 2 , con esto ai = qai-1 La suma de la progresin geomtrica a1, ap esta dada por: q-1 Ahora, tomando en cuenta que a1 =1, q=2, y p = log2n podemos calcular la complejidad total como: Complejidad total = 2log2n 1 = n-1 = O(n) Sn = a1 (qp - 1)
Problema: suponga que tenemos K secuencias ordenadas en orden decreciente. Como unir esas secuencias en una nica secuencia ordenada? Idea: Examinar toadas las secuencias en paralelo, y sacar al arreglo final el valor ms pequeo, correr los elementos de la secuencia de donde se extrajo el elemento.
Secuencias originales
Paso11: sacar 40 y 65
Problema: Usando los rboles de ordenamiento proponga un algoritmo para realizar la tarea anterior.
Problema: Usando los rboles de ordenamiento proponga un algoritmo para realizar la tarea anterior.
Secuencias originales
Problema: Usando los rboles de ordenamiento proponga un algoritmo para realizar la tarea anterior.
Problema: Usando los rboles de ordenamiento proponga un algoritmo para realizar la tarea anterior.
Problema: Usando los rboles de ordenamiento proponga un algoritmo para realizar la tarea anterior.
Proceso terminado
Bosques
Unidad Guadalajara
Bosques
Unidad Guadalajara
El concepto de bosque esta fuertemente relacionado al de rbol ya que si removemos la raz de un rbol obtenemos un bosque.
Bosques
Unidad Guadalajara
Otro ejemplo, es eliminando un nodo diferente de la raz. Eliminando este nodo obtenemos un bosque
Bosques
Transformacin de un bosque en un rbol binario.
Unidad Guadalajara
Bosques
Transformacin de un bosque en un rbol binario.
Unidad Guadalajara
Segundo: Los rboles transformados son ligados por medio del campo hermano del nodo raz.
Bosques
Otro ejemplo:
Unidad Guadalajara
Primer paso:
Bosques
Otro ejemplo:
Unidad Guadalajara
rboles y Conjuntos
El rbol puede ser empleado para representar conjuntos. Por simplicidad asumimos que incluirn nmeros {0, 1, 2, 3, .. , n-1} En la practica, estos nmeros pueden ser los ndices de una tabla de smbolos que almacenan algunos elementos reales. Por ejemplo: si n=10 y consideramos tres conjuntos disjuntos: S1 = {0, 6, 7, 8} S2 = {1, 4, 9} S3 = {2, 3, 5} 176
Unidad Guadalajara