Análisis de Algoritmos

Documentos relacionados
Análisis de Algoritmos

Demostrando cotas inferiores: Arboles de decisión

Muchas de las ecuaciones de recurrencia que vamos a usar en este curso tienen la siguiente forma: ( c n =0 T (n) = a T (b n b.

Algoritmos en teoría de números

Análisis y Diseño de Algoritmos

Un tercer ejemplo: verificación de primalidad

Análisis de algoritmos.

Tema 3.2: Eficiencia de algoritmos recursivos. Diseño y Análisis de Algoritmos

Notación Asintótica. Temas. Introducción Notación O Notación Omega Notación Theta. Análisis de Algoritmos

Complejidad computacional. Algoritmos y Estructuras de Datos I. Complejidad computacional. Notación O grande

Multiplicación de matrices simétricas

Cardinalidad IIC1253. IIC1253 Cardinalidad 1 / 23

Cardinalidad IIC1253. IIC1253 Cardinalidad 1 / 23

Resolviendo Recurrencias

1/16. Coste de Algoritmos. 8 de abril de 2018

Análisis y Diseño de Algoritmos. Complejidad Computacional

Tiempo de Ejecución. Midiendo el Tiempo de Ejecución

R no es enumerable. Por contradicción, supongamos que existe una biyección f : N! R. diagonalización de Cantor. Para cada i 2 N:

Notación Asintótica 2

Recurrencias y cómo resolverlas

Algoritmos y Complejidad

Técnicas y Herramientas. Algoritmos y Complejidad. Técnicas de Demostración. Técnicas y Herramientas. Herramientas Matemáticas Básicas

Ejercicio. Usando la formulación del principio de inducción mostrada en la transparencia anterior, demuestre que: 2 2 n 1esdivisiblepor3. =2 n.

Relaciones IIC1253. IIC1253 Relaciones 1 / 32

Introducción y Comportamiento Asintótico

Análisis y Diseño de Algoritmos

1. Algoritmo, programa y pseudocódigo. Introducción al estudio de algoritmos. Ejemplos

Teoría de Modelos Finitos: Motivación

NOTACIÓN O GRANDE. El análisis de algoritmos estima el consumo de recursos de un algoritmo.

Problemas recursivamente enumerables

Introducción al análisis de algoritmos

Estructuras de Datos. Clase 3 Análisis de algoritmos recursivos

Complejidad computacional. Algoritmos y Estructuras de Datos I. Complejidad computacional. Notación O grande

Conceptos Fundamentales del Análisis de Algoritmos II

Estructuras de Datos y Algoritmos

Problemas recursivamente enumerables

Análisis de Algoritmos

Análisis de algoritmos

Ecuaciones de recurrencia. Abraham Sánchez López FCC/BUAP Grupo MOVIS

Análisis de Algoritmos Primer Problemario Prof. Miguel A. Pizaña 22 de Mayo de 2007

Resolución Proposicional

Capítulo 1: Fundamentos: Lógica y Demostraciones Clase 3: Relaciones, Funciones, y Notación Asintótica

IIC1253. IIC1253 Una introducción a la teoría de números (y a la criptografía) 1/45

Complejidad computacional y asintótica

Lógica Proposicional IIC2213. IIC2213 Lógica Proposicional 1/42

Lógica Proposicional IIC2213. IIC2213 Lógica Proposicional 1/42

Diseño y Análisis de Algoritmos

Números naturales y recursividad

Algoritmos Secuenciales y Recursivos

IIC1253. IIC1253 Inducción 1/30

Algoritmos de Búsqueda

RSA: Implementación. Ya resolvimos (3), ahora vamos a resolver (2). IIC3242 Complejidad Probabiĺıstica 28 / 77

Algoritmos y Estructuras de Datos Curso 06/07. Ejercicios

Una pregunta pendiente

1. Definiciones previas

Análisis de la Complejidad de Algoritmos

Clases de Complejidad

Análisis y Diseño de Algoritmos

Análisis de Algoritmos

Lógica proposicional: Lectura única

Arreglos. Algoritmos y Estructuras de Datos I. Arreglos en C++ Arreglos y listas

La lógica de segundo orden: Sintaxis

Algoritmos aleatorizados

1. Ecuaciones de recurrencia

Algoritmos aleatorizados

Temario. Tipos de recursión. Eficiencia y recursión

Recurrencias. Si a 0, a 1, a 2, es una progresión geométrica, entonces a 1 /a 0 = a 2 /a 1 = = a n+1 /a n = r, la razón común.

Algorítmica y Lenguajes de Programación. Eficiencia y notación asintótica (i)

Algoritmos de Ordenamiento

Complejidad de algoritmos recursivos

Tema 01: Fundamentos del Análisis Asintótico de Algoritmos

Máquinas de Turing IIC3242. IIC3242 Máquinas de Turing 1 / 42

Algoritmos Iterativos de Búsqueda y Ordenación y sus tiempos

Tema 2: Series numéricas

Programación dinámica: un último ejemplo

Demostración Contraejemplo. Métodos Indirectos

Capítulo 1 LA COMPLEJIDAD DE LOS ALGORITMOS

Máquinas de Turing IIC3242. IIC3242 Máquinas de Turing 1 / 45

Reglas de derivación Sumas, productos y cocientes. Tema 4

Propiedades de números enteros (lista de problemas para examen)

Técnicas de diseño de algoritmos Divide y Vencerás

Matemáticas Discretas

CI2612: Algoritmos y Estructuras de Datos II. Recurrencias y el principio de dividir y conquistar. Recurrencias. Objetivos.

Programación 2. Lección 8. Caracterización asintótica de la eficiencia de un algoritmo

(TALF- ITIS- C) Clase 3 5 de Octubre de 2010

Estructuras de Datos y Algoritmos

Tema 2 Fundamentos de Complejidad Algorítmica

Análisis de algoritmos

Especialidad La enseñanza de las matemáticas en secundaria Grupo B: Celaya. Inducción. 1. Principio de Inducción

Límite superior y límite inferior de una sucesión

RSA funciona correctamente

Este documento es de distribución gratuita y llega gracias a El mayor portal de recursos educativos a tu servicio!

ALGORITMOS INTRODUCCIÓN ALGORITMOS INTRODUCCIÓN AL ANÁLISIS Y AL DISEÑO DE AL ANÁLISIS Y AL DISEÑO DE UNIVERSIDAD AUTÓNOMA METROPOLITANA

Matriz asociada a una transformación lineal respecto a un par de bases

Análisis de Algoritmos

Capitulo 1 Tema 3: Resolución de Recurrencias Asintóticas

Un tercer problema NP-completo: Programación entera

Transcripción:

Análisis de Algoritmos IIC1253 IIC1253 Análisis de Algoritmos 1 / 36

Complejidad de un algoritmo Un algoritmo A puede ser pensado como una función A : {0,1} {0,1} Qué tan general es esta representación? Qué restricciones hay que imponer sobre A? IIC1253 Análisis de Algoritmos 2 / 36

Complejidad de un algoritmo Un algoritmo A puede ser pensado como una función A : {0,1} {0,1} Qué tan general es esta representación? Qué restricciones hay que imponer sobre A? Ejercicio Represente un algoritmo para decidir si un número natural es primo con la notación anterior. IIC1253 Análisis de Algoritmos 2 / 36

Complejidad de un algoritmo A cada algoritmo A asociamos una función tiempo A : {0,1} N tal que: tiempo A (w): número de pasos realizados por A con entrada w Qué es un paso de un algoritmo? Qué operaciones debemos considerar? IIC1253 Análisis de Algoritmos 3 / 36

Complejidad de un algoritmo A cada algoritmo A asociamos una función tiempo A : {0,1} N tal que: tiempo A (w): número de pasos realizados por A con entrada w Qué es un paso de un algoritmo? Qué operaciones debemos considerar? Ejercicio En general, un algoritmo puede ser pensado como una función A : Γ Γ, donde Γ es un alfabeto finito. De un algoritmo Ord para ordenar una lista de números naturales. Calcule la función tiempo Ord. Suponga que el alfabeto utilizado es {0,1,#} Indique cuáles son las operaciones que deben ser consideradas IIC1253 Análisis de Algoritmos 3 / 36

Análisis de un algoritmo en el peor caso Para analizar un algoritmo vamos a considerar el peor caso. Para cada algoritmo A asociamos una función t A : N N tal que t A (n) = máx{tiempo A (w) w {0,1} y w = n}, donde w es el largo de w. IIC1253 Análisis de Algoritmos 4 / 36

Análisis de un algoritmo en el peor caso Para analizar un algoritmo vamos a considerar el peor caso. Para cada algoritmo A asociamos una función t A : N N tal que t A (n) = máx{tiempo A (w) w {0,1} y w = n}, donde w es el largo de w. Ejercicio Calcule la función t Ord para el algoritmo Ord construido en la transparencia anterior. IIC1253 Análisis de Algoritmos 4 / 36

Notación asintótica En muchos casos, nos interesa conocer el orden de un algoritmo en lugar de su complejidad exacta. Queremos decir que un algoritmo es lineal o cuadrático, en lugar de decir que su complejidad es 3n 2 +17n+22 Vamos a desarrollar notación para hablar del orden de un algoritmo. Vamos a considerar funciones de la forma f : N R + 0, donde R + = {r R r > 0} y R + 0 = R+ {0} Incluyen a las funciones definidas en las transparencias anteriores, y también sirven para modelar el tiempo de ejecución de un algoritmo IIC1253 Análisis de Algoritmos 5 / 36

La notación O(f) Sea f : N R + 0 Definición O(f) = {g : N R + 0 ( c R+ )( n 0 N) ( n n 0 )(g(n) c f(n))} IIC1253 Análisis de Algoritmos 6 / 36

La notación O(f) Sea f : N R + 0 Definición O(f) = {g : N R + 0 ( c R+ )( n 0 N) ( n n 0 )(g(n) c f(n))} Ejercicio Demuestre que 3n 2 +17n+22 O(n 2 ) IIC1253 Análisis de Algoritmos 6 / 36

Las notaciones Ω(f) y Θ(f) Definición Ω(f) = {g : N R + 0 ( c R+ )( n 0 N) Θ(f) = O(f) Ω(f) ( n n 0 )(c f(n) g(n))} IIC1253 Análisis de Algoritmos 7 / 36

Las notaciones Ω(f) y Θ(f) Definición Ω(f) = {g : N R + 0 ( c R+ )( n 0 N) Θ(f) = O(f) Ω(f) ( n n 0 )(c f(n) g(n))} Ejercicios 1. Demuestre que 3n 2 +17n +22 Θ(n 2 ) 2. Demuestre que g Θ(f) si y sólo si existen c,d R + y n 0 N tal que para todo n n 0 : c f(n) g(n) d f(n) IIC1253 Análisis de Algoritmos 7 / 36

Ejercicios 1. Sea p(n) un polinomio de grado k 0 con coeficientes en los números enteros. Demuestre que p(n) O(n k ). 2. Cuáles de las siguientes afirmaciones son ciertas? n 2 O(n) Si f(n) O(n), entonces f(n) 2 O(n 2 ) Si f(n) O(n), entonces 2 f(n) O(2 n ) 3. Decimos que f g si f O(g). Es un orden parcial? Es un orden total? 4. Decimos que f g si f Θ(g). Demuestre que es una relación de equivalencia. Indique qué es [f] IIC1253 Análisis de Algoritmos 8 / 36

Ecuaciones de recurrencia Suponga que tiene una lista ordenada (de menor a mayor) L de números naturales L tiene n elementos, para referirnos al elemento i-ésimo (1 i n) usamos la notación L[i] Cómo podemos verificar si un número a está en L? IIC1253 Análisis de Algoritmos 9 / 36

Ecuaciones de recurrencia: Búsqueda binaria Para verificar si un número a está en L usamos el siguiente algoritmo: encontrar(a, L, i, j) if i > j then return no else if i = j then if L[i] = a then return i else return no else p = i+j 2 if L[p] < a then return encontrar(a, L, p +1, j) else if L[p] > a then return encontrar(a, L, i, p 1) else return p Llamada inicial al algoritmo: encontrar(a, L, 1, n) IIC1253 Análisis de Algoritmos 10 / 36

Ecuaciones de recurrencia: Búsqueda binaria Cuál es la complejidad del algoritmo? Qué operaciones vamos a considerar? Cuál es el peor caso? IIC1253 Análisis de Algoritmos 11 / 36

Ecuaciones de recurrencia: Búsqueda binaria Cuál es la complejidad del algoritmo? Qué operaciones vamos a considerar? Cuál es el peor caso? Si contamos sólo las comparaciones, entonces la siguiente expresión define la complejidad del algoritmo: { c n = 1 T(n) = T( n 2 )+d n > 1 donde c N y d N son constantes tales que c 1 y d 1. IIC1253 Análisis de Algoritmos 11 / 36

Ecuaciones de recurrencia: Búsqueda binaria Cuál es la complejidad del algoritmo? Qué operaciones vamos a considerar? Cuál es el peor caso? Si contamos sólo las comparaciones, entonces la siguiente expresión define la complejidad del algoritmo: { c n = 1 T(n) = T( n 2 )+d n > 1 donde c N y d N son constantes tales que c 1 y d 1. Esta es una ecuación de recurrencia. IIC1253 Análisis de Algoritmos 11 / 36

Ecuaciones de recurrencia: Búsqueda binaria Cómo podemos solucionar una ecuación de recurrencia? Técnica básica: sustitución de variables IIC1253 Análisis de Algoritmos 12 / 36

Ecuaciones de recurrencia: Búsqueda binaria Cómo podemos solucionar una ecuación de recurrencia? Técnica básica: sustitución de variables Para la ecuación anterior usamos la sustitución n = 2 k. Vamos a resolver la ecuación suponiendo que n es una potencia de 2 Vamos a estudiar condiciones bajo las cuales el resultado para una potencia de 2 puede ser extendido a todo n Estas condiciones van a servir para cualquier potencia IIC1253 Análisis de Algoritmos 12 / 36

Ecuaciones de recurrencia: sustitución de variables Si realizamos la sustitución n = 2 k en la ecuación: { c n = 1 T(n) = T( n 2 )+d n > 1 obtenemos: T(2 k ) = { c k = 0 T(2 k 1 )+d k > 0 IIC1253 Análisis de Algoritmos 13 / 36

Ecuaciones de recurrencia: sustitución de variables Extendiendo la expresión anterior obtenemos: T(2 k ) = T(2 k 1 )+d = (T(2 k 2 )+d)+d = T(2 k 2 )+2d = (T(2 k 3 )+d)+2d = T(2 k 3 )+3d = IIC1253 Análisis de Algoritmos 14 / 36

Ecuaciones de recurrencia: sustitución de variables Extendiendo la expresión anterior obtenemos: T(2 k ) = T(2 k 1 )+d = (T(2 k 2 )+d)+d = T(2 k 2 )+2d = (T(2 k 3 )+d)+2d = T(2 k 3 )+3d = Deducimos la expresión general para k i 0: T(2 k ) = T(2 k i )+i d IIC1253 Análisis de Algoritmos 14 / 36

Ecuaciones de recurrencia: sustitución de variables Considerando i = k obtenemos: T(2 k ) = T(1)+k d = c +k d IIC1253 Análisis de Algoritmos 15 / 36

Ecuaciones de recurrencia: sustitución de variables Considerando i = k obtenemos: T(2 k ) = T(1)+k d = c +k d Dado que k = log 2 n, obtenemos que T(n) = c +d log 2 n para n potencia de 2. Vamos a definir notación para decir esto de manera formal IIC1253 Análisis de Algoritmos 15 / 36

Notaciones asintóticas condicionales Sea P un predicado sobre los números naturales. Definición O(f P) = {g : N R + 0 ( c R+ )( n 0 N) ( n n 0 )(n P g(n) c f(n))} IIC1253 Análisis de Algoritmos 16 / 36

Notaciones asintóticas condicionales Sea P un predicado sobre los números naturales. Definición O(f P) = {g : N R + 0 ( c R+ )( n 0 N) ( n n 0 )(n P g(n) c f(n))} Las notaciones Ω(f P) y Θ(f P) son definidas de manera análoga. IIC1253 Análisis de Algoritmos 16 / 36

Búsqueda en una lista ordenada: complejidad del algoritmo Sea POTENCIA 2 = {2 i i N} Para la función T que define la complejidad del procedimiento encontrar, tenemos que: T Θ(log 2 n POTENCIA 2 ) Podemos concluir que T Θ(log 2 n)? Vamos a estudiar este problema, pero antes vamos a ver un segundo ejemplo. IIC1253 Análisis de Algoritmos 17 / 36

Ordenamiento de una lista Ahora queremos ordenar una lista L de números naturales Utilizamos el algoritmo mergesort Si contamos sólo las comparaciones entre elementos de L, entonces la siguiente expresión define la complejidad de mergesort: { 0 n = 1 T(n) = T( n 2 )+T( n 2 )+(n 1) n > 1 IIC1253 Análisis de Algoritmos 18 / 36

Orden de mergesort Nuevamente utilizamos la sustitución n = 2 k, obteniendo: { T(2 k 0 k = 0 ) = 2 T(2 k 1 )+(2 k 1) k > 0 Desarrollando esta expresión obtenemos: T(2 k ) = 2 T(2 k 1 )+(2 k 1) = 2 (2 T(2 k 2 )+(2 k 1 1))+(2 k 1) = 2 2 T(2 k 2 )+2 k 2+2 k 1 = 2 2 T(2 k 2 )+2 2 k (1+2) = 2 2 (2 T(2 k 3 )+(2 k 2 1))+2 2 k (1+2) = 2 3 T(2 k 3 )+2 k 2 2 +2 2 k (1+2) = 2 3 T(2 k 3 )+3 2 k (1+2+2 2 ) = IIC1253 Análisis de Algoritmos 19 / 36

Orden de mergesort Deducimos la expresión general para k i 0: i 1 T(2 k ) = 2 i T(2 k i )+i 2 k j=0 2 j = 2 i T(2 k i )+i 2 k 2 i +1 Considerando i = k obtenemos: T(2 k ) = 2 k T(1)+k 2 k 2 k +1 = k 2 k 2 k +1 Dado que k = log 2 n, concluimos que: T Θ(n log 2 n POTENCIA 2 ) IIC1253 Análisis de Algoritmos 20 / 36

Técnicas para solucionar ecuaciones de recurrencia Vamos a estudiar dos técnicas que nos permitan extender la solución a una ecuación de recurrencia encontrada usando sustitución de variables. Nos vamos a concentrar en la notación O Primera técnica: Utilizamos una sustitución de variable para encontrar una solución en un caso particular. Por ejemplo: T O(n log2 n POTENCIA 2 ) Usamos inducción para demostrar que la solución es válida en el caso general IIC1253 Análisis de Algoritmos 21 / 36

Construcción de soluciones usando inducción Consideremos la ecuación de recurrencia para el algoritmo de búsqueda en listas ordenadas: { c n = 1 T(n) = T( n 2 )+d n > 1 Sabemos que T O(log 2 n POTENCIA 2 ) Queremos demostrar entonces que: ( e R + )( n 0 N)( n n 0 )(T(n) e log 2 n) IIC1253 Análisis de Algoritmos 22 / 36

Construcción de soluciones usando inducción Veamos algunos valores de la función T para estimar e y n 0 : T(1) = c T(2) = c +d T(3) = c +d T(4) = c +2d En este caso necesitamos que n 0 2 y e (c +d) Por qué? Intentamos entonces con n 0 = 2 y e = (c +d) Por demostrar: ( n 2)(T(n) (c +d) log 2 n) IIC1253 Análisis de Algoritmos 23 / 36

Inducción fuerte Cuál es el principio de inducción adecuado para el problema anterior? Tenemos n 0 como punto de partida n 0 es un caso base, pero podemos tener otros Dado n > n 0 tal que n no es un caso base, suponemos que la propiedad se cumple para todo k {n 0,...,n 1} IIC1253 Análisis de Algoritmos 24 / 36

Inducción fuerte: Ejemplo Queremos demostrar que ( n 2)(T(n) (c +d) log 2 n) IIC1253 Análisis de Algoritmos 25 / 36

Inducción fuerte: Ejemplo Queremos demostrar que ( n 2)(T(n) (c +d) log 2 n) 2 es el punto de partida y el primer caso base IIC1253 Análisis de Algoritmos 25 / 36

Inducción fuerte: Ejemplo Queremos demostrar que ( n 2)(T(n) (c +d) log 2 n) 2 es el punto de partida y el primer caso base También 3 es un caso base ya que T(3) = T(1)+d y para T(1) no se cumple la propiedad IIC1253 Análisis de Algoritmos 25 / 36

Inducción fuerte: Ejemplo Queremos demostrar que ( n 2)(T(n) (c +d) log 2 n) 2 es el punto de partida y el primer caso base También 3 es un caso base ya que T(3) = T(1)+d y para T(1) no se cumple la propiedad Para n 4 tenemos que T(n) = T( n 2 )+d y n 2 2, por lo que resolvemos este caso de manera inductiva Suponemos que la propiedad se cumple para todo k {2,...,n 1} IIC1253 Análisis de Algoritmos 25 / 36

Inducción fuerte: Ejemplo Vamos a demostrar entonces que para { c n = 1 T(n) = T( n 2 )+d n > 1 se tiene que ( n 2)(T(n) (c +d) log 2 n) IIC1253 Análisis de Algoritmos 26 / 36

Inducción fuerte: Ejemplo Vamos a demostrar entonces que para { c n = 1 T(n) = T( n 2 )+d n > 1 se tiene que ( n 2)(T(n) (c +d) log 2 n) Casos base: T(2) = c +d = (c +d) log 2 2 T(3) = c +d < (c +d) log 2 3 IIC1253 Análisis de Algoritmos 26 / 36

Inducción fuerte: Ejemplo Vamos a demostrar entonces que para { c n = 1 T(n) = T( n 2 )+d n > 1 se tiene que ( n 2)(T(n) (c +d) log 2 n) Casos base: T(2) = c +d = (c +d) log 2 2 T(3) = c +d < (c +d) log 2 3 Caso inductivo: Suponemos que n 4 y para todo k {2,...,n 1}: T(k) (c +d) log 2 k IIC1253 Análisis de Algoritmos 26 / 36

Inducción fuerte: Ejemplo Tenemos que: T(n) = T( n 2 )+d (c +d) log 2 n 2 +d (c +d) log 2 n 2 +d = (c +d) log 2 n (c +d)+d = (c +d) log 2 n c < (c +d) log 2 n IIC1253 Análisis de Algoritmos 27 / 36

Una segunda técnica para solucionar ecuaciones de recurrencia Para definir esta segunda técnica necesitamos definir algunos términos. Una función f : N R + 0 es asintóticamente no decreciente si: ( n 0 N)( n n 0 )(f(n) f(n+1)) IIC1253 Análisis de Algoritmos 28 / 36

Una segunda técnica para solucionar ecuaciones de recurrencia Para definir esta segunda técnica necesitamos definir algunos términos. Una función f : N R + 0 es asintóticamente no decreciente si: ( n 0 N)( n n 0 )(f(n) f(n+1)) Ejemplo Las funciones log 2 n, n, n 5 y 2 n son asintóticamente no decrecientes IIC1253 Análisis de Algoritmos 28 / 36

Funciones b-armónicas Sea f : N R + 0 y b N tal que b > 0 f es una función b-armónica si f(b n) O(f(n)) IIC1253 Análisis de Algoritmos 29 / 36

Funciones b-armónicas Sea f : N R + 0 y b N tal que b > 0 f es una función b-armónica si f(b n) O(f(n)) Ejemplo Las funciones log 2 n, n y n 5 son b-armónicas para cualquier b (b > 0). La función 2 n no es 2-armónica. IIC1253 Análisis de Algoritmos 29 / 36

Una segunda técnica: extensión de soluciones Sean f,g : N R + 0, b N tal que b > 0, y POTENCIA b = {b i i N} IIC1253 Análisis de Algoritmos 30 / 36

Una segunda técnica: extensión de soluciones Sean f,g : N R + 0, b N tal que b > 0, y POTENCIA b = {b i i N} Teorema Si f,g son asintóticamente no decrecientes, g es b-armónica y f O(g POTENCIA b ), entonces f O(g). IIC1253 Análisis de Algoritmos 30 / 36

Una segunda técnica: demostración del teorema Como f es asintóticamente no decreciente: ( n 0 N)( n n 0 )(f(n) f(n+1)) Como g es asintóticamente no decreciente: ( n 1 N)( n n 1 )(g(n) g(n+1)) Como f O(g POTENCIA b ): ( c R + )( n 2 N)( n n 2 ) (n PONTENCIA b f(n) c g(n)) IIC1253 Análisis de Algoritmos 31 / 36

Una segunda técnica: demostración del teorema Como g es b-armónica: ( d R + )( n 3 N)( n n 3 )(g(b n) d g(n)) Sea n 4 = máx{1,n 0,n 1,n 2,n 3 } y n n 4 Como n 1, existe k 0 tal que: b k n < b k+1 Como n n 0 y f es asintóticamente no decreciente: f(n) f(b k+1 ) IIC1253 Análisis de Algoritmos 32 / 36

Una segunda técnica: demostración del teorema Como n n 2 y f O(g POTENCIA b ): f(b k+1 ) c g(b k+1 ) Dado que b k n, se tiene que b k+1 b n. Así, dado que n n 1 y g es asintóticamente no decreciente: g(b k+1 ) g(b n) Finalmente, dado que n n 3 y g es b-armónica: g(b n) d g(n) IIC1253 Análisis de Algoritmos 33 / 36

Una segunda técnica: demostración del teorema Combinando los resultados anteriores obtenemos: f(n) f(b k+1 ) c g(b k+1 ) c g(b n) c d g(n) Por lo tanto: ( n n 4 )(f(n) (c d) g(n)) Concluimos que f O(g). IIC1253 Análisis de Algoritmos 34 / 36

Una segunda técnica: el caso de mergesort La siguiente expresión define la complejidad de mergesort: { 0 n = 1 T(n) = T( n 2 )+T( n 2 )+(n 1) n > 1 Ya demostramos que T O(n log 2 n POTENCIA 2 ) Usando el último teorema, vamos a demostrar que T O(n log 2 n) IIC1253 Análisis de Algoritmos 35 / 36

Una segunda técnica: el caso de mergesort Ejercicio 1. Demuestre que T(n) y n log 2 n son asintóticamente no decrecientes Puede usar inducción fuerte para demostrar que T(n) es asintóticamente no decreciente 2. Demuestre que n log 2 n es 2-armónica 3. Use los ejercicios anteriores para concluir que T O(n log 2 n) IIC1253 Análisis de Algoritmos 36 / 36