Análisis asintótico de algoritmos

Anuncio
Algoritmos y problemas
Análisis asintótico de
algoritmos
!
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
Log
Lo
Exponentes
logb x
b
Repaso matemático
Logaritmos
Logaritmos
Loga
= x donde
x donde
> 0 x >logarítmica
blog x = x
0
Función
b
b =1
y x = y, by = x
Si logb xb = =Si
y,x log
b
donde
x=>x
bb =
> 0 xb > 0 = x donde x > 0
bx0donde
= xxdonde
b1 = b
Se define que log 1 = 0
logb x
0
b
a+c
logb x
logb x
logb x
y
y
Si
logb x = y, by = x
Si logb x = y,Sibylog
=bxxSi
=
y,
b
=
x
log
x
=
y,
b
=
x
b
Se define que logb 1 = 0
define
que logb 1 = 0
Se define que
1 Se
= que
0define
Selog
define
logbque
1 = log
0 Se
1=
0
bb
logb (x)
logblog
(x) ! (x)log
(x) log
b
Cambios
de
base:
=
. b (x) =
b (x) log
de. base:
Cambios deCambios
base: log
= delog
b. Cambios
de
base:
=log
Cambios
base:
log
(x)
=
.
!
b (x)
b !(x)
(x)
b
!
!)
logb (b )
logbb(blog
) log
b (b
b (b )
a c
=b b
!
bac = (ba )c
! 1 "a
−a
b = b =
b
!
!
!
Cambios de base: logb! (x) =Es inyectiva:! log. x = log y =⇒
Es inyectiva:Es
loginyectiva:
x =Eslog
y =⇒
x log
=
log
x=
logy xy =
=⇒
y )x = y
inyectiva:
logx y=
=⇒
log
Es inyectiva:
log
x=y
b (b
1
b x = logb y =⇒
b
ba
b
b
bb
b
b
b
> yy=⇒ logb x
Es creciente:Esx creciente:
> y =⇒
logxb >
x>
log
yEs
y =⇒
xcreciente:
>log
logbbxy >xlog
Es creciente:
x b>log
y b=⇒
b
Es creciente:
> y y=⇒
logbxx =
> log
by
Es inyectiva:
logb x = xlog
=⇒
y
b
Logaritmos
Logaritmos
Logaritmos
Logaritmos
Logaritmos
Logaritm
10
Propiedades
Ejemplos de bases
9
8
ón: logb (x · y)Multiplicación:
= logb x + log
y
b
log
(x
·
y)y==loglogxb+x log
+ 10log
bx(x
by
Multiplicación:
log
·
y)
y
Multiplicación:
log
(x
·
y)
=
log
+
log
b
b
b
7
b
b
! "
!! b"
9
Multiplicación:
logb (x · y)! ="log
"yb
b x + log
x
xx
!
"
6
x
8
División:
log
logb bxx−−loglog
gbDivisión:
=
log División:
xlog
− log=blog
yybbxb −yylogb==y log
División:
log
b yb y
y
log x b = logb xy − log
b
y
b
b
5
Potencia: logb x = c logb x cc
4 x
logb xx =
cclog
Potencia:
logb xc =
cPotencia:
logb x
c
bb x
Potencia:
log
=
log
b
ogb x = En
c log
x
logb y
logb x
b log y
3
el exponente:
x
=
y
logb x
y
logb x
b
En el exponente: x En
=
elyexponente:
xlog
logb b2y= y log
n
#
x
= y bx
logb y En#
logexponente:
x
nel
b
n
nente: x Factorial:
=log
y (n!) = logb i #
1
Factorial: logb (n!) = b logb i i=1
n
0log i
200
#
Factorial:
logb (n!) =
b
n
i=1
#
Factorial: logb (n!) = i=1 logb i
logb i
b=2
b=e
b = 10
7
c
ogb (n!) =
b=2
b=e
b = 10
6
5
4
3
400
2
600
800
1000
1
0
200
400
600
800
i=1
Análisis de algoritmos– p. 16
Análisis de algoritm
Análisis de algoritmos– p. 17
Análisis de algoritmos– p. 17
Análisis de algoritmos
! Intento
1000
i=1
Calidad de algoritmos
Análisis de algoritmos– p. 17
Análisis de algoritmos– p. 17
de caracterizar el algoritmo en
! Tiempo total
de computación
términos de la cantidad de computación y
! Número de operaciones realizadas por el algoritmo
memoria que se necesita para resolver unAnálisis de algoritmos– p. 17 ! Número de transiciones tomadas por la Máquina
Turing que ejecuta el algoritmo
problema
! Cantidad de memoria utilizada
! La moneda tiene dos caras: la dificultad del
! Número y tamaño de las variables
problema y la eficiencia del algoritmo en
! Posición extrema a la derecha que se llega a visitar
en la cinta de la Máquina Turing durante la ejecución
resolverlo
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
Entrada
!
!
!
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.
Salida
Para cada problema, hay varias instancias que son
los datos particulares de entrada del problema.
Dificultad de instancias
!
A
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
Complejidad de peor caso
!
!
Complejidad asintótica
Fijamos el tamaño de la instancia
!
!
!
Ejemplo: cantidad de bits
Denotamos el tamaño de instancia con n
Calculamos el número de operaciones y el
consumo de memoria para varios diferentes
Buscamos la instancia de ese tamaño que es la más
difícil
!
valores de n
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
!
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
2.3. CALIDAD DE ALGORITMOS
29
1e+07
f(x) = ex
Clases de magnitudes
1e+06
Ejemplos de
funciones
100000
10000
!
!
f(x) = 2x
f(x) = x3
1000
Buscamos agrupar
las posibles funciones de
complejidad según100su rapidez
f(x) = x2
f(x) = x log2(x)
f(x) = x
f(x) = log2(x)
2.3. CALIDAD DE ALGORITMOS
10
Necesitamos una notación
matemática para
1
expresar que una función dada se comporta en
0.1
1
2
3
4
5
6
el largo plazo de manera
parecida
a otra
1e+07
f(x)
1e+06
f(x)
f(x)
100000
7
8
9
10000
10
11
12
13
14
f(x)
f(x) = x log
15
1000
!
La palabra asintótica refiere al comportamiento
Figura
2.1: Crecimiento de algunas
con grandes
valores
f(x)
f(x) = log
100
funciones comúnmente encontrados en el análisis
de algoritmos. Nota que el ordenación según magnitud cambia al comienzo, pero para
valores suficientemente grandes ya no hay cambios.
10
1
0.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Figura 2.1: Crecimiento de algunas funciones comúnmente encontrados en
de algoritmos. Nota que el ordenación según magnitud cambia al comienzo,
Cuadro 2.1: En la tabla (originalmente de [10]) se muestra para diferentes valores de n el
tiempo de ejecución (en segundos (s), minutos (min), horas (h), dı́as (d) o años (a)) para un
algoritmo necesita exactamente f (n) operaciones básicas del procesador para encontrar
solución y el procesador es capaz de ejecutar un millón de instrucciones por segundo.
Si el tiempo de ejecución es mayor a 1025 años, lo marcamos simplemente como ≈ ∞,
mientras los menores a un segundo son ≈ 0. El redondeo con tiempos mayores a un
segundo están redondeados a un segundo entero mayor si menos de un minuto, al minuto
entero mayor si menores a una hora, la hora entera mayor si menores a un dı́a, y el año
entero mayor si medidos en años.
Ejemplos de tiempos
f (n) (→)
n (↓)
10
30
50
100
1000
10000
100000
1000000
n
n log2 n
n2
n3
1, 5n
2n
n!
≈0
≈0
≈0
≈0
≈0
≈0
≈0
1s
≈0
≈0
≈0
≈0
≈0
≈0
2s
20 s
≈0
≈0
≈0
≈0
1s
2 min
3h
12 d
≈0
≈0
≈0
1s
18 min
12 d
32 a
31710 a
≈0
≈0
11 min
12, 892 a
≈∞
≈∞
≈∞
≈∞
≈0
18 min
36 a
1017 años
≈∞
≈∞
≈∞
≈∞
4s
1025 a
≈∞
≈∞
≈∞
≈∞
≈∞
≈∞
Crecimiento asintótica
Crecimiento asintótica
Definiciones
Para funciones f : Z+ → R y g : Z+ → R, escribimos
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)| para
fsuficientemente
(n) ∈ O (g(n)) si grandes
∃c > 0 tal valores
que |f (n)|
de≤n c |g(n)| para
suficientemente grandes valores de n
f (n) ∈ Ω (g(n)) si ∃c > 0 tal que |f (x)| ≥ c |g(x)| para
f (n) ∈ Ω (g(n)) si ∃c > 0 tal que |f (x)| ≥ c |g(x)| para
suficientementegrandes
grandes
valores
suficientemente
valores
de de
n n
!
(n) ∈∈ΘΘ(g(n))
(g(n))sisi∃c,∃c,
0 tales
ff(n)
c! c> >
0 tales
queque
!
!
|g(x)|≤≤|f|f(x)|
(x)|≤≤c c· |g(x)|
· |g(x)|
para
suficientemente
cc ·· |g(x)|
para
suficientemente
grandesvalores
valoresdeden n
grandes
Algoritmos y problemas– p. 31
Algoritmos y problemas– p. 31
Propiedades
Propiedades
Interpretación
Interpretación
Interpretación
O (f (n)) es una cota superior asintótica al tiempo
de ejecución
O (f (n)) es una cota superior asintótica al tiempo
Ω (f (n))
es una cota inferior asintótica
de ejecución
Θ (f (n))
las cota
dos funciones
Ω (fdice
(n)) que
es una
inferior crecen
asintótica
asintóticamente iguales
Θ (f (n)) dice que las dos funciones crecen
asintóticamente iguales
El símbolo ∈ se reemplaza frecuentemente con =.
El símbolo ∈ se reemplaza frecuentemente con =.
Propiedades
Las definiciones de crecimiento asintótica se generalizan
Las definiciones
crecimientomúltiples
asintótica
se generalizan
para
funciones dede
argumentos
y son
transitivas:
Propiedades
para funciones de argumentos múltiples y son transitivas:
(f (n) ∈ O (g(n)) ∧ g(n) ∈ O (h(n))) ⇒ f (n) ∈ O (h(n)) .
Las ∈
definiciones
crecimiento
asintótica⇒sefgeneralizan
(f (n)
O (g(n))de
∧ g(n)
∈ O (h(n)))
(n) ∈ O (h(n)) .
para funciones de argumentos múltiples y son transitivas:
(f (n)(f ∈
∈OΩ(h(n)))
(h(n)))
(n)
∈ Ω (h(n))
(n)Ω∈(g(n))
O (g(n))∧∧g(n)
g(n) ∈
⇒⇒
f (n)f ∈
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, aplica
(f (n) aplica
∈ también
Ω (g(n))
∧ g(n)
∈Θ
Ω (h(n)))
(n) ∈los
Ω (h(n))
Como
este
para
Ω (f
(n))
y O⇒
(ff(n))
dos, aplica
por
definición
para
(f (n)).
por definición también para Θ (f (n)).
Como este aplica para Ω (f (n)) y O (f (n)) los dos, aplica
por definición también para Θ (f (n)).
Algoritmos y problemas– p. 33
Algoritmos y problemas– p. 33
Algoritmos y problemas– p. 33
Algoritmos y problemas– p. 32
Polinomios
Polinomios
Es fácil formar O (f (n)) de polinomios y muchas
otras
Polinomios
expresiones por observar que en una suma, el término
En una
sumatoria,
el término mayor domina:
mayor
domina
el crecimiento:
(f (n)
O (h(n))
∧ (n))
g(n) de
∈O
(h(n))) ⇒yfmuchas
(n)+g(n)otras
∈ O (h(n))
Es
fácil∈formar
O (f
polinomios
expresiones por observar que en una suma, el término
mayor domina el crecimiento:
g(n) ∈ O (f (n)) ⇒ f (n) + g(n) ∈ O (f (n))
(f (n) ∈ O (h(n)) ∧ g(n) ∈ O (h(n))) ⇒ f (n)+g(n) ∈ O (h(n))
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 (n) ∈ Θ (logb n) ,
logb (a)
porque logb (a) es un constante.
Entonces no hay necesidad de marcar la base en una
Primera
tarea
para
entregar
expresión de complejidad asintótica con logaritmos.
g(n) ∈ O (f (n)) ⇒ f (n) + g(n) ∈ O (f (n))
Algoritmos y problemas– p. 34
Algoritmos y problemas– p. 35
as funciones siguientes según su crecimiento
Practicamos
co O (fi (n)) de la menos rápida a la más rápida:
Algoritmos y problemas– p. 34
f1
f2
f3
f4
=
=
=
=
n
7
nn
n7
n log7 n
f5
f6
f7
f8
√
=
n
= log7 n
= 7log7 n
= 700n
Descargar