Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás...

35
Recurrencias Ejemplo Funciones según su crecimiento Jerarquía de funciones Algoritmos y Estructuras de Datos II Recurrencias Divide y Vencerás Jerarquía de Funciones 25 y 27 de marzo de 2019 Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Transcript of Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás...

Page 1: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Algoritmos y Estructuras de Datos II

Recurrencias Divide y VencerásJerarquía de Funciones

25 y 27 de marzo de 2019

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 2: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Contenidos

1 RecurrenciasAlgoritmos divide y vencerásRecurrencias divide y vencerásPotencias de bExtendiendo el resultado a todo n

2 Ejemplo

3 Funciones según su crecimiento

4 Jerarquía de funciones

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 3: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Algoritmos divide y vencerásRecurrencias divide y vencerásPotencias de bExtendiendo el resultado a todo n

Recurrencias

Surgen al analizar algoritmos recursivos, como laordenación por intercalación.El conteo de operaciones “copia” la recursión del algoritmoy se vuelve recursivo también.Ejemplo: máximo de comparaciones de la ordenación porintercalación.Es un ejemplo de algoritmo divide y vencerás.Es un ejemplo de recurrencia divide y vencerás:

t(n) ={

0 si n ∈ {0,1}t(dn/2e) + t(bn/2c) + n − 1 si n > 1

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 4: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Algoritmos divide y vencerásRecurrencias divide y vencerásPotencias de bExtendiendo el resultado a todo n

Algoritmo divide y vencerásCaracterísticas

hay una solución para los casos sencillos,para los complejos, se divide o descompone el problemaen subproblemas:

cada subproblema es de igual naturaleza que el original,el tamaño del subproblema es una fracción del original,se resuelven los subproblemas apelando al mismoalgoritmo,

se combinan esas soluciones para obtener una solucióndel original.

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 5: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Algoritmos divide y vencerásRecurrencias divide y vencerásPotencias de bExtendiendo el resultado a todo n

Algoritmo divide y vencerásForma general

fun DyV(x) ret yif x suficientemente pequeño o simple then y := ad_hoc(x)else descomponer x en x1, x2, . . . , xa

for i:= 1 to a do yi := DyV(xi ) odcombinar y1, y2, . . . , ya para obtener la solución y de x

fiend fun

Normalmente los xi son fracciones de x :

|xi | =|x |b

para algún b fijo mayor que 1.Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 6: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Algoritmos divide y vencerásRecurrencias divide y vencerásPotencias de bExtendiendo el resultado a todo n

Algoritmo divide y vencerásEjemplos

Ordenación por intercalación:“x simple” = fragmento de arreglo de longitud 0 ó 1“descomponer” = partir al medio (b = 2)a = 2“combinar” = intercalar

Ordenación rápida:“x simple” = fragmento de arreglo de longitud 0 ó 1“descomponer” = separar los menores de los mayores(b = 2)a = 2“combinar” = yuxtaponer

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 7: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Algoritmos divide y vencerásRecurrencias divide y vencerásPotencias de bExtendiendo el resultado a todo n

Forma general de DyV en python

def DyV(x):if simple(x):

y = ad_hoc(x)else:

xs = decompose(x)ys = [DyV(xi) for xi in xs]y = combine(ys)

return y

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 8: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Algoritmos divide y vencerásRecurrencias divide y vencerásPotencias de bExtendiendo el resultado a todo n

msort usando DyV en pythonCaso base y llamada principal

def simple(x):lft,rgt = x[1],x[2]return lft == rgt

def ad_hoc(x):return x

def msort(a):z = DyV((a,0,len(a)-1))return z[0]

h = msort([5,2,9,7])

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 9: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Algoritmos divide y vencerásRecurrencias divide y vencerásPotencias de bExtendiendo el resultado a todo n

msort usando DyV en pythonCaso recursivo

def decompose(x):c,lft,rgt= x[0],x[1],x[2]mid = (lft+rgt) // 2xs = [(c,lft,mid),(c,mid+1,rgt)]return xs

def combine(ys):c,lft,mid,rgt = ys[0][0],ys[0][1],ys[0][2],ys[1][2]merge(c,lft,mid,rgt)return c,lft,rgt

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 10: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Algoritmos divide y vencerásRecurrencias divide y vencerásPotencias de bExtendiendo el resultado a todo n

qsort usando DyV en pythonCaso base y llamada principal

def simple(x):lft,rgt = x[1],x[2]return lft >= rgt

def ad_hoc(x):return x

def qsort(a):z = DyV((a,0,len(a)-1))return z[0]

h = qsort([5,2,9,7])

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 11: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Algoritmos divide y vencerásRecurrencias divide y vencerásPotencias de bExtendiendo el resultado a todo n

qsort usando DyV en pythonCaso recursivo

def decompose(x):c,lft,rgt= x[0],x[1],x[2]ppiv = partition(c,lft,rgt)xs = [(c,lft,ppiv-1),(c,ppiv+1,rgt)]return xs

def combine(ys):c,lft,rgt = ys[0][0],ys[0][1],ys[1][2]return c,lft,rgt

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 12: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Algoritmos divide y vencerásRecurrencias divide y vencerásPotencias de bExtendiendo el resultado a todo n

Algoritmo divide y vencerásForma general

fun DyV(x) ret yif x suficientemente pequeño o simple then y := ad_hoc(x)else descomponer x en x1, x2, . . . , xa

for i:= 1 to a do yi := DyV(xi ) odcombinar y1, y2, . . . , ya para obtener la solución y de x

fiend fun

a: número de llamadas recursivas a DyV.b: relación entre el tamaño de x y el de xi , satisface|xi | = |x |

b .k: el orden de descomponer y combinar es nk .

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 13: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Algoritmos divide y vencerásRecurrencias divide y vencerásPotencias de bExtendiendo el resultado a todo n

Algoritmo divide y vencerásConteo

Si queremos contar el costo computacional (número deoperaciones) t(n) de la función DyV obtenemos:

t(n) ={

c si la entrada es pequeña o simplea ∗ t(n/b) + g(n) en caso contrario

si c es una constante que representa el costo computacionalde la función ad_hoc y g(n) es el costo computacional de losprocesos de descomposición y de combinación.Esta definición de t(n) es recursiva (como el algoritmo DyV ),se llama recurrencia. Existen distintos tipos de recurrencia.Ésta se llama recurrencia divide y vencerás.

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 14: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Algoritmos divide y vencerásRecurrencias divide y vencerásPotencias de bExtendiendo el resultado a todo n

Recurrencias divide y vencerás

Por la forma de la recurrencia

t(n) ={

c si la entrada es pequeña o simplea ∗ t(n/b) + g(n) en caso contrario

resulta más sencillo calcular t(n) cuando n es potencia de b.Se organiza la tarea en dos partes

calcular el orden de t(n) cuando n es potencia de b,extender el cálculo para los demás n.

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 15: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Algoritmos divide y vencerásRecurrencias divide y vencerásPotencias de bExtendiendo el resultado a todo n

Calculando para n potencia de b

Supongamos que

t(n) ={

c si la entrada es pequeña o simplea ∗ t(n/b) + g(n) en caso contrario

y g(n) es del orden de nk , es decir g(n) ≤ dnk para casitodo n ∈ N

n potencia de b, n = bm

t(n) = t(bm)= a ∗ t(bm/b) + g(bm)≤ a ∗ t(bm−1) + d(bm)k

≤ a ∗ t(bm−1) + d(bk )m

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 16: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Algoritmos divide y vencerásRecurrencias divide y vencerásPotencias de bExtendiendo el resultado a todo n

Iterando

t(bm) ≤ at(bm−1) + d(bk )m

≤ a(at(bm−2) + d(bk )m−1) + d(bk )m

≤ a2t(bm−2) + ad(bk )m−1 + d(bk )m

≤ a3t(bm−3) + a2d(bk )m−2 + ad(bk )m−1 + d(bk )m

≤ . . .

≤ amt(1) + am−1dbk + . . .+ ad(bk )m−1 + d(bk )m

= amc + d(bk )m((a/bk )m−1 + . . .+ a/bk + 1)= amc + d(bm)k (rm−1 + . . .+ r + 1)

donde r = a/bk y recordemos n = bm y entonces m = logb n

t(n) ≤ alogb nc + dnk (rm−1 + . . .+ r + 1)= nlogb ac + dnk (rm−1 + . . .+ r + 1)

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 17: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Algoritmos divide y vencerásRecurrencias divide y vencerásPotencias de bExtendiendo el resultado a todo n

Propiedad del logaritmo

En el último paso hemos usado que x logy z es igual a z logy x .En efecto, si aplicamos logy a ambos, obtenemos

logy (xlogy z) y logy (z

logy x), que luego de simplificar quedan(logy x)(logy z) y (logy z)(logy x) que son iguales.

Como logy es inyectiva, x logy z = z logy x vale.Volvamos a los cálculos.

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 18: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Algoritmos divide y vencerásRecurrencias divide y vencerásPotencias de bExtendiendo el resultado a todo n

Finalizando

t(n) ≤ nlogb ac + dnk (rm−1 + . . .+ r + 1)

donde r = a/bk

si r = 1, entonces a = bk y logb a = k y además

t(n) ≤ nkc + dnk logb nes del orden de nk log n para n potencia de b

si r 6= 1, entonces

t(n) ≤ nlogb ac + dnk (rm − 1r − 1

)

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 19: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Algoritmos divide y vencerásRecurrencias divide y vencerásPotencias de bExtendiendo el resultado a todo n

Finalizandocaso r > 1

si r > 1, como r = a/bk entonces a > bk y logb a > k yademás

t(n) ≤ nlogb ac + dnk ( rm−1r−1 )

≤ nlogb ac + dr−1nk rm

= nlogb ac + dr−1nk am

(bk )m

= nlogb ac + dr−1nk am

(bm)k

= nlogb ac + dr−1nk am

nk

= nlogb ac + dr−1am

= nlogb ac + dr−1alogb n

= nlogb ac + dr−1nlogb a

es del orden de nlogb a para n potencia de b

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 20: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Algoritmos divide y vencerásRecurrencias divide y vencerásPotencias de bExtendiendo el resultado a todo n

Finalizandocaso r < 1

si r < 1, como r = a/bk entonces a < bk y logb a < k .Además, r − 1 y rm − 1 son negativos, para evitarconfusión escribimos 1−rm

1−r en vez de rm−1r−1 .

t(n) ≤ nlogb ac + dnk (1−rm

1−r )

= nlogb ac + d1−r nk (1− rm)

≤ nlogb ac + d1−r nk

es del orden de nk para n potencia de b

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 21: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Algoritmos divide y vencerásRecurrencias divide y vencerásPotencias de bExtendiendo el resultado a todo n

Conclusión

Si

t(n) ={

c si la entrada es pequeña o simplea ∗ t(n/b) + g(n) en caso contrario

con g(n) del orden de nk ,demostramos

t(n) es del orden de

nlogb a si a > bk

nk log n si a = bk

nk si a < bk

para n potencia de b.

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 22: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Algoritmos divide y vencerásRecurrencias divide y vencerásPotencias de bExtendiendo el resultado a todo n

Extendiendo el resultado a todo n

Hemos calculado el orden de cualquier algoritmo divide yvencerás, para n potencia de b.Queremos calcular el orden para todo n.Se puede comprobar que si

t(n) es no decreciente, yt(n) es del orden de h(n) para potencias de b paracualquiera de las tres funciones h(n) que acabamos deconsiderar,

entonces t(n) es del orden de h(n) (para n arbitrario, nosolamente las potencias de b).es decir, el resultado puede extenderse para n arbitrario.

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 23: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Algoritmos divide y vencerásRecurrencias divide y vencerásPotencias de bExtendiendo el resultado a todo n

Recurrencias divide y vencerás

Si

t(n) ={

c si la entrada es pequeña o simplea ∗ t(n/b) + g(n) en caso contrario

si t(n) es no decreciente, y g(n) es del orden de nk ,entonces

t(n) es del orden de

nlogb a si a > bk

nk log n si a = bk

nk si a < bk

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 24: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Ejemplo: búsqueda binaria

{Pre: 1 ≤ lft ≤ n+1 ∧ 0 ≤ rgt ≤ n ∧ a ordenado}fun binary_search_rec (a: array[1..n] of T, x:T, lft, rgt : nat) ret i:nat

var mid: natif lft > rgt→ i = 0

lft ≤ rgt→ mid:= (lft+rgt) ÷ 2if x < a[mid]→ i:= binary_search_rec(a, x, lft, mid-1)

x = a[mid]→ i:= midx > a[mid]→ i:= binary_search_rec(a, x, mid+1,rgt)

fifi

end fun{Post: (i = 0⇒ x no está en a[lft,rgt]) ∧ (i 6= 0⇒ x = a[i])}

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 25: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Búsqueda binariaFunción principal

{Pre: n ≥ 0 }fun binary_search (a: array[1..n] of T, x:T) ret i:nat

i:= binary_search_rec(a, x, 1, n)end fun{Post: (i = 0⇒ x no está en a) ∧ (i 6= 0⇒ x = a[i])}

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 26: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Búsqueda binariaAnálisis

Sea t(n) = número de comparaciones que hace en el peorcaso cuando el arreglo tiene n celdas.

t(n) ={

0 si n = 0t(n/2) + 1 si n > 0

a = 1, b = 2 y k = 0.a = bk .t(n) es del orden de nk log n, es decir, del orden de log n.

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 27: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Búsqueda binaria usando DyV en pythonCaso base y llamada principal

def simple(x):e,c,lft,rgt = x[0],x[1],x[2],x[3]mid = (lft+rgt) // 2return lft > rgt or e == c[mid]

def ad_hoc(x):lft,rgt = x[2],x[3]found = (lft+rgt) // 2if lft > rgt:

found = -1return found

def bsearch(e,a):z = DyV((e,a,0,len(a)-1))return z

h = bsearch(5,[2,5,7,9])

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 28: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Búsqueda binaria usando DyV en pythonCaso recursivo

def decompose(x):e,c,lft,rgt= x[0],x[1],x[2],x[3]mid = (lft+rgt) // 2if e < c[mid]:

xs = [(e,c,lft,mid-1)]else:

xs = [(e,c,mid+1,rgt)]return xs

def combine(ys):return ys[0]

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 29: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Análisis de algunos algoritmos

Ordenación por selección es del orden de n2.Ordenación por inserción es del orden de n2 (peor caso ycaso medio).Ordenación por intercalación es del orden de n log2 n.Ordenación rápida es del orden de n log2 n (caso medio).Búsqueda lineal es del orden de n.Búsqueda binaria es del orden de log2 n.

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 30: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

¿Cómo comparar los órdenes de los algoritmos?

Hay funciones que crecen más rápido que otras (cuando ntiende a +∞).Escribiremos f (n) @ g(n) para decir que g(n) crece másrápido que f (n). Por ejemplo:

n log2 n @ n2.log2 n @ n.

Escribiremos f (n) ≈ g(n) para decir que f (n) y g(n) crecenal mismo ritmo. Por ejemplo:

n2

2 −n2 ≈ n2.

45n2 ≈ n2.

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 31: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Algunas condiciones

No nos interesan las constantes multiplicativas:14 n2 ≈ n2

4n3 ≈ n3

1000 log n ≈ log nπn ≈ n

No nos interesan los términos menos significativos, quecrecen más lento:

n2 + n ≈ n2

n3 + n2 log2 n ≈ n3

log n + 3456 ≈ log nn +√

n ≈ n

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 32: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

¿Cómo comparar funciones según su crecimiento?

Regla del límite. Sean f (n) y g(n) tales quelimn→+∞ f (n) = limn→+∞ g(n) =∞, ylimn→+∞

f (n)g(n) existe.

Entoncessi limn→+∞

f (n)g(n) = 0, entonces f (n) @ g(n).

si limn→+∞f (n)g(n) = +∞, entonces g(n) @ f (n).

caso contrario (el límite es un número real positivo),f (n) ≈ g(n).

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 33: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Jerarquía

1 @ log2 n ≈ log3 n @ n0.001 @ n1.5 @ n2 @

@ n5 @ n100 @ 1.01n @ 2n @ 100n @

@ 10000n @ n! @ nn

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 34: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Propiedades

Constantes multiplicativas no afectan.Términos de crecimiento despreciable no afectan.Sean a,b > 1, loga n ≈ logb n.Sea f (n) > 0 para “casi todo n ∈ N”. Entonces:

g(n) @ h(n)⇐⇒ f (n)g(n) @ f (n)h(n).g(n) ≈ h(n)⇐⇒ f (n)g(n) ≈ f (n)h(n).

Sea limn→∞ h(n) =∞. Entonces:f (n) @ g(n) =⇒ f (h(n)) @ g(h(n)).f (n) ≈ g(n) =⇒ f (h(n)) ≈ g(h(n)).

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II

Page 35: Algoritmos y Estructuras de Datos II Algoritmos divide y vencerás Recurrencias divide y vencerás Potencias de b Extendiendo el resultado a todo n Algoritmo divide y vencerás Características

RecurrenciasEjemplo

Funciones según su crecimientoJerarquía de funciones

Jerarquía

1 @ log(log(log n)) @ log(log n) @ log n @ n0.001 @

@ n @ n log n @ n1.001 @ n100 @ 1.01n @

@ n100 ∗ 1.01n @ 1.02n @ 100n @ 10000n @

@ (n − 1)! @ n! @ (n + 1)! @ nn

Recurrencias Divide y Vencerás Jerarquía de Funciones Algoritmos y Estructuras de Datos II