You are on page 1of 134

Unidad Guadalajara

Estructura de Datos, Algoritmos y Matemticas Discretas


Flix RAMOS Grupo Ciencias Computacionales
Material original y compilado

z
Unidad Guadalajara

Unidad Guadalajara

Objetivos: 1. Ilustrar los conceptos de C 2. Introducir a la complejidad de algoritmos

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]

[1] 12 [1] 12 [1] 5 [1] 5 [1] 5

[2] 15 [2] 15 [2] 15 [2] 10 [2] 10

[3] 2 [3] 10 [3] 10 [3] 15 [3] 12

[4] 5 [4] 5 [4] 12 [4] 12 [4] 15

Unidad Guadalajara

i=0 i=1 Ejemplo: i=2 Ordene el siguiente vector i=3

10 [0] 2 [0] 2 [0] 2 [0]

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

2358 2359 2360 2361 2362 2363 2364 2365 2366

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

xk= f(xk-1, xk-2 , ..)


Ejemplo: suma de los cuadrados de los n nmeros void main (void){ int k, n, sum; n=10; sum=0; for(k=1;k<=n;k++) sum = sum+ k*k; printf(sum=%d, sum); }

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

Talg = Tcomp = Trun

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.

C nxn = n3 + n2(n-1) = 2n2(n- o.5) = O(n3) pasos


O() es conocida como notacin asinttica o orden de crecimiento Definicin: f(n) = O(g(n)) sii existe una constante positiva c y N tal que:

f(n) cg(n) n N

Complejidad
Unidad Guadalajara

Ejemplo: Obtener la

O(.) de 2n+3. Tomando c=3, tenemos

2n+ 3 3n n 3 Por lo que: 2n + 3 = O(n)


Esta presentacin no es nica, i.e. si 2n+3 que lo siguiente tambin es verdadero

= O(n), por lo

2n+3 = O(n2) 2n+3 = O(n3) 2n+3 = O(n4) . . .

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

decir nada acerca de que tan bueno es este lmite.


A fin que la expresin f(n) = O(g(n)) sea informativa, g(n) debe ser tan pequea una funcin de, como se pueda! De tal manera que cuando digamos:

2n + 3 = O(n),
No podamos decir

2n + 3 = O(n2),
Aunque este ltimo tambin sea correcto.

Complejidad
Unidad Guadalajara

Terminologa comnmente usada:


O(1) O(n) O(n2) O(n3) O(nn) (log n) Complejidad Complejidad Complejidad Complejidad Complejidad Complejidad Constante lineal cuadrtica cbica exponencial logartmica

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

Hasta este punto no se han creado variables

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

Las estructuras agrupan datos que pueden tener diferente tipo:

Arreglos y Estructuras
Estructuras Ejemplo: estructura empleado struct employee { char name[20]; int age; float salary; }; /* tipo char */ /* tipo int */ /* tipo float */
Unidad Guadalajara

Las estructuras agrupan datos que pueden tener diferente tipo:

Arreglos y Estructuras
Estructuras Ejemplo: estructura empleado
struct employee { char name[20]; int age; float salary; }; /* tipo char */ /* tipo int */ /* tipo float */
Unidad Guadalajara

Las estructuras agrupan datos que pueden tener diferente tipo:

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

Es posible incluir una estructura dentro de otra estructura:.

dateinfo es un nuevo Data Type, y es usado cuando la segunda estructura es definida.

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

Considere el siguiente polinomio:

K ak Ejemplo:

grado coeficientes A1(x) = 1+ 3x + 10x2 +4x3 + 2x4 A2(x) = 1+ 8x7 +2x100

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

Para solucionar este problema, podemos uara el ADT polinomio siguiente:

Con esta representacin no es necesario almacenar informacin redundante, es decir los coeficientes cero

ADT Polinomio
Unidad Guadalajara

Implementacin del ADT polinomio usando C:

N es el nmero de coeficientes diferentes de cero.

ADT Polinomio
Unidad Guadalajara

Es posible introducir arreglos de estructuras ADTpolinomio:

N es el nmero de coeficientes diferentes de cero y M es el nmero de polinomios.

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[]

ADT Pilas y Colas


Unidad Guadalajara

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

ADT Pilas y Colas


Unidad Guadalajara

Insercin y borrado de elementos de una pila Push b Push c Push d Pop d Pop c

ADT Pilas y Colas


Unidad Guadalajara

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

Decimos por convencin que:

out

out o

ADT Pilas y Colas


Unidad Guadalajara

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.

ADT Pilas y Colas


Unidad Guadalajara

cabeza

cola

Comentarios

ADT Pilas y Colas


Unidad Guadalajara

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

ADT Pilas y Colas


Unidad Guadalajara

J1, J2 y J3 se insertan J1 y J2 se borran y J4,J5, J6 yJ7 se insertan J8 y J9 se insertan J3 y J4 se borran .

ADT Pilas y Colas


Unidad Guadalajara

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]:

[n] = y[n mod 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

Ejemplo: Lista de enteros a, b, c:

ADT Listas
Unidad Guadalajara

Lista final

ADT Listas
Unidad Guadalajara

Polinomios como listas ligadas Deseamos representar el polinomio

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

nodo de una estructura doblemente ligada

Ejemplo de una lista doblemente ligada

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

Definicin: Un rbol es un conjunto finito de uno ms nodos tales que:

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

raz rama nodo

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

Representacin de rboles en forma de lista. Considere el rbol:

Representacin en forma de lista. A[B[E, F[K, L]],C[G],D[H, I, J[M]]]

ADT rbol
Unidad Guadalajara

Para su implantacin necesitamos el concepto de ligas mltiples:

Por ejemplo para el nodo A anterior necesitamos:

Para cada nodo, podemos crear una representacin similar y as representar el rbol completo como una

ADT rbol
Unidad Guadalajara

Por ejemplo, el arbol de grado dos:

Puede ser representado como la siguiente lista:

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

Otro ejemplo de rbol de grado 2

Corresponde la siguiente lista doblemente ligada.

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.

ADT rbol Binario


Propiedad 1: El nmero mximo de nodos en el nivel i de un rbol binario es 2 i-1 Propiedad 2: El nmero mximo de nodos en un rbol binario de profundidad k es 2k 1 Nivel 1
Unidad Guadalajara

Nivel 2

Nivel 3 Profundidad = 3 Nmero de nodos = 7

ADT rbol Binario


Unidad Guadalajara

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)

ADT rbol Binario


Unidad Guadalajara

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

ADT rbol Binario


Unidad Guadalajara

Nodos de grado 2

Nodos hoja

ADT rbol Binario


Unidad Guadalajara

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.

ADT rbol Binario


Unidad Guadalajara

Basandonos en el concepto de rbol binario conmpleto, podemos representar un rbol por medio de un arreglo 1secuencial

ADT rbol Binario


Unidad Guadalajara

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.

ADT rbol Binario


Unidad Guadalajara

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.

ADT rbol Binario


Unidad Guadalajara

Representacin con ligas de un nodo de rbol binarios

ADT rbol Binario


Unidad Guadalajara

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

ADT rbol Binario


Unidad Guadalajara

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

ADT rbol Binario


Unidad Guadalajara

Pre-orden Post-orden En orden

ABC BCA BAC

ABDECFG DEBFGCA DBEAFCG

ADT rbol Binario


Unidad Guadalajara

Los compiladores usan estructuras rbol para pre-procesar almacenar y calcular expresiones:

a - b(c / d + e / f)

ADT rbol Binario


Unidad Guadalajara

(a / b) cd + e

En orden? a/b * c * d + e

ADT rbol Binario


Unidad Guadalajara

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

ADT rbol Binario


Unidad Guadalajara

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

rbol Binario de Bsqueda


Unidad Guadalajara

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.

rbol Binario de Bsqueda


Unidad Guadalajara

Binario de bsqueda

No binario de bsqueda Por qu? 144

rbol Binario de Bsqueda


Bsqueda en un rbol Binario: a) Compare el valor buscado a con el valor del identificador de la raz b) Si la comparacin es positiva termina la bsqueda. a) Si a es mas pequeo que el valor del identificador de la raz a) Moverse al siguiente nivel izquierdo b) Si a es ms grande que el identificador de la raz a) Moverse al siguiente nivel a la derecha.
Unidad Guadalajara

rbol Binario de Bsqueda


Insercin en un rbol Binario: a) Busque en el rbol para asegurarse que el elemento no est ya en el rbol. b) Si bsqueda es positiva no insertar c) En otro caso a) Inserte a como el hijo derecho o izquierdo del nodo donde termino la bsqueda.
Unidad Guadalajara

rbol Binario de Seleccin


Unidad Guadalajara

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

rbol Binario de Seleccin


Unidad Guadalajara

rbol Binario de Seleccin


Unidad Guadalajara

Complejidad

1 comparacin 2 comparaciones 4 comparaciones n/2 comparaciones

rbol Binario de Seleccin


Unidad Guadalajara

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)

rbol Binario de Seleccin


Unidad Guadalajara

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.

rbol Binario de Seleccin


Unidad Guadalajara

Secuencias originales

Paso1: sacar 2 y correr la secuencia1.

Paso2: sacar 3 y correr la secuencia 4.

Paso3: sacar 5 y correr la secuencia2.

Paso4: sacar 6 y correr la secuencia 3.

Paso5: sacar 6 y correr la secuencia 2.

rbol Binario de Seleccin


Unidad Guadalajara

Paso6: sacar 8 y correr la secuencia3.

Paso7: sacar 9 y correr la secuencia2.

Paso8: sacar 12 y correr la secuencia 3.

Paso9: sacar 17 y correr la secuencia1.

Paso10: sacar 34 y correr la secuencia 1.

Paso11: sacar 40 y 65

rbol Binario de Seleccin


Unidad Guadalajara

Secuencia resultante. Secuencias iniciales

rbol Binario de Seleccin


Unidad Guadalajara

Problema: Usando los rboles de ordenamiento proponga un algoritmo para realizar la tarea anterior.

rbol Binario de Seleccin


Unidad Guadalajara

Problema: Usando los rboles de ordenamiento proponga un algoritmo para realizar la tarea anterior.

Secuencias originales

rbol Binario de Seleccin


Unidad Guadalajara

Problema: Usando los rboles de ordenamiento proponga un algoritmo para realizar la tarea anterior.

rbol Binario de Seleccin


Unidad Guadalajara

Problema: Usando los rboles de ordenamiento proponga un algoritmo para realizar la tarea anterior.

rbol Binario de Seleccin


Unidad Guadalajara

Problema: Usando los rboles de ordenamiento proponga un algoritmo para realizar la tarea anterior.

rbol Binario de Seleccin


Unidad Guadalajara

rbol Binario de Seleccin


Unidad Guadalajara

rbol Binario de Bsqueda


Unidad Guadalajara

rbol Binario de Seleccin


Unidad Guadalajara

rbol Binario de Seleccin


Unidad Guadalajara

rbol Binario de Seleccin


Unidad Guadalajara

rbol Binario de Seleccin


Unidad Guadalajara

rbol Binario de Seleccin


Unidad Guadalajara

Proceso terminado

rbol Binario de Seleccin


Unidad Guadalajara

Los rboles de seleccin pueden tener un grado mayor a 2.

Bosques
Unidad Guadalajara

Definicin: Un bosque es un conjunto de n 0 rboles disjuntos

Bosque de tres rboles

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.

El bosque anterior lo obtenemos eliminando la raz de este rbol

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

Primero transforme cada rbol en la forma Hijo Izquierdo hermano derecho.

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

You might also like