4. estructuras de datos 1

21
4. Estructuras de Datos 1 Arreglos y listas enlazadas

Upload: forest

Post on 22-Feb-2016

71 views

Category:

Documents


0 download

DESCRIPTION

4. Estructuras de Datos 1. Arreglos y listas enlazadas. La memoria RAM. una secuencia de caracteres (bytes) en donde se encuentran las instrucciones y datos a los que se accede directamente a través del procesador del computador. . Dirección. Datos. Estructuras de datos. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 4. Estructuras de Datos 1

4.  Estructuras de Datos 1

Arreglos y listas enlazadas

Page 2: 4. Estructuras de Datos 1

La memoria RAM• una secuencia de caracteres (bytes) en donde

se encuentran las instrucciones y datos a los que se accede directamente a través del procesador del computador.

Dirección Datos

Page 3: 4. Estructuras de Datos 1

Estructuras de datos• Son sistemas o métodos de organización de datos

que permiten un almacenamiento eficiente de la información en la memoria del computador

• Constituyen las piezas básicas para la construcción de algoritmos complejos, y permiten implementarlos de manera eficiente.

• Algunos Ejemplos: Arreglos, listas enlazadas, árboles

Page 4: 4. Estructuras de Datos 1

Ejemplos• 3n = O(n)• 2 = O(1)• 2 = O(n)• 3n + 2 = O(n)• An2+ Bn + C = O(n2)• Alog n + Bn + C nlog n + Dn2 = ?

• 3 = Ω(1)• 3n = Ω(n)• 3n = Ω(1)• 3n + 2 = Ω(n)

Θ (n)

Page 5: 4. Estructuras de Datos 1

Ecuaciones de Recurrencia• Son ecuaciones en que el valor de la función para un n dado

se obtiene en función de valores anteriores.• Esto permite calcular el valor de la función para cualquier n, a

partir de condiciones de borde (o condiciones iniciales)• Ejemplo: Torres de Hanoi

an = 2an-1 + 1a0 = 0

• Ejemplo: Fibonaccifn = fn-1 + fn-2

f0 = 0f1 = 1

Page 6: 4. Estructuras de Datos 1

Ecuaciones de Primer Orden• Consideremos una ecuación de la forma

an = ban-1 + cn

• donde b es una constante y cn es una función conocida.• Como precalentamiento, consideremos el caso b = 1:

an = an-1 + cn

• Esto se puede poner en la formaan - an-1 = cn

• Sumando a ambos lados, queda una suma telescópica:

• an = a0 + Σck

1<=k<=n

Page 7: 4. Estructuras de Datos 1

Ecuaciones de Primer Orden: (cont.)• Para resolver el caso general:

an = ban-1 + cn

• dividamos ambos lados por el “factor sumante” bn:an/bn = an-1/bn-1 +cn/bn

• Si definimos An = an /bn, Cn = cn=bn, queda una ecuación que ya sabemos resolver:

An = An-1 + Cn con soluciónAn = A0 + Σck

1<=k<=n

• y finalmentean = a0bn + Σckbn-k

1<=k<=n

Page 8: 4. Estructuras de Datos 1

Ejemplo: Torres de Hanoi• El número de movimientos de discos está dado por la

ecuaciónan = 2an-1 + 1a0 = 0

• De acuerdo a lo anterior, la solución es an = Σ2n-k = Σ2k

1<=k<=n 0<=k<=n-1

• Lo que significaan = 2n-1

Page 9: 4. Estructuras de Datos 1

Propuesto• Generalizar este método para resolver ecuaciones de la forma

an = bnan-1 + cn

• donde bn y cn son funciones conocidas.

Page 10: 4. Estructuras de Datos 1

Ecuaciones Lineales con coef. Const.• Ejemplo: Fibonacci

fn = fn-1 + fn-2

f0 = 0f1 = 1

• Este tipo de ecuaciones tienen soluciones exponenciales, de la forma fn = λn:

fn = fn-1 + fn-2 λn = λn-1 + λn-2

• Dividiendo ambos lados por λn-2 obtenemos la ecuación característica

λ2 - λ + 1 = 0• cuyas raíces son Ф1= (1+ sqrt(5))/2 ≈ 1.618

Ф2= (1- sqrt(5))/2 ≈ 0.618

Page 11: 4. Estructuras de Datos 1

Ecuaciones Lineales con coef. Const.• La solución general se obtiene como una combinación lineal de

estas soluciones:fn = A Ф1

n + B Ф2n

• La condición inicial f0 = 0 implica que B = -A, esto es,fn = A(Ф1

n - Ф2n)

• y la condición f1 = 1 implica que A(Ф1 - Ф2) = A sqrt(5) = 1

• con lo cual obtenemos finalmente la fórmula de los números de Fibonacci:

fn =(1 /sqrt(5)) (Ф1n - Ф2

n)

• Nótese que Ф2n tiende a 0 cuando n tiende a infinito, de modo que

fn = Θ (n)

Page 12: 4. Estructuras de Datos 1

Teorema Maestro (div. para reinar)• Consideremos la ecuación de la forma

T(n) = pT(n/q) + Kn

• Supongamos que n es una potencia de q, digamos n = q k

Entonces T(q k ) = pT(q k -1 ) + Kq k

• Y si definimos a k = T(q k ) tenemos la ecuación: a k = pa k -1 + Kq k

• La cual tiene solución a k = a 0 p k + K Σqjpk-j (ver al principio) 1<=j<=n

Page 13: 4. Estructuras de Datos 1

Teorema Maestro (cont.)• Como k = log q n, tenemos

T(n) = T(1)plog q n + Kplog q n Σ(q/p)j

1<=j<=log q n

• Y observamos que

plog q n = (qlog q p) log q n =(qlog q n) log q p =(n) log q p

• Por lo tanto: T(n) = (n) log q p (T(1) + K Σ(q/p)j )

1<=j<=log q n

Page 14: 4. Estructuras de Datos 1

Teorema Maestro: caso p < qT(n) = pT(n/q) + Kn

Page 15: 4. Estructuras de Datos 1

Teorema Maestro: caso p = qT(n) = pT(n/q) + Kn

Page 16: 4. Estructuras de Datos 1

Teorema Maestro: caso p > qT(n) = pT(n/q) + Kn

Page 17: 4. Estructuras de Datos 1

Dividir para ReinarEste es un método de diseño de algoritmos que se basa en subdividir el problema en sub-problemas, resolverlos recursivamente, y luego combinar las soluciones de los sub-problemas para construir la solución del problema original.Ejemplo: Multiplicación de Polinomios.Supongamos que tenemos dos polinomios con n coeficientes, o sea, de grado n-1:A(x) = a0+a1*x+ ... +an-1*xn-1B(x) = b0+b1*x+ ... +bn-1*xn-1

representados por arreglos a[0], .., a[n-1] y b[0], ..,b[n-1]. Queremos calcular los coeficientes del polinomio C(x) tal que C(x) = A(x)*B(x).

Page 18: 4. Estructuras de Datos 1

Solulción Un algoritmo simple para calcular esto es:

// Multiplicación de polinomios for( k=0; k<=2*n-2; ++k ) c[k] = 0;for( i=0; i<n; ++i) for( j=0; j<n; ++j) c[i+j] += a[i]*b[j];

Evidentemente, este algoritmo requiere tiempo O(n2). ¿Se puede hacer más rápido?

Page 19: 4. Estructuras de Datos 1

Dividir-componerSupongamos que n es par, y dividamos los polinomios en dos partes. Por ejemplo, si A(x) = 2 + 3*x - 6*x2 + x3

entonces se puede reescribir comoA(x) = (2+3*x) + (-6+x)*x2

y en generalA(x) = A'(x) + A"(x) * xn/2

B(x) = B'(x) + B"(x) * xn/2

EntoncesC = (A' + A"*xn/2) * (B' + B"*xn/2) = A'*B' + (A'*B" + A"*B') * xn/2 + A"*B" * xn

Page 20: 4. Estructuras de Datos 1

Dividir-componer (cont.)C = (A' + A"*xn/2) * (B' + B"*xn/2) =

A'*B' + (A'*B" + A"*B') * xn/2 + A"*B" * xn Esto se puede implementar con 4 multiplicaciones recursivas, cada una involucrando polinomios de la mitad del tamaño que el polinomio original. T(n) = 4*T(n/2) + K*n donde K es alguna constante cuyo valor exacto no es importante. Por lo tanto la solución del problema planteado (p=4, q=2) es T(n) = O(nlog

2 4) = O(n2) lo cual no mejora al algoritmo visto

inicialmente.

Page 21: 4. Estructuras de Datos 1

Dividir-componer (cont.)Pero...

hay una forma más eficiente de calcular C(x). Si renombramos : D = (A'+A") * (B'+B")E = A'*B‘F = A"*B" entonces

C = E + (D-E-F)*xn/2 + F*xn Lo cual utiliza sólo 3 multiplicaciones recursivas, en lugar de 4.

Esto implica que T(n) = O(nlog

2 3) = O(n1.59)