Академический Документы
Профессиональный Документы
Культура Документы
Rhadamés Carmona
__________________________________________________________________________________________________________
Complejidad en memoria
Cm(T) = costo asociado el costo en espacio para una variable u objeto de tipo
T. Los tipos de datos no ocupan espacio, sino las variables u objetos de un
tipo. Las unidades para medir la complejidad en memoria son palabras. A
continuación veremos los siguientes costos:
entonces Cm(AB)=(Ls1-Li1+1)*(Ls2-Li2+1)*Cm(Tbase)+6
n
entonces Cm(Reg) = ∑ Cm( Ti)
i =1
Algoritmos y Estructuras de Datos, Universidad Central de Venezuela, Escuela de Computación. Prof. Rhadamés Carmona
__________________________________________________________________________________________________________
Complejidad en tiempo
Definición 1:
Sean f y g dos funciones, f,g: Ν→ℜ+-{0}. Se dice que f=Ο(g) (f es de orden g) si
y solo si existe c∈ℜ+ y n0∈Ν tal que ∀n>n0 se cumpla f(n)≤c.g(n). (Ν no
incluye el 0).
Ejemplo:
f(n)=log2(n+1). Tomemos g(n)=log2(n). Aunque f(0) está definida, podemos
restringir su dominio a f(n) con n>0. Así, que f,g:Ν→ℜ+-{0}, y además ∃c∈ℜ+
(c=2) y n0∈Ν (n0=2) tal que ∀n>n0 se cumpla f(n)≤c.g(n). Así,
log2(n+1)=Οlog2(n)
Ejemplo:
Demostrar np≠Ο(np+1). Por reducción al absurdo, tomemos np=Ο(np+1).
Entonces ∃c∈ℜ+ y n0∈Ν tal que ∀n>n0 se cumpla np≤c.np+1⇒ c≥n
(contradicción, c debe ser constante).
Es reflexiva: f=Ο(f)
Es transitiva: f=Ο(g) ∧ g=Ο(h) ⇒ f=Ο(h).
Pruebas:
(Prop.1) c∈ℜ+, y f: Ν→ℜ+-{0} ⇒ ∀n>0: c.f(n) ≤ c.f(n) ⇒ c.f=Ο(f)
(Prop. 2) c.f. ≤ 1.c.f. Por tanto, c.f = O(c.f). Igualmente, c.f ≤ c.f,
por tanto c.f = O(f). Así, O(c.f) es equivalente a O(f).
Por Def. 1
∃c,d∈ℜ+ y n1,n2∈Ν tal que ∀n>n1: f1≤c.g1 y ∀n>n2: f2≤d.g2 ⇒
∃k∈ℜ+ (k=d.c) y n0∈Ν (n0=Max{n1,n2}) tal que ∀n>n0 se cumpla:
f1(n).f2(n) ≤ (d.c).(g1(n)+g2(n)) ⇒ f1.f2=Ο(g1.g2)
1 < log2n <n < n.log2n <n2 <p3(n) < ... pk(n) < … < 2n < en < 3n <... < nn < ...
Para un tamaño dado (n), la complejidad del algoritmo en el peor caso resulta
de tomar el máximo tiempo (complejidad máxima) en que se ejecuta el
algoritmo, entre todas las instancias del problema (que resuelve el algoritmo)
de tamaño n; la complejidad en el caso promedio es la esperanza matemática
del tiempo de ejecución del algoritmo para entradas de tamaño n, y la
complejidad mejor caso es el menor tiempo en que se ejecuta el algoritmo
para entradas de tamaño n. Por defecto se toma la complejidad del peor caso
como medida de complejidad T(n) del algoritmo.
Regla de la suma
Esta regla se deriva de la prop. 3. y la prop. 5. Sean T1(n) y T2(n) las funciones
de complejidad para ejecutar dos instrucciones P1 y P2 respectivamente (dos
instrucciones de un programa), con T1(n)=Ο(f(n)) y T2(n)=Ο(g(n)). La
complejidad en tiempo de la secuencia P1;P2 es T1(n)+T2(n)=Ο
(Max{f(n),g(n)}). Nótese que T1,T2:Ν→ℜ+-{0}, porque el tamaño de los
problemas es entero positivo, y el tiempo Ti(n) siempre es real positivo.
T1(n)≤c1.f(n) y T2(n)≤c2.f(n)
T1(n)≤c1.g(n) y T2(n)≤c2.g(n)
Sean c,d constantes tan que c,d∈ℜ+-{0}. De las reglas del producto, suma y
las proposiciones, se deriva:
Ejemplos:
b ← 100
a ← a+1
a ← (b div 5) mod 7 - 3
∑ Ti( n ) = Ο (Max{ f ( n ), f
1 2 ( n ),..., fk ( n )})
i =1
Ejemplo:
Las tres instrucciones {b ← 100; a ← a+1; a ← (b div 5) mod 7 - 3} son de
complejidad T1(n)=c1, T2(n)=c2, T3(n)=c3 respectivamente con c1≤c2≤c3
(porque las asignación de una constante puede ser más rápido que la de una
suma, y esta a la vez, menos costosa que residuos y divisiones). Así, la función
de complejidad de las tres instrucciones en conjunto es
T(n)=T1(n)+T2(n)+T3(n)= c1+c2+c3 = O(1).
Nótese que no es relevante cual instrucción se tarda más y cual menos, porque
al final T(n) es una constante y por ende de orden Ο(1). Por esto, la
complejidad de cada instrucción simple la tomaremos como la misma constante
"c" para simplificar las cuentas.
If <Condición> then
<Instrucciones>
EndIf
Donde:
<Cond1> tiene como tiempo T1(n)=O(f1(n))
<Inst1> tiene como tiempo T2(n)=Ο( f2(n))
<Cond2> tiene como tiempo T3(n)=O(f3(n))
<Inst2> tiene como tiempo T4(n)=Ο( f4(n))
FinMientras
k k −1
T (n) = ∑ Tcond i (n) + ∑ Ti (n)
i =1 i =1
Repeat
<Instrucciones 1> // se ejecuta k veces
Until <Condición> // se evalúa la misma cantidad de veces (k)
En este caso:
k
T ( n) = ∑ Tcond i (n) +Ti (n)
i =1
El for es equivalente a:
final
T (n) = c + ( final − inicio + 2) * c + ∑ Ti (n) + ( final − inicio + 1) * c
i =inicio
Algoritmos y Estructuras de Datos, Universidad Central de Venezuela, Escuela de Computación. Prof. Rhadamés Carmona
__________________________________________________________________________________________________________
final
T (n) = 2 * ( final − inicio + 2) * c + ∑ Ti (n)
i =inicio
2 4 5 6
mezcla
2 5 4 6
mezcla mezcla
5 2 4 6
Niveles de recursión del algoritmo de MergeSort
El las hojas del árbol de ejecución, las listas sin de tamaño uno (n=1), y la
complejidad en este caso es la complejidad de la instrucción de retorno la cual
es un constante que llamaremos c1.
T(1) = c1
T(n) = 2.T(n/2) + c3*n/2+ c3*n/2+c4.n, si n>1.
T(1) = c1
T(n) = 2.T(n/2) + c2.n, si n>1.
T(1) =1
T(2) = 2.T(1)+2.c2 = 2.c1+2.c2 = 2.c1+2.Log2(2).c2
T(4) = 2.T(2)+2.c2 = 2.(2.c1+2.Log2(2).c2)+2.c2 = 4.c1+4.Log2(4).c2
T(8) = 2.T(4)+2.c2 = 2.(4.c1+4.Log2(4).c2)+2.c2 = 8.c1+8.Log2(8).c2
...
T(n) = 2.T(n/2)+2.c2 = n.c1+n.Log2(n).c2
Hipótesis: T(n)=n.c1+n.Log2(n).c2
Tesis: T(2.n)=2.n.c1+n.Log2(2.n).c2
T(1) =1
T(b) = a.T(1)+f(b) = a+1.f(b)
T(b2) = a.T(b)+f(b2) = a.(a+1.f(b))+f(b2) = a2+a.f(b)+1.f(b2)
T(b3) = a.T(b2)+f(b3) = a.(a2+a.f(b)+1.f(b2)) = a3+a2.f(b)+a.f(b2)+f(b3)
...
k −1 k −1 k
b
T(bk) = a.T(bk-1)+f(bk) = a k + ∑ a i . f ( b k −i ) = a k + ∑ a i . f ( i )
i= 0 i= 0 b
∑ a .f (
n
T( n) = alogb + i n
bi
)
i= 0
logn
n a b n a n a a
Sabiendo que por propiedades alogb = blogb = blogb .logb = ( blogb )logb = nlogb , tenemos
finalmente que:
lognb −1
T ( n) = n logba
+ ∑ a .f ( i n
bi
)
i= 0
k −1
r k −1
Además, como ∑ ri =
i =0 r −1
, nos queda que:
( f (ab) )k − 1
ak − f ( b ) k logba nlogb − n b
a logf ( b )
T ( n) = a + f ( b)
k k
= a + =
k
n +
( f (ab) ) − 1 ( f (ab) ) − 1 ( f (ab) ) − 1
Algoritmos y Estructuras de Datos, Universidad Central de Venezuela, Escuela de Computación. Prof. Rhadamés Carmona
__________________________________________________________________________________________________________
Caso a: a<f(b). Si a<f(b), entonces a/f(b)-1= -c, c>0, y para valores grandes de
n tenemos que:
a logbf( b ) logbf( b ) a f ( b)
nlogb − n n − nlogb logb a logf ( n )
logbf( n ) logf ( n ) logf ( n )
logbf( n )
= ≤ ⇒ T( n) ≤ nlogb + ≤n + ≤ (1 + c1 ) = Ο ( n
n b n b n b
)
−c c c c c c
T(1) = 1
T(n) = a.T(n/b)+n, si n>1
O (n) si a < b
T (n) = O (n log b n) si a = b
O(n logba ) si a > b
T(1) = 1
Algoritmos y Estructuras de Datos, Universidad Central de Venezuela, Escuela de Computación. Prof. Rhadamés Carmona
__________________________________________________________________________________________________________
Lo cual resulta
O(1) si a < 1
T (n) = O (log b n) si a = 1
O(n logba ) si a > 1
Demostración:
T(1) = 1
T(b) = a.T(1)+1 = a+1
T(b2) = a.T(b)+1 = a(a+1)+1 = a2+a+1
T(b3) = a.T(b2)+1 = a(a2+a+1)+1 = a3+a2+a+1
…
k
T(bk) = a.T(bk-1)+1 = ∑a
i =0
i
k logbn
k
T(b ) = ∑a
i =0
i
T(n)= ∑a
i =0
i
log bn
a=1: en este caso T(n)= ∑1 T(n)= log
i =0
i n
b
logbn
a>1: T(n)= ∑a
i =0
i
. Esto es la serie geométrica con razón a, lo cual tiene como
resultado:
a.a logb − 1
n
logbn
a<1: T(n)= ∑ a . De manera similar al caso anterior, esto es
i
. Es claro
i =0 a −1
a.a logb − 1
n
log bn
que si a<1, entonces a <1 también. Por lo tanto < 2 = O(1).
a −1
En casos menos comunes, el costo de combinar las soluciones puede ser nk,
con k un entero mayor a 0. En este caso se puede plantear
Algoritmos y Estructuras de Datos, Universidad Central de Venezuela, Escuela de Computación. Prof. Rhadamés Carmona
__________________________________________________________________________________________________________
T(1) = 1
T(n) = a.T(n/b)+nk, si n>1
Lo cual resulta
O (n k ) si a < b k
T (n) = O (n k log b n) si a = b k
O(n logba ) si a > b k
Ejemplo 1:
T(n) = 1 si n≤n0
T(n) = a*f(n-c)+1 si n>n0
Demuestre que
O(1) si a < 1
T (n) = O(n) si a = 1
O(a n / c ) si a > 1
Ejemplo 2:
T(n) = 1 si n≤n0
T(n) = a*f(n-c)+n si n>n0
Demuestre que
O ( n) si a < 1
T (n) = O(n 2 ) si a = 1
O(a n / c ) si a > 1
Ejercicios:
- Hallar el orden de complejidad en tiempo de la función potencia xy, con
el algoritmo divide y conquista. Demuestre que es O(Log2n)
- Hallar la complejidad en tiempo de búsqueda binaria. Demuestre que es
O(log2n)
- Hallar la complejidad en tiempo de Quick Sort y Selección Directa.
Demuestre que en peor de los casos QuickSort es O(n2), aunque en el
caso promedio es O(nlog2n). Demuestre que Selección Directa es O(n2).
- Demuestre que Fibonacci en su implementación recursiva es de orden
exponencial, mediante la siguiente recurrencia en el cálculo del tiempo
Algoritmos y Estructuras de Datos, Universidad Central de Venezuela, Escuela de Computación. Prof. Rhadamés Carmona
__________________________________________________________________________________________________________
T(n) = 1, si n<2