Análisis asintótico de - Elisa Schaeffer · Análisis de algoritmos!Intento de caracterizar el...

6
Análisis asintótico de algoritmos Algoritmos y problemas ! Cada algoritmo resuelve a un problema particular ! Hay varias maneras de resolver un problema ! Algunas maneras son buenas y otras son malas ! El propósito del análisis de algoritmos es identificar los algoritmos buenos Repaso matemático b 0 =1 b 1 = b b a+c = b a b c b ac =(b a ) c b -a = ( 1 b ) a = 1 b a Función logarítmica b log b x = x donde x> 0 log b (x)= log b (x) log b (b ) . log b 1=0 Si log b x = y , b y = x x>y = log b x> log b y : log b x = log b y = x = y e: x>y = log x> log y

Transcript of Análisis asintótico de - Elisa Schaeffer · Análisis de algoritmos!Intento de caracterizar el...

Page 1: Análisis asintótico de - Elisa Schaeffer · Análisis de algoritmos!Intento de caracterizar el algoritmo en términos de la cantidad de computación y memoria que se necesita para

Análisis asintótico de algoritmos

Algoritmos y problemas

! Cada algoritmo resuelve a un problema particular! Hay varias maneras de resolver un problema! Algunas maneras son buenas y otras son malas! El propósito del análisis de algoritmos es

identificar los algoritmos buenos

Repaso matemático

Exponentes

b0 = 1

b1 = b

ba+c = babc

bac = (ba)c

b!a =!

1b

"a= 1

ba

Analisis de algoritmos– p. 14

Función logarítmicaLogaritmos

blogb x = x donde x > 0

Si logb x = y, by = x

Se define que logb 1 = 0

Cambios de base: logb!(x) =logb(x)

logb(b!).

Es inyectiva: logb x = logb y =! x = y

Es creciente: x > y =! logb x > logb y

Analisis de algoritmos– p. 15

Logaritmos

blogb x = x donde x > 0

Si logb x = y, by = x

Se define que logb 1 = 0

Cambios de base: logb!(x) =logb(x)

logb(b!).

Es inyectiva: logb x = logb y =! x = y

Es creciente: x > y =! logb x > logb y

Analisis de algoritmos– p. 15

Logaritmos

blogb x = x donde x > 0

Si logb x = y, by = x

Se define que logb 1 = 0

Cambios de base: logb!(x) =logb(x)

logb(b!).

Es inyectiva: logb x = logb y =! x = y

Es creciente: x > y =! logb x > logb y

Analisis de algoritmos– p. 15

Logaritmos

blogb x = x donde x > 0

Si logb x = y, by = x

Se define que logb 1 = 0

Cambios de base: logb!(x) =logb(x)

logb(b!).

Es inyectiva: logb x = logb y =! x = y

Es creciente: x > y =! logb x > logb y

Analisis de algoritmos– p. 15

Logaritmos

blogb x = x donde x > 0

Si logb x = y, by = x

Se define que logb 1 = 0

Cambios de base: logb!(x) =logb(x)

logb(b!).

Es inyectiva: logb x = logb y =! x = y

Es creciente: x > y =! logb x > logb y

Analisis de algoritmos– p. 15

Logaritmos

blogb x = x donde x > 0

Si logb x = y, by = x

Se define que logb 1 = 0

Cambios de base: logb!(x) =logb(x)

logb(b!).

Es inyectiva: logb x = logb y =! x = y

Es creciente: x > y =! logb x > logb y

Analisis de algoritmos– p. 15

Page 2: Análisis asintótico de - Elisa Schaeffer · Análisis de algoritmos!Intento de caracterizar el algoritmo en términos de la cantidad de computación y memoria que se necesita para

PropiedadesLogaritmos

Multiplicación: logb(x · y) = logb x + logb y

División: logb

!

xy

"

= logb x ! logb y

Potencia: logb xc = c logb x

En el exponente: xlogb y = ylogb x

Factorial: logb(n!) =n

#

i=1

logb i

Analisis de algoritmos– p. 17

Logaritmos

Multiplicación: logb(x · y) = logb x + logb y

División: logb

!

xy

"

= logb x ! logb y

Potencia: logb xc = c logb x

En el exponente: xlogb y = ylogb x

Factorial: logb(n!) =n

#

i=1

logb i

Analisis de algoritmos– p. 17

Logaritmos

Multiplicación: logb(x · y) = logb x + logb y

División: logb

!

xy

"

= logb x ! logb y

Potencia: logb xc = c logb x

En el exponente: xlogb y = ylogb x

Factorial: logb(n!) =n

#

i=1

logb i

Analisis de algoritmos– p. 17

Logaritmos

Multiplicación: logb(x · y) = logb x + logb y

División: logb

!

xy

"

= logb x ! logb y

Potencia: logb xc = c logb x

En el exponente: xlogb y = ylogb x

Factorial: logb(n!) =n

#

i=1

logb i

Analisis de algoritmos– p. 17

Logaritmos

Multiplicación: logb(x · y) = logb x + logb y

División: logb

!

xy

"

= logb x ! logb y

Potencia: logb xc = c logb x

En el exponente: xlogb y = ylogb x

Factorial: logb(n!) =n

#

i=1

logb i

Analisis de algoritmos– p. 17

Ejemplos de bases

Logaritmos

1

2

3

4

5

6

7

8

9

10

0 200 400 600 800 1000

b = 2b = e

b = 10

Analisis de algoritmos– p. 16

Logaritmos

1

2

3

4

5

6

7

8

9

10

0 200 400 600 800 1000

b = 2b = e

b = 10

Analisis de algoritmos– p. 16

Análisis de algoritmos

! Intento de caracterizar el algoritmo en términos de la cantidad de computación y memoria que se necesita para resolver un problema

! La moneda tiene dos caras: la dificultad del problema y la eficiencia del algoritmo en resolverlo

Calidad de algoritmos

! Tiempo total de computación! Número de operaciones realizadas por el algoritmo

! Número de transiciones tomadas por la Máquina Turing que ejecuta el algoritmo

! Cantidad de memoria utilizada! Número y tamaño de las variables

! Posición extrema a la derecha que se llega a visitar en la cinta de la Máquina Turing durante la ejecución

Page 3: Análisis asintótico de - Elisa Schaeffer · Análisis de algoritmos!Intento de caracterizar el algoritmo en términos de la cantidad de computación y memoria que se necesita para

Operaciones básicas! Cuando el algoritmo

está expresado en pseudocódigo, no lo vamos a convertir en una Máquina Turing

! Buscamos contar la cantidad de las operaciones básicas que contiene el algoritmo

! Aritmética simple! Lógica simple! Comparaciones simples! Asignaciones simples! Saltos

Instancias

AEntrada Salida

Para cada problema, hay varias instancias que son los datos particulares de entrada del problema.

Dificultad de instancias! No todas las instancias son iguales en términos de

dificultad de su resolución.

! Por ejemplo, la Máquina Turing de incremento unitario toma una cantidad diferente de transiciones cuando está presentado con entradas diferentes.

! El tamaño de la entrada evidentemente afecta, pero también afecta su estructura.

! La teoría clásica de complejidad computacional se formula en términos del tamaño de la instancia.

Tamaño de la instancia ! Para llegar a comparabilidad, uno busca

siempre calcular el tamaño de instancia en los mismos términos

! La manera más confiable es convertir todo en binario y luego contar los bits

! La manera más fácil depende del problema, pero es típicamente natural y evidente

Page 4: Análisis asintótico de - Elisa Schaeffer · Análisis de algoritmos!Intento de caracterizar el algoritmo en términos de la cantidad de computación y memoria que se necesita para

Complejidad de peor caso! Fijamos el tamaño de la instancia

! Ejemplo: cantidad de bits! Buscamos la instancia de ese tamaño que es la más

difícil! Ejemplo: que tenga un solo cero al inicio

! Contamos las operaciones requeridas y el consumo de memoria para este peor caso

! Otras opciones incluyen la complejidad del caso promedio y la complejidad amortizada

Complejidad asintótica! Denotamos el tamaño de instancia con n! Calculamos el número de operaciones y el

consumo de memoria para varios diferentes valores de n

! Graficamos el desempeño del algoritmo en función de n

! Buscamos a una función simple que nos de una cota superior al comportamiento observado

Clases de magnitudes

! Buscamos agrupar las posibles funciones de complejidad según su rapidez

! Necesitamos una notación matemática para expresar que una función dada se comporta en el largo plazo de manera parecida a otra

! La palabra asintótica refiere al comportamiento con grandes valores

Ejemplos de funciones

2.3. CALIDAD DE ALGORITMOS 29

0.1

1

10

100

1000

10000

100000

1e+06

1e+07

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

f(x) = ex

f(x) = 2x

f(x) = x3

f(x) = x2

f(x) = x log2(x)f(x) = x

f(x) = log2(x)

Figura 2.1: Crecimiento de algunas funciones comunmente encontrados en el analisisde algoritmos. Nota que el ordenacion segun magnitud cambia al comienzo, pero paravalores suficientemente grandes ya no hay cambios.

Otra propiedad util es que si

(f(n) ! O (h(n)) " g(n) ! O (h(n))) # f(n) + g(n) ! O (h(n)) . (2.3)

Si g(n) ! O (f(n)), f(n) + g(n) ! O (f(n)). Esto nos permite facilmente formarO (f(n)) de polinomios y muchas otras expresiones. Por definicion, podemos ignorarcoeficientes numericos de los terminos de la expresion. Ademas con el resultado anteriornos permite quitar todos los terminos salvo que el termino con exponente mayor. Por logeneral, O (f(n)) es la notacion de complejidad asintotica mas comunmente utilizado.Una observacion interesante es la complejidad asintotica de funciones logarıtmicas: paracualquier base b > 0 y cada x > 0 tal que x ! R (incluso numeros muy cercanos a cero),aplica que logb(n) ! O (nx) (por la definicion de logaritmo). Utilizando la definicion deecuacion 1.25 para cambiar la base de un logaritmo, llegamos a tener

loga(n) =1

logb(a)logb(n) ! ! (logb n) , (2.4)

porque logb(a) es un constante. Entonces, como loga(n) = ! (logb n), no hay necesidadde marcar la base en una expresion de complejidad asintotica con logaritmos.Otra relacion importante es que para todo x > 1 y todo k > 0, aplica que nk ! O (xn)—es decir, cada polinomial crece asintoticamente mas lentamente que cualquiera expresionexponencial.En terminos no muy exactos, se dice que un algoritmo es eficiente si su tiempo de ejecu-cion tiene una cota superior asintotica que es un polinomio. Un problema que cuenta conpor lo menos un algoritmo eficiente es un problema polinomial. Un problema es intratablesi no existe ningun algoritmo eficiente para resolverlo. Tambien se dice que un problemasin solucion si no cuenta con algoritmo ninguno. El el siguiente capıtulo formulamos estestipos de conceptos formalmente.Para ilustrar el efecto del tiempo de ejecucion, el cuadro 2.1 (adaptado de [10]) muestrala dependencia del tiempo de ejecucion del numero de operaciones que se necesita.

2.3. CALIDAD DE ALGORITMOS 29

0.1

1

10

100

1000

10000

100000

1e+06

1e+07

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

f(x) = ex

f(x) = 2x

f(x) = x3

f(x) = x2

f(x) = x log2(x)f(x) = x

f(x) = log2(x)

Figura 2.1: Crecimiento de algunas funciones comunmente encontrados en el analisisde algoritmos. Nota que el ordenacion segun magnitud cambia al comienzo, pero paravalores suficientemente grandes ya no hay cambios.

Otra propiedad util es que si

(f(n) ! O (h(n)) " g(n) ! O (h(n))) # f(n) + g(n) ! O (h(n)) . (2.3)

Si g(n) ! O (f(n)), f(n) + g(n) ! O (f(n)). Esto nos permite facilmente formarO (f(n)) de polinomios y muchas otras expresiones. Por definicion, podemos ignorarcoeficientes numericos de los terminos de la expresion. Ademas con el resultado anteriornos permite quitar todos los terminos salvo que el termino con exponente mayor. Por logeneral, O (f(n)) es la notacion de complejidad asintotica mas comunmente utilizado.Una observacion interesante es la complejidad asintotica de funciones logarıtmicas: paracualquier base b > 0 y cada x > 0 tal que x ! R (incluso numeros muy cercanos a cero),aplica que logb(n) ! O (nx) (por la definicion de logaritmo). Utilizando la definicion deecuacion 1.25 para cambiar la base de un logaritmo, llegamos a tener

loga(n) =1

logb(a)logb(n) ! ! (logb n) , (2.4)

porque logb(a) es un constante. Entonces, como loga(n) = ! (logb n), no hay necesidadde marcar la base en una expresion de complejidad asintotica con logaritmos.Otra relacion importante es que para todo x > 1 y todo k > 0, aplica que nk ! O (xn)—es decir, cada polinomial crece asintoticamente mas lentamente que cualquiera expresionexponencial.En terminos no muy exactos, se dice que un algoritmo es eficiente si su tiempo de ejecu-cion tiene una cota superior asintotica que es un polinomio. Un problema que cuenta conpor lo menos un algoritmo eficiente es un problema polinomial. Un problema es intratablesi no existe ningun algoritmo eficiente para resolverlo. Tambien se dice que un problemasin solucion si no cuenta con algoritmo ninguno. El el siguiente capıtulo formulamos estestipos de conceptos formalmente.Para ilustrar el efecto del tiempo de ejecucion, el cuadro 2.1 (adaptado de [10]) muestrala dependencia del tiempo de ejecucion del numero de operaciones que se necesita.

Page 5: Análisis asintótico de - Elisa Schaeffer · Análisis de algoritmos!Intento de caracterizar el algoritmo en términos de la cantidad de computación y memoria que se necesita para

Ejemplos de tiempos

30 CAPITULO 2. PROBLEMAS Y ALGORITMOS

Cuadro 2.1: En la tabla (originalmente de [10]) se muestra para diferentes valores de n eltiempo de ejecucion (en segundos (s), minutos (min), horas (h), dıas (d) o anos (a)) para unalgoritmo necesita exactamente f(n) operaciones basicas del procesador para encontrarsolucion y el procesador es capaz de ejecutar un millon de instrucciones por segundo.Si el tiempo de ejecucion es mayor a 1025 anos, lo marcamos simplemente como ! ",mientras los menores a un segundo son ! 0. El redondeo con tiempos mayores a unsegundo estan redondeados a un segundo entero mayor si menos de un minuto, al minutoentero mayor si menores a una hora, la hora entera mayor si menores a un dıa, y el anoentero mayor si medidos en anos.

f(n) (#)n ($) n n log2 n n2 n3 1, 5n 2n n!

10 ! 0 ! 0 ! 0 ! 0 ! 0 ! 0 4 s30 ! 0 ! 0 ! 0 ! 0 ! 0 18 min 1025 a50 ! 0 ! 0 ! 0 ! 0 11 min 36 a ! "100 ! 0 ! 0 ! 0 1 s 12, 892 a 1017 anos ! "1000 ! 0 ! 0 1 s 18 min ! " ! " ! "10000 ! 0 ! 0 2 min 12 d ! " ! " ! "100000 ! 0 2 s 3 h 32 a ! " ! " ! "1000000 1 s 20 s 12 d 31710 a ! " ! " ! "

DefinicionesCrecimiento asintótica

Para funciones f : Z+ ! R y g : Z+ ! R, escribimos

f(n) " O (g(n)) si #c > 0 tal que |f(n)| $ c |g(n)| parasuficientemente grandes valores de n

f(n) " ! (g(n)) si #c > 0 tal que |f(x)| % c |g(x)| parasuficientemente grandes valores de n

f(n) " " (g(n)) si #c, c! > 0 tales quec · |g(x)| $ |f(x)| $ c! · |g(x)| para suficientementegrandes valores de n

Algoritmos y problemas– p. 31

Crecimiento asintótica

Para funciones f : Z+ ! R y g : Z+ ! R, escribimos

f(n) " O (g(n)) si #c > 0 tal que |f(n)| $ c |g(n)| parasuficientemente grandes valores de n

f(n) " ! (g(n)) si #c > 0 tal que |f(x)| % c |g(x)| parasuficientemente grandes valores de n

f(n) " " (g(n)) si #c, c! > 0 tales quec · |g(x)| $ |f(x)| $ c! · |g(x)| para suficientementegrandes valores de n

Algoritmos y problemas– p. 31

InterpretaciónInterpretación

O (f(n)) es una cota superior asintotica al tiempode ejecución! (f(n)) es una cota inferior asintotica" (f(n)) dice que las dos funciones crecenasintóticamente iguales

El símbolo ! se reemplaza frecuentemente con =.

Algoritmos y problemas– p. 32

Interpretación

O (f(n)) es una cota superior asintotica al tiempode ejecución! (f(n)) es una cota inferior asintotica" (f(n)) dice que las dos funciones crecenasintóticamente iguales

El símbolo ! se reemplaza frecuentemente con =.

Algoritmos y problemas– p. 32

PropiedadesPropiedades

Las definiciones de crecimiento asintótica se generalizanpara funciones de argumentos múltiples y son transitivas:

(f(n) ! O (g(n)) " g(n) ! O (h(n))) # f(n) ! O (h(n)) .

(f(n) ! ! (g(n)) " g(n) ! ! (h(n))) # f(n) ! ! (h(n))

Como este aplica para ! (f(n)) y O (f(n)) los dos, aplicapor definición también para " (f(n)).

Algoritmos y problemas– p. 33

Propiedades

Las definiciones de crecimiento asintótica se generalizanpara funciones de argumentos múltiples y son transitivas:

(f(n) ! O (g(n)) " g(n) ! O (h(n))) # f(n) ! O (h(n)) .

(f(n) ! ! (g(n)) " g(n) ! ! (h(n))) # f(n) ! ! (h(n))

Como este aplica para ! (f(n)) y O (f(n)) los dos, aplicapor definición también para " (f(n)).

Algoritmos y problemas– p. 33

Propiedades

Las definiciones de crecimiento asintótica se generalizanpara funciones de argumentos múltiples y son transitivas:

(f(n) ! O (g(n)) " g(n) ! O (h(n))) # f(n) ! O (h(n)) .

(f(n) ! ! (g(n)) " g(n) ! ! (h(n))) # f(n) ! ! (h(n))

Como este aplica para ! (f(n)) y O (f(n)) los dos, aplicapor definición también para " (f(n)).

Algoritmos y problemas– p. 33

Page 6: Análisis asintótico de - Elisa Schaeffer · Análisis de algoritmos!Intento de caracterizar el algoritmo en términos de la cantidad de computación y memoria que se necesita para

Polinomios Polinomios

Es fácil formar O (f(n)) de polinomios y muchas otrasexpresiones por observar que en una suma, el términomayor domina el crecimiento:

(f(n) ! O (h(n)) " g(n) ! O (h(n))) # f(n)+g(n) ! O (h(n))

g(n) ! O (f(n)) # f(n) + g(n) ! O (f(n))

Algoritmos y problemas– p. 34

Polinomios

Es fácil formar O (f(n)) de polinomios y muchas otrasexpresiones por observar que en una suma, el términomayor domina el crecimiento:

(f(n) ! O (h(n)) " g(n) ! O (h(n))) # f(n)+g(n) ! O (h(n))

g(n) ! O (f(n)) # f(n) + g(n) ! O (f(n))

Algoritmos y problemas– p. 34

En una sumatoria, el término mayor domina:

Todos los términos menores se ignoran:

Logaritmos Logaritmos

Para cualquier base b > 0 y cada x > 0 tal que x ! R,aplica que logb(n) ! O (nx).Cambiando la base de un logaritmo, llegamos a tener

loga(n) =1

logb(a)logb(n) ! ! (logb n) ,

porque logb(a) es un constante.Entonces no hay necesidad de marcar la base en unaexpresión de complejidad asintótica con logaritmos.

Algoritmos y problemas– p. 35

Practicamos

Primera tarea para entregar

Ordena las funciones siguientes según su crecimientoasintotico O (fi(n)) de la menos rápida a la más rápida:

f1 = 7n f5 =!

nf2 = nn f6 = log7 nf3 = n7 f7 = 7log7 n

f4 = n log7 n f8 = 700n

Algoritmos y problemas– p. 40