Beruflich Dokumente
Kultur Dokumente
INDICE
!
"
#$%
1 2
&'()*
4$4$5
67
+, -
+./5
8
99:
6+!+
)
.!,
99;
#
BIBLIOGRAFÍA COMPLEMENTARIA
3 4
La eficiencia de los algoritmos La eficiencia de los algoritmos
5 6
7 8
La eficiencia de los algoritmos La eficiencia de los algoritmos
EJEMPLOS:
1.- Algoritmo de ordenación: la talla del problema
será el número de elementos a ordenar.
9 10
si x = 0 entonces
y := y + 1
fsi
1 paso
11 12
La eficiencia de los algoritmos La eficiencia de los algoritmos
n (Talla)
n 1 ns 8 ns 32 ns 1 s 1 ms 1s
Problemas
inabordables
13 14
15 16
La eficiencia de los algoritmos La eficiencia de los algoritmos
función buscar
entonces: ( x: elemento;
p a: vector índice
de entero;
costeA (n) = máx {costeA(I,n) : I S(n)}
n: índice)
= costeA(Ip,n) devuelve índice;
(coste peor) {1n k:1kn:ak=x}
m var i:índice fvar;
costeA (n) = mín { costeA(I,n) : I S(n)} i:=1;
= costeA(Ip,n) mientras a[i]x hacer
i:=i+1
(coste mejor) fmientras;
devuelve i
Med
costeA (n) = S(n) P(I) * costeA(I,n) {1in ai=x j:1j<i:a[jx}
ffunción
(coste medio)
x Caso mejor
x Caso genérico
x Caso peor
17 18
19 20
La eficiencia de los algoritmos La eficiencia de los algoritmos
Ejemplos:
Sean A y A' dos algoritmos que resuelven el mismo
problema.
p m Si costeA (n) = 2n y costeA' (n) = 3n, podremos
Determinar exactamente costeA y coste A
decir que A y A' tienen una eficiencia parecida.
puede resultar difícil; Si costeA(n) = 2n y costeA' (n) = 100n, A será
más eficiente que A'. Pero el uso de un
no tiene mucho sentido si hablamos de pasos de ordenador suficientemente rápido para ejecutar
programa; A’ haría que este algoritmo se ejecutase
siempre en menos tiempo que A en el
puede resultar excesivamente laborioso si sólo ordenador original. Por lo tanto, los avances
necesitamos calcular la complejidad de un tecnológicos podrían justificar el uso de A’ si
algoritmo para compararlo con otros durante la éste poseyera suficientes ventajas secundarias
fase de diseño, antes de conocerlo en detalle. sobre A.
Si costeA(n) = n2 y costeA' (n) = 3n, podremos
decir que:
A es más eficiente que A’ para n = 1, 2;
A y A’ son igual de eficientes para n = 3;
A’ es más eficiente que A para n > 3.
21 22
CONSIDERACIONES:
23 24
La eficiencia de los algoritmos La eficiencia de los algoritmos
NOTACION O NOTACION
2.- 3n O(n ):
2 C·g(n) = 1·n 3n = f(n)
n0.
25 26
b) 3n (n) ( “ “ ).
NOTACION
Definición. Se dice que
Definición. Se dice que
- f es de menor orden que g, o que
- f es del orden de g, o que
- f crece más lentamente que g, sii
- f crece igual de rápidamente que g, o que
f(n) O(g(n)) pero f(n)
(g(n)).
- g es una cota superior e inferior de f, sii
!
TEOREMA.
1- f es de menor orden que g sii O(f(n)) O(g(n)).
Proposición.
2- f es de mayor orden que g sii (f(n)) (g(n)).
f(n) (g(n)) f(n) O(g(n)) f(n) (g(n))
f(n) (g(n)) f(n) O(g(n)) g(n) O(f(n))
Nota: denota en este tema la inclusión estricta.
Ejemplo.
3n (n), pues
a) 3n O(n) (visto anteriormente).
27 28
La eficiencia de los algoritmos La eficiencia de los algoritmos
COROLARIO
Los siguientes teoremas son útiles para comparar
tasas de crecimiento de funciones. a. Si p es un polinomio de grado r, entonces
p es del mismo orden que nr.
b. n , con >1 constante, crece más
rápidamente que cualquier polinomio.
TEOREMA
c. Si 1>K2>1, entonces
f (n)
lim K 0
(f(n))
(g(n))
n g ( n) n crece más rápidamente que n, pero
log(n) es del mismo orden que log(n).
(f y g son del mismo orden).
d. Cualquier polinomio crece más rápidamente
que log(n).
TEOREMA
e. n! crece más rápidamente que n.
f ( n)
lim f(n ) crece más rápidamente que g(n), f. nn crece más rápidamente que n!.
n g (n)
TEOREMA
f ( n)
lim 0 g(n ) crece más rápidamente que f(n).
n g (n)
29 30
"
&1&%#"#"2(&
Para calcular el coste de un algoritmo:
Muchas veces las notaciones asintóticas pueden
En primer lugar hay que determinar la talla del
aparecer dentro de expresiones, por ejemplo:
algoritmo.
31 32
La eficiencia de los algoritmos La eficiencia de los algoritmos
con lo que obtendremos una cota inferior de la • Instancias: no hay instancias significativas que
complejidad del algoritmo: afecten al coste. En cualquier caso se recorre
todo el vector.
costeA(n) (g(n)).
coste(n)
(n).
33 34
#"131/"#%/"2&"!//
2&"!///"&%1%#(41"%
Procedimiento a seguir:
1. Determinar qué parámetro(s) nos da(n) la talla Vamos a estudiar la complejidad de las siguientes
o tamaño del problema, en función de la cual instrucciones:
se expresará la complejidad.
operaciones básicas,
2. Identificar el caso peor y el caso mejor de
comportamiento del algoritmo en cuanto a secuencia de instrucciones,
consumo de tiempo (o de espacio si se estudia
la complejidad espacial). sentencia alternativa, y
sentencia iterativa.
3. Aplicar un método de obtención de las cotas de
complejidad.
x := y + z;
b := x y (a b);
escribir(‘Un texto constante como éste’).
35 36
La eficiencia de los algoritmos La eficiencia de los algoritmos
37 38
Coste (np+1)
1ª iteración nª iteración (falla B)
B ; S; ... B ; S; B
39 40
La eficiencia de los algoritmos La eficiencia de los algoritmos
p=1 i
i 1
1
2
( n 2 ) .
de entero;
n, x: entero;
n
n(n 1)(2n 1) sal está: lógico;
p=2 i
i 1
2
6
( n 3 ) . sal m: entero) es
var i,j: entero fvar;
i:=1 ; j:=n; está := falso;
repetir
Caso 2: Medidas logarítmicas. m := (i+j) div 2;
opción
Supongamos que en cada iteración la talla n se v[m] > x: j := m - 1;
reduce en un factor c, hasta llegar a una talla mínima v[m] < x: i := m + 1;
n0 >0 para la que se da la condición de salida del v[m] = x: está := verdadero;
bucle. fopción
hasta que i>j está
Tras la 1ª iteración: la talla pasa a n/c fprocedimiento
2
Tras la 2ª " : " n/c {1mn((está vm=x)
.....................................................
(está k:1kn:vkx)}
y tras una q-ésima iteración, la talla se reduce a n0.
41 42
=
(//
Caso mejor: se encuentra de inmediato el elemento
>
+
y la iteración cesa: costem(n) (1).
En resumen:
Definición del problema
coste(n) O(log2n), coste(n) (1).
$
43 44
La eficiencia de los algoritmos La eficiencia de los algoritmos
: vector x vector x entero x entero lógico
Para v1,v2 vector, i,j entero 2.- Se utiliza una variable “i” para marcar el límite
entre ambas zonas.
perm(v1,v2,i,j)= (
k: i k j:
(( t: i t j: v1[k
=v2[t
)
INVARIANTE:
nveces(v1[k
, v1,i,j) = nveces(v1[k
,v2,i,j) ))
1 i-1 i n
/: TipoBase x vector x entero x entero
entero
Para e TipoBase, v vector, i,j entero
k : 1 k < i - 1: v[k] v[k+1] 1 i 1 n
nveces(e,v,i,j) = k: i k j: igual (v[k
,e)
designa las posiciones que contienen elementos
ordenados entre sí,
'
: TipoBase x TipoBase {1,0}
posiciones cuyos elementos no están
Para x,y TipoBase
necesariamente ordenados.
igual(x,y)= 1 sii x=y
Función limitadora t = n - i + 1
igual(x,y)=0 sii xy
45 46
Diseño del algoritmo a partir del Diseño del algoritmo a partir del
invariante: invariante:
- El invariante se cumple inicializando “i” a 2, ya que - La iteración debe acabar cuando el vector esté
inicialmente el primer elemento está ordenado con totalmente ordenado.
respecto a si mismo 1 n
1 2 n
En efecto, formalmente:
Por tanto:
!B = (i = n + 1)
k : 1 k < i - 1 : v[k]v[k+1] 1 i 1 n i
=2
B = ( i n)
47 48
La eficiencia de los algoritmos La eficiencia de los algoritmos
Q = {ordenado(V, 1, n) v = perm(V)}
1 i-1 i n
Invariante
Función limitadora t = n -i +1
49 50
v[p] := x;
1 i-1 i n
{ }
i:=i+1
fmientras
51 52
La eficiencia de los algoritmos La eficiencia de los algoritmos
p:=i; i 1
02? 1 i (i)
j 1
v[p]:= x;
53 54
i := i + 1
(
/
fmientras /<
"
5insertar ordenadamente v[i] en
>
? v[1..i-1],58
69
( El vector está ya ordenado 7
coste(n) (n)
=
F0?20/IJ/2
( El vector está ordenado al revés
=
F0?20/IJ/2
coste(n) (n2) G
=
-
0?20/IJ@/2@
55 56
La eficiencia de los algoritmos La eficiencia de los algoritmos
i:=i+1
57 58
0 2? 1 ( m )
i 1
donde mínimo(v,i,n):
Talla = n
0/2
C0D2
E
mientras siguiente<=fin hacer
si v[siguiente]< v[p] entonces p:=siguiente;
siguiente:=siguiente+1; >
F(
@
fmientras
>
F(
@
G
Talla = fin - inicio +1=m >
DF(
@D?
59 60
La eficiencia de los algoritmos La eficiencia de los algoritmos
( 1 n
?
n 1 n n 1 n 1
02?
1 n (i 1) 1 n i
i 1 j i 1 i 1 i 1
Postcondición:
1 n
61 62
u x v
Nótese que:
Los estados inicial y final aparecen como casos
particulares de este invariante. En el estado inicial, las
bandas de colores están vacías, y la zona indefinida
63 64
La eficiencia de los algoritmos La eficiencia de los algoritmos
Invariante u v x
1 n
color(v) = blanco: v:=v+1; ? r
65 66
algoritmo búsqueda_binaria
n
Coste(n)= 1 (n)
i 1
(datos v: Vector[b1 .. bn ] de TipoBase;
x:TipoBase;
P = {x = X v = V ordenado(V) }
Q = {está = ( i: 1 i N: x = v[i]}
67 68
La eficiencia de los algoritmos La eficiencia de los algoritmos
Estrategia: como el vector está ordenado Diseño del algoritmo a partir del
ascendentemente, la búsqueda binaria se plantea como invariante
una búsqueda en el subvector donde se puede encontrar
el elemento buscado, subvector de búsqueda. ¿El invariante se cumple al empezar la iteración?
En cada iteración de la búsqueda:
En efecto, al inicio el subvector de búsqueda coincide con
> Acceder al elemento central v[m] del subvector de el vector v, por lo que
búsqueda
izq := 1; der:= N; m : = (izq + der) div 2
> SI:
X < v[m] buscar en subvector izquierdo v[1] v[2] ... v[m v[n]
]
1 2 izq m der N
69 70
¿El invariante se cumple al terminar la iteración? ¿Se cumple el invariante tras cada iteración?
se puede alcanzar de dos formas tras salir del bucle: I (v[m] <> X) #izq $der) t = der -izq + 1
izq 2 m der
1 2 m izq der
71 72
La eficiencia de los algoritmos La eficiencia de los algoritmos
fopción
Opción 1
I v[m] < X izq < der
izq:= m + 1
m := (izq + der) div 2
I
y la función limitadora decrece
73 74
¿I? fopción
¡CUIDADO!
- izq y der son consecutivos: izq = der -1. Por tanto, 1.- Comprobar que con la modificación realizada, la
m = izq función limitadora decrece cuando v[m] x (pista: si
está dentro del bucle izq der - 1)
- izq =1. Por tanto m = 1
- v[m] X 2.- Comprobar que si izq y der son consecutivos, pero
v[m] $x no hay problemas.
v[1] v[2]
Por tanto, la búsqueda binaria queda como sigue:
izq= m = der función búsqueda_binaria(v:Vector[1..N]de enteros;
1
x:entero) devuelve Lógico
Al ejecutar la instrucción der :=m -1
var está:Lógico; m, izq, der :entero fvar
¡der := 0!
izq := 1;
¡No se cumple el invariante!
der := N;
75 76
La eficiencia de los algoritmos La eficiencia de los algoritmos
mientras (v[m] <> x) #izq $der) hacer B 0 2%
opción
/
77 78