Complejidad y Tamaño de la entrada

Anuncio
Complejidad
Complejidad y Tamaño de la entrada
Laboratorio de Algoritmos y Estructuras de Datos III
Departamento de Computación
Facultad de Ciencias Exactas y Naturales
Universidad de Buenos Aires
1er cuatrimestre de 2013
Laboratorio de Algoritmos y Estructuras de Datos III
Complejidad y Tamaño de la entrada
Complejidad
Modelos
Tamaño de Entrada
Repaso de Definiciones
Ejemplos
Análisis de algoritmos
Complejidad algorı́tmica
Dado un algoritmo A queremos saber que tan bueno es, o poder
compararlo con otros algoritmos
Criterios:
Fácil de entender/implementar
Uso de memoria (Complejidad espacial)
Velocidad (Complejidad temporal)
otros
Laboratorio de Algoritmos y Estructuras de Datos III
Complejidad y Tamaño de la entrada
Complejidad
Modelos
Tamaño de Entrada
Repaso de Definiciones
Ejemplos
Análisis de algoritmos
Complejidad temporal (velocidad):
Calculamos cuánto tarda en ejecutarse cada instrucción del
algoritmo y sumamos todo
¿Cuánto tarda cada instrucción?
Para responder eso necesitamos usar modelos
Modelos
Un modelo define matemáticamente cómo se comporta la
computadora.
Laboratorio de Algoritmos y Estructuras de Datos III
Complejidad y Tamaño de la entrada
Complejidad
Modelos
Tamaño de Entrada
Repaso de Definiciones
Ejemplos
Modelos
Vamos a usar dos modelos:
Modelo Uniforme
Modelo Logarı́tmico
Caracterı́sticas de los modelos:
No hay lı́mite de memoria.
Memoria dividida en celdas identificables.
Operaciones básicas: (+, [·], if , etc)
Instrucciones se ejecutan en orden
El programa no se escribe a sı́ mismo.
Laboratorio de Algoritmos y Estructuras de Datos III
Complejidad y Tamaño de la entrada
Complejidad
Modelos
Tamaño de Entrada
Repaso de Definiciones
Ejemplos
Modelos
Modelo Uniforme
Datos básicos entran en una celda de memoria (número,
puntero, etc.)
Operaciones básicas sobre una celda de memoria cuestan O(1)
Modelo Logarı́tmico
Datos básicos ocupan cantidad de celdas proporcional al
tamaño del dato.
Las operaciones sobre tipos básicos no cuestan
(necesariamente) O(1)
Laboratorio de Algoritmos y Estructuras de Datos III
Complejidad y Tamaño de la entrada
Complejidad
Modelos
Tamaño de Entrada
Repaso de Definiciones
Ejemplos
Modelos
Operación
a+b
a∗b
v[i]
inc(i)
for i = 1..n
Costos de algunas operaciones
Uniforme Logarı́tmico
1
log2 (a) + log2 (b)
1
log2 (a) ∗ log2 (b)
1
log2 (i)
1
log2 (i)
Pn
n
i=1 log2 (i) ∈ θ(n · log (n))
Laboratorio de Algoritmos y Estructuras de Datos III
Complejidad y Tamaño de la entrada
Complejidad
Modelos
Tamaño de Entrada
Repaso de Definiciones
Ejemplos
Modelos
¿Cuál modelo es mejor?
La pregunta es: ¿Cuál es más útil?
Si vamos a ordenar nombres, probablemente el uniforme
porque los nombres tienen un largo acotado, y la cantidad de
nombres está acotado por la cantidad de personas. Datos que
podrı́an entrar en los tipos de datos primitivos (por ej. enteros
de 64 bits).
Si vamos a factorizar un número como parte de un sistema
relacionado con criptografı́a, probablemente el logarı́tmico,
porque el número va a tener cientos o miles de bits.
Laboratorio de Algoritmos y Estructuras de Datos III
Complejidad y Tamaño de la entrada
Complejidad
Modelos
Tamaño de Entrada
Repaso de Definiciones
Ejemplos
Modelos
¿Alguno de los dos modelos es del todo realista?
¿Existen modelos que lo sean? Hay toda una rama de la ciencia de
la computación que se dedica a estudiar esto. En principio igual un
modelo nunca va a ser del todo realista, porque es una
simplificación de la realidad...
Algunos modelos más modernos:
Modelo Trans Dicotómico.
Maquinas Word Ram (wRAM, quizás el más usado en el área
hoy en dı́a).
Laboratorio de Algoritmos y Estructuras de Datos III
Complejidad y Tamaño de la entrada
Complejidad
Modelos
Tamaño de Entrada
Repaso de Definiciones
Ejemplos
Modelos
Modelo Trans Dichotómico
Operaciones básicas sobre parámetros de tamaños menores al
log del tamaño de la entrada cuestan O(1)
Si los parámetros tiene tamaños mayores, se utiliza el modelo
logarı́tmico para analizarlos, es decir las operaciones cuestan
siempre en función al tamaño de los argumentos.
Laboratorio de Algoritmos y Estructuras de Datos III
Complejidad y Tamaño de la entrada
Complejidad
Modelos
Tamaño de Entrada
Repaso de Definiciones
Ejemplos
Tamaño de Entrada
Definición Tamaño de entrada
Dada una instancia I, el tamaño de la entrada es la cantidad de bits
necesaria para representar la instancia I en un formato razonable.
Razonable:
Subjetivo
Representar un número en base 1 no es razonable. (ejemplo: 6
es IIIIII)
Representar un número en base b > 1 es razonable.
Información innecesaria no es razonable.
Importante
El tamaño de la entrada NO depende del modelo.
Laboratorio de Algoritmos y Estructuras de Datos III
Complejidad y Tamaño de la entrada
Complejidad
Modelos
Tamaño de Entrada
Repaso de Definiciones
Ejemplos
Tamaño de Entrada
ContarBits
Problema: Contar cuántos bits valen 1 en la representación binaria
de un número natural.
Algorithm 1.1: ContarBits(n)
res ← 0
while n > 0
res ← res + n mod 2
do
n ← bn/2c
return (res)
¿Complejidad temporal en el modelo uniforme ?
Laboratorio de Algoritmos y Estructuras de Datos III
Complejidad y Tamaño de la entrada
Complejidad
Modelos
Tamaño de Entrada
Repaso de Definiciones
Ejemplos
Tamaño de Entrada
ContarUnos
Problema: Dado un vector de bits, contar cuántos valen 1.
Algorithm 1.2: ContarUnos(vector < bit > v )
res ← 0
n ← v .size()
for i ← 1 to n
do res ← res + v[i]
return (res)
¿Complejidad temporal en el modelo uniforme ?
Laboratorio de Algoritmos y Estructuras de Datos III
Complejidad y Tamaño de la entrada
Complejidad
Modelos
Tamaño de Entrada
Repaso de Definiciones
Ejemplos
Tamaño de Entrada
Complejidad temporal (en el modelo uniforme):
ContarBits(n): O(log(n)).
ContarUnos(n): O(n).
Pero hacen esencialmente lo mismo...
Tamaño de entrada:
ContarBits(n): log2 (n)
ContarUnos(n): n
Complejidad en función del tamaño de entrada
Son algoritmos lineales en función del tamaño de entrada (en
modelo uniforme). Ambos tienen complejidad O(t) siendo t el
tamaño de entrada.
Laboratorio de Algoritmos y Estructuras de Datos III
Complejidad y Tamaño de la entrada
Complejidad
Modelos
Tamaño de Entrada
Repaso de Definiciones
Ejemplos
Tamaño de Entrada
Dada una instancia I llamamos:
T (I ) el costo temporal del algoritmo para la instancia I
S(I ) al tamaño de entrada de la instancia I
Asumimos el modelo uniforme, aunque el mismo razonamiento
aplica para el modelo logarı́tmico.
Laboratorio de Algoritmos y Estructuras de Datos III
Complejidad y Tamaño de la entrada
Complejidad
Modelos
Tamaño de Entrada
Repaso de Definiciones
Ejemplos
Algunas Definiciones (Repaso)
Repasemos algunas definiciones...
f (n) = O(g (n)) ⇔ ∃c ∈ R + , n0 ∈ N tal que
∀n ≥ n0 , |f (n)| ≤ c · g (n)
(f (n) está acotada superiormente por g (n))
f (n) = Ω(g (n)) ⇔ ∃c ∈ R + , n0 ∈ N tal que
∀n ≥ n0 , |f (n)| ≥ c · g (n)
(g (n) es cota inferior de f (n))
f (n) = θ(g (n)) ⇔ ∃c1 , c2 ∈ R + , n0 ∈ N tal que
∀n ≥ n0 , c1 · g (n) ≤ |f (n)| ≤ c2 · g (n)
(f (n) está acotado inferior y superiormente por g (n))
Laboratorio de Algoritmos y Estructuras de Datos III
Complejidad y Tamaño de la entrada
Complejidad
Modelos
Tamaño de Entrada
Repaso de Definiciones
Ejemplos
Ejemplos
ContarBits(n)
1
T (I ) ∈ O(log (n))
2
S(I ) ∈ Ω(log (n))
3
De 1, T (I ) ≤ k · log (n)
4
De 2, k 0 · log (n) ≤ S(I ), o bien, log (n) ≤
5
De 3 y 4, T (I ) ≤ k · log (n) ≤
6
De 5, T (I ) ∈ O(S(I ))
k
k0
· S(I ) =
1
k0
k 00
· S(I )
· S(I )
Dada una cota inferior de S y una cota superior de T, obtenemos
una cota superior de T, en función de S.
Laboratorio de Algoritmos y Estructuras de Datos III
Complejidad y Tamaño de la entrada
Complejidad
Modelos
Tamaño de Entrada
Repaso de Definiciones
Ejemplos
Ejemplos
ContarUnos(n)
1
T (I ) ∈ O(n)
2
S(I ) ∈ Ω(n)
3
De 1, T (I ) ≤ k · n
4
De 2, k 0 · n ≤ S(I ), o bien, n ≤
5
De 3 y 4, T (I ) ≤ k · n ≤
6
De 5, T (I ) ∈ O(S(I ))
k
k0
1
k0
· S(I )
· S(I ) = k 00 · S(I )
Ambos algoritmos tienen complejidad O(S(I )), es decir, lineal en
función del tamaño de entrada. (en el modelo uniforme).
Laboratorio de Algoritmos y Estructuras de Datos III
Complejidad y Tamaño de la entrada
Complejidad
Modelos
Tamaño de Entrada
Repaso de Definiciones
Ejemplos
Ejemplos
Problema: Calcular el menor elemento de una matriz en N a×b
Entrada: Dos números a y b, seguido de a lı́neas con b números
cada una representando la matriz M.
Salida: El menor elemento de la matriz.
Algorithm 1.3: MenorMatriz(M)
a ← Filas(M)
b ← Columnas(M)
res ← ∞
for i ←
1 to a
for j ←
1 to b
do
do res ← min(res,Mi,j )
return (res)
Laboratorio de Algoritmos y Estructuras de Datos III
Complejidad y Tamaño de la entrada
Complejidad
Modelos
Tamaño de Entrada
Repaso de Definiciones
Ejemplos
Ejemplos
Complejidad Temporal:
1
T ∈ O(a · b) (modelo uniforme)
2
Tamaño de entrada: S = S(a) + S(b) +
3
S(a) ≥ 1.S(b) ≥ 1.S(Mi,j ) ≥ 1.
4
Acotamos S por abajo: S ∈ Ω(a · b)
5
Separamos las variables: S ∈ Ω(a) y S ∈ Ω(b)
6
S ≥ k1 · a y S ≥ k2 · b
7
T ≤ k3 · a · b ≤ k3 · ( k11 · S) · ( k12 · S) = k3 · S 2
8
T ∈ O(S 2 )
Laboratorio de Algoritmos y Estructuras de Datos III
Pa
i=1
Pb
j=1 S(Mi,j )
Complejidad y Tamaño de la entrada
Complejidad
Modelos
Tamaño de Entrada
Repaso de Definiciones
Ejemplos
Ejemplos
¿No es extraño que recorrer el input una vez tome un tiempo
mayor a lineal?
1
T ∈ O(a · b) (modelo uniforme)
2
S ∈ Ω(a · b)
3
S ≥ k1 · a · b
4
T ≤ k2 · a · b ≤ k2 · ( k11 · S) = k3 · S
5
T ∈ O(S)
Laboratorio de Algoritmos y Estructuras de Datos III
Complejidad y Tamaño de la entrada
Descargar