Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Universidad de Valladolid
Campus de Segovia
______________________
TEMA 5:
COMPLEJIDAD
ALGORTMICA
COMPLEJIDAD ALGORTMICA
Conceptos bsicos.
Medidas de comportamiento asinttico.
Reglas prcticas para hallar el coste
tiles matemticos
Complejidad de algoritmos de bsqueda y ordenacin
DEFINICIN DE ALGORITMO
Entonces:
n
T med (n ) = j =1
T ( j)P donde P = 1 n
n
T med (n ) = ( jk
j =1
1 + k 2 )1
n
=
n
k1 n
k 2 k1 (n + 1 )n
= j =1 n
j +
j =1 n
=
n 2
+ k 2
T (n ) =
k 1 (n + 1 )+ k =
k1n
+
k1
+ k = c1n + c
med 2 2 2
2 2 2
LO IMPORTANTE ES EL COMPORTAMIENTO
ASINTTICO
n
T(n) log n n n log n n2 n3 2n n!
10 3.3 10-6 10-5 3.3 10-5 10-4 0.001 0.001 3.63
50 5.6 10-6 5 10-5 2.8 10-4 0.0025 0.125 intratable intratable
100 6.6 10-6 10-4 6.6 10-4 0.01 1 intratable intratable
103 10-5 0.001 0.01 1 1000 intratable intratable
104 1.3 10-5 0.01 0.13 100 106 intratable intratable
105 1.6 10-5 0.1 1.6 104 intratable intratable intratable
106 2 10-5 1 19.9 106 intratable intratable intratable
MEDIDAS DEL COMPORTAMIENTO
ASINTTICO
EJEMPLO
60
50 en 2n2
40 8n
Pasos
30
20 20lg n
10
0
1 2 3 4 5
Tamao datos
300
250
200
en 2n2 8n
Pasos
150
100
50
20lg n
0
1
11
13
15
17
19
21
23
25
Tamao dato
MEDIDAS DEL COMPORTAMIENTO
ASINTTICO
O(logan)=O(logbn)
n
(n + 1 )n n 2 n
Si f(i)=i.
i=1
i =
2
=
2
+
2
n + 1 n +1
x 2 (n + 1) 2
1 n 2
1
x dx =
2
=
2
2
=
2
+ n
1
(n )
n
i=1
i K
O k +1
n +1 k +1 n +1 +1
x (n + 1) k 1
= =
k
x dx
1
k + 1 1
k + 1 k + 1
k 1 (n + 1 )k + 1 + k 2 O (n k +1
)
JERARQUA DE RDENES DE FRECUENTE
APARICIN
TI1,I2(n)=T1(n)+T2(n)
Tseleccin(n)=Tcondicin(n)+max(T1(n),T2(n))
Case <expresin> of
caso1: I1;
caso2: I2;
.....
.....
cason: In;
end; {case}
Tseleccin(n)=Texpresin(n)+max(T1(n),....,Tn(n))
INSTRUCCIONES DE ITERACIN: BUCLES
T bucle ( n ) = m (1 + T I (n ) )
Los bucles while y repeat no poseen una norma general
SUBPROGRAMAS
i=1
x n =
2
n
n 1 1 x n
1 + x + x 2
+ ... + x =
1 x
i=1
x i
=1 + x + x 2
+ ... =
1 x
si x < 1
x i
i=1 i !
= e x
( 1 )
x
= log
i
x
i=1 i
SUCESIONES DE RECURRENCIA LINEALES
DE PRIMER ORDEN
x n = c x n 1 = c n x 0
x n = b n x n 1 para un n 1
x n = b 1 b 2 .... b n x 0
x n = b n x n 1 + c n
realizando el cambio :
x n = b 1 b 2 .... b n y n
en la recurrencia de x n + 1
x n +1 = b n +1 x n + c n +1
xn
= b x 0 + c
n (1 b
n
)
(1 b )b
n
ALGORITMOS DE BSQUEDA Y
ORDENACIN
Bsqueda(vector,elemento):
i{1,....,n} si existe tal elemento
0 en otro caso
Estructura de datos:
const
N=100;
type
tIntervalo=0..N;
tvector=array[1..N] of tElem {tipo ordinal}
ALGORITMOS DE BSQUEDA EN
ARRAYS
Algoritmos de bsqueda:
Bsqueda secuencial
Bsqueda secuencial ordenada
Bsqueda binaria
BSQUEDA SECUENCIAL
La bsqueda secuencial consiste en comparar
secuencialmente el elemento deseado con los
valores contenidos en las posiciones 1,....,n.
VAR
i:tIntervalo;
BEGIN
i:=0;
El nmero de veces que se ejecuta
repeat El algoritmo depender del bucle.
i:=i+1; En el peor de los casos ser de orden
until (v[i]=elem) or (i=N); O(n).
if v[i]=elem then
busquedasec:=i
else
busquedasec:=0
END; {busquedasec}
BSQUEDA SECUENCIAL ORDENADA
VAR
i:tIntervalo;
BEGIN
i:=0;
repeat
i:=i+1;
until (v[i]elem) or (i=N);
if v[i]=elem then
busquedasecord:=i
else
busquedasecord:=0
END; {Busquedasecord}
*Este algoritmo en el peor de los casos es de orden O(n).
BSQUEDA BINARIA
El hecho de que el vector este ordenado se puede,
tambin, aprovechar para conseguir una mayor
eficiencia planteando el siguiente algoritmo.
if encontrado then
busquedabinaria:=posmed
else
busquedabinaria:=0
END; {Busquedabinaria}
BSQUEDA BINARIA
Algoritmos cuadrticos:
Seleccin directa
Insercin directa
Intercambio directo
Algoritmos avanzados de bsqueda:
Algoritmo rpido (Quick Sort)
Algoritmo de mezcla (Merge Sort)
SELECCIN DIRECTA
1 5 7 4 9 8 2
1 2 4 5 7 8 9
SELECCIN DIRECTA,
IMPLEMENTACIN EN PASCAL
PROCEDURE Selecciondirecta( var v:tvector);
{Efecto. Se ordena v ascendentemente}
VAR
i, j,posmenor:tIntervalo;
valmenor,aux:telem;
BEGIN
for i:=1 to N-1 do begin
valmenor:=v[i]
posmenor:=i
for j:=i+1 to N do
if v[j]<valmenor then begin
Busca el menor
valmenor:=v[j]; elemento de entre
posmenor:=j i+1,....,N
end; {if }
SELECCIN DIRECTA,
IMPLEMENTACIN EN PASCAL
BEGIN {Quicksort}
Sortdesdehasta(v,1,n);
END; {Quicksort}
1.1.sortdesdehasta(v,1,4) p=v[2]=5
i=1 [0,5,11,9] 0<5
i=2 [0,5,11,9] 5 not< 5
i=2 j=4 [0,5,11,9] 9>5
i=2 j=3 [0,5,11,9] 11>5
i=2 j=3 [0,5,11,9] 5 not>5
i=3 j=1 [0,5,11,9] intercambio. Salida bucle
ORDENACIN RPIDA,
TRAZA DE UN EJEMPLO
1.1.1.sortdesdehasta(v,3,4) p=v[3]=11
i=3 [11,9] 11 not <11
i=4 [11,9] 9 not> 11
i=4 j=3 [9,11] intercambio. Salida bucle
V=[0,5,15,9,11]
1.2 Sortdesdehasta(v,4,5) p=v[4]=11
i=4 [11,15] 11 not <11
i=4 j=5 [11,15] 15>11
i=4 j=4 [11,15] 11 not >11
i=5 j=3 [11,15] intercambio. Salida bucle
Sortdesdehasta(v,1,5)
Sortdesdehasta(v,1,4) Sortdesdehasta(v,4,5)
Sortdesdehasta(v,3,4)
ORDENACIN RPIDA,
CLCULO DE SU COMPLEJIDAD ALGORTMICA
El peor caso: Si se elige como pivote el primer elemento del vector y adems
se considera que el vector esta ordenado decrecientemente entonces, el
bucle ... Para cada elemento... se ejecutar en total:
(n-1)+(n-2)+(n-3)+....+1
Cada miembro de este sumando proviene de cada una de las sucesivas
ordenaciones recursivas.
Este sumatorio da lugar a la siguiente expresin:
) = [(n 1 )+ 1 ](n 1 ) (n 1 )
n
(n
n
i =
i=1 2 2
Como se puede apreciar si la eleccin del pivote es tal que los subvectores
son de igual tamao y adems los vectores estn ordenados de forma
aleatoria entonces el algoritmo posee una eficiencia del tipo O(n log n).
BEGIN {Mergedesdehasta}
centro:=(izq+der)DIV2;
if izq<centro then
Mergedesdehasta(v,izq,centro);
if centro<der then
Mergedesdehasta(v,centro+1,der);
Merge(v,izq,centro,der,v)
END; {Mergedesdehasta}
ORDENACIN POR MEZCLA,
IMPLEMENTACIN EN PASCAL
BEGIN {Mergesort}
Mergedesdehasta(v,1,n)
END; {Mergesort}
ORDENACIN POR MEZCLA,
IMPLEMENTACIN EN PASCAL
PROCEDURE Merge(v:tvector; iz, ce, de:tintervalo; var w:tvector);
{Efecto.w: mezcla ordenada de los subvec. v[iz..ce],v[ce+1..de] }
VAR
i, j,k:tIntervalo;
BEGIN
i:=iz; j:=ce+1; k:=iz; {k recorre w}
while( i ce) and (j de) do begin
if v[i]<v[j] then begin
w[k]:=v[i];
i:=i+1
end; {if}
else begin
w[k]:=v[j];
j:=j+1;
end; {else}
k:=k+1
end; {while}
ORDENACIN POR MEZCLA,
IMPLEMENTACIN EN PASCAL
for k:=j to de do
w[k]:=v[k]
for k:=i to ce do
w[k+de-ce]:=v[k]
END; {Merge}
ORDENACIN POR MEZCLA,
TRAZA DE UN EJEMPLO
V=[8,5,7,3]
1. Mergedesdehasta(v,1,4)centro=2
1.1. Izq(1) <centro(2) Mergedesdehasta(v,1,2) centro=1
1.1.1. izq(1) not< centro(1)
1.1.2. centro(1)< der(2)
1.1.2.1 izq(2) not< centro(2)
1.1.2.2. centro(2) not< der(2)
1.1.2.3. Merge(v,2,2,2,v) trivial
Merge(v1,1,2,v)-------- w1[5,8]
ORDENACIN POR MEZCLA,
TRAZA DE UN EJEMPLO
1.3. Merge(v,1,2,4,v)------------w[3,5,7,8]
Mezcla ordenada de w1 y w2
ORDENACIN POR MEZCLA,
TRAZA DE UN EJEMPLO
Mergedesdehasta(v,1,4)
centro=2
Merge(v,1,2,4,v)
Centro<der fin de programa
Izq<centro
2<4
1<2
Mergedesdehasta(v,3,4)
Mergedesdehasta(v,1,2)
centro=3
centro=1
Izq<centro Izq<centro
1not <1 Merge(v,1,1,2,v) 3not <3 Merge(v,3,3,4,v)
Centro<der Centro<der
1<2 3<4
Mergedesdehasta(v,2,2) Mergedesdehasta(v,4,4)
centro=2 centro=4
= 4T (n 4 )+ 2 k 2 n + k 4 =
= 4 (2 T (n 8 )+ k 2 (n 4 )+ k 3 )+ 2 k 2 n + k 4 =
= 8T (n 8 )+ 3k 2 n + k 5 =
= .......... .......... .......... .......... .......... . =
= 2 j
T (1 ) + jk 2 n + k j
De donde sustituyendo jlog n lo que da una funcin de orden O(n logn) (una
vez aplicadas las reglas de la suma y de la escalabilidad).