1313
1313
1313
2.1. INTRODUCCIÓN
Para cada algoritmo es necesario aclarar cuales son las operaciones elementales y como
están representados los datos de entrada y de salida. Su ejecución requiere unos recursos.
Programa
Ideal
Correcto EFICIENTE
Es claro que para cada algoritmo la cantidad de recursos (tiempo, memoria) insumidos
depende fuertemente de los datos de entrada. En general, la cantidad de recursos crece a
medida que crece el tamaño de la entrada.
Ejemplo 1
— para un vector su longitud,
— para un número su valor o su número de dígitos, …
6
Algoritmos avanzados
Ing. Simón Onofre López
2.4 EFICIENCIA
Relación entre los recursos consumidos y los productos conseguidos.
i:= 0 1
a[n+1]:= x 1
repetir
i:= i + 1 1
hasta a[i] = x
Para la estructura repetitiva el Tiempo de Ejecución depende de los valores que toman x y n
Mejor caso. Se encuentra x en la 1ª posición:
Tiempo(N) = 1
Peor caso. No se encuentra x:
Tiempo(N) =·N
7
Algoritmos avanzados
Ing. Simón Onofre López
2.5 MODELO
Para analizar algoritmo en un marco formal, se necesita un modelo de computación. Nuestro
modelo es básicamente un computador normal, en el cual las instrucciones se ejecutan de
modo secuencial. El modelo tiene el repertorio estándar de instrucciones sencillas, como
adición, multiplicación, comparación y asignación, pero a diferencia de los computadores
reales, este tarda exactamente una unidad de tiempo en hacer cualquier operación sencilla.
Para ser razonable, se supondrá que, como un computador moderno, este modelo tiene
enteros de tamaño fijo y que no tienen instrucciones refinadas, como la inversión de matrices
o la clasificación, que claramente no se pueden hacer en una unidad de tiempo.
Ejemplo 3
a) z=z+1
b) a>b
Tienen un T(n)=1, donde n es el tamaño (no conocido en este ejemplo) de la entrada
Notación () Una función T(n) es (g(n)) sí y solo sí existen unas constantes c y n 0 tales
que cg(n) T(n) cuando n0n
Notación () Una función T(n) es (h(n)) sí y solo sí se cumple que existen unas constantes
positivas c1, c2 y n0 independientes de n tales que:
8
Algoritmos avanzados
Ing. Simón Onofre López
Notación O(): De manera formal se dice que una función f(n) es de orden O(g(n)) sii se
cumple que existen unas constantes positivas c y n0 , ambas independientes tales que:
f(n) c g(n) , n n0
donde decidir que f(n) es O(g(n)) supone que cg(n) es una cota superior del tiempo de
ejecución del algoritmo
De esta manera definimos la medida asintótica de cota superior f, que notaremos O( f ) como
el conjunto de funciones
Si T Î O( f ) decimos que “T(n) es del orden de f(n)” y que “f es asintóticamente una cota
superior del crecimiento de T”.
Ejemplo 5
a) Sea el segmento de algoritmo
X=1 . . . . . .1
Z=6 . . . . . . 1
9
Algoritmos avanzados
Ing. Simón Onofre López
El tiempo de ejecución es T(n)= 1+1= 2 aplicando la “regla de la suma” lo cual es O(1) por
la propiedad Pr3
For i=1 to 10 do
Begin
x=x+1 ..............1
y=y/i.................1
end
donde:
O(1) O(log n) O(n ) Ì O(n) O(n log n) O(n2) O(n3) ... O(nk) ...O(2n )
O(n!)
a) Ciclos for
Ejemplo 6
for i:=1 to n do
x:=x+1;
10
Algoritmos avanzados
Ing. Simón Onofre López
n
Ta (n) T(for_i) * T(instr_internas) 1 n
i 1
Ciclos for anidados
Analizar de adentro hacia fuera. El tiempo de ejecución total de una proposición dentro del
grupo, de ciclos for anidados es el tiempo de ejecución de la proposición multiplicada por el
producto de los tamaños de todos los ciclos for.
T(For/nivel1)*T(For/Nivel2)* . . . *T(For/nivelN)
Ejemplo 7
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
x:=x+1;
n n
n n n n
Ta (n) T(for_i)* T(for_j)* T(for_k)*1 1 n n * n n * n * n n 3
i 1 j 1 k 11 i 1 j 1 i 1
que es O(n3) orden cúbico
Para If / Else
T(IF_THEN) = T(condición)+T(Then)
T(IF_THEN_ELSE) = T(condición)+max(T(Then),T(Else))
Ejemplo 8
i)
if N mod 2 = 0 then Ta(n)= T(if_then)=T(condición)+T(then)
for i:=1 to n do n
11
Algoritmos avanzados
Ing. Simón Onofre López
La noción de esta estructura selectiva se puede extender al uso del CASE (selección
múltiple)
While
Se realiza generalmente un análisis inductivo exhaustivo mediante una variable axiliar t cuya
misión es contar el tiempo del while. Además se realiza el análisi del peor de los casos de
entrada al bucle.
Ejemplo 9
z t
t=0 4 0 El tiempo del mientras (while) es:
mientras z > 0 hacer 3 1 z +1
z = z -1 2 2 la ctte 1 se adiciona debido a la
t = t +1 1 3 última pregunta de condición del
0 4 while
Finalmente:
Las siguientes formulas serán útiles para la resolución de ejercicios y algunas serán usadas
en esta sección
12
Algoritmos avanzados
Ing. Simón Onofre López
n
a )1 n
i 1
n
b ) 1 ( n a 1).
i a
n
n ( n 1)
c ) i .
i 1 2
n
n ( n 1)( 2 n 1)
d ) i 2
i 1 6
n
n r 1
e) i r
i 1 ( r 1) p r ( n )
Mediante la notación asintótica, obténganse los tiempos de ejecución del peor caso supuesto
para cada uno de los procedimientos siguientes como una función de n
Ejercicio 1
i:=1;
while I<= n do
begin
x:=x+1;
I:=I+1;
End
Añadiendo una variable t que controlará el número de veces que se ingresa a la estructura
while
i t n
T=0 1 0 4 El tiempo del while es:
i:=1; 2 1
while i<= n do 3 2 n +1
i:=i+1; 4 3
t = t +1 5 4
Ejercicio 2
for i:=1 to n do
for j:=1 to i do
x:=x+1;
13
Algoritmos avanzados
Ing. Simón Onofre López
n i n n(n 1) 1 2 1
T (n) 1 i n n es O(n2) orden cuadrático
i 1 j 1 i 1 2 2 2
Ejercicio 3
procedure pord_mat(n: integer);
var
I,j,k:integer;
Begin
For i:=:1 to n do
For j:=1 to n do
begin
C[i,j]:=0; - - - - - - - - - - - - - - 1
For k:=1 to n do
C[i,j]:=C[i,j]+A[i,k] * B[k,j]: - - 1
End;
End;
n n n
Tprod_mat(n) = ( (1+1)) = n ( n (1+ n )) = n (n+n2) = n2 + n3
I=1 j=1 k=1
3
Que es O(n ) orden cúbico.
Ejercicio 4
procedure misterio1(n: integer);
var
i,j,k:integer;
begin
for i:=:1 to n-1 do
for j:=i+1 to n do
for k:=1 to j do
{alguna proposición que requiera tiempo O(1) }
end;
n 1 n j n 1 n n1 n i
Tmisterio1 (n) ( (1)) ( j ) ( j j )
i 1 j i 1 k 1 i 1 j i 1 i 1 j 1 j 1
n 1
n(n 1) i (i 1) n1 n(n 1) 1 n1 2
Tmisterio1 (n) ( ) ( ) (i i )
i 1 2 2 i 1 2 2 i1
14
Algoritmos avanzados
Ing. Simón Onofre López
Ejercicio 5
procedure misterio2(n: integer);
var
x, cuenta:integer;
begin
cuenta:=0;
x:=2;
while x<n do
begin
x:=2*x;
cuenta:=cuenta+1;
end;
writeln (cuenta)
end;
x T n
t=0 2 0 31 El tiempo del mientras (while) es:
x=2 4 1 2t+1 = x de la condición del while 2t+1 < n
while x<n do 8 2
x=2*x 16 3 despejando t se tiene
t=t+1 32 4 t <log2n –1
para que se de una equivalencia entre ambos términos
t +a log2n –1 t log2n –1 –a +1
se adiciona la ctte 1 debido a la última pregunta que se
realiza en la sentencia while
Finalmente:
Tincognita2 ( n ) 2 2 log 2 n 2a
Ejercicio 6
Function suma(n:intertger)
var
i,suma_parcial: integer
begin
(1) suma_parcial=0;
(2) for i:=1 to n do
(3) suma_parcial:= suma_parcial +i*i*i;
end for
15
Algoritmos avanzados
Ing. Simón Onofre López
(4) suma:=suma_parcial
end suma
Sol. El tiempo de ejecución para (1), (3) y (4) es 1, en el caso del for es una sumatoria de la
siguiente forma:
n
Tsuma(n) = 1+ 1 + 1
i=1
1. Expansión de recurrencias
Utilizar la recurrencia misma para sustituir m<n por cualquier T(m) en la derecha, hasta que
todo, los términos T(m) par m>1 se hayan reemplazado por formulas que impliquen solo T(1)
como T( 1) siempre es constante, so tiene una formula para T(n) en función de n y de
algunas constantes
Suponer una solución f(n) y usar la recurrencia para mostrar que T(n)<=f(n). Algunas veces
solo se supone la forma f(n) dejando algunos parámetros sin especificar. y deduciendo
valores adecuados para los parámetros al intentar demostrar que T(n)<=f(n) para todo n.
1 n= 1
( *)T(n) =
aT(n/b)+d(n) n>=2
Donde
Para resolver (*) se aplica la técnica de sustituciones repetidas para T en el lado derecho.
16
Algoritmos avanzados
Ing. Simón Onofre López
Una vez que se resuelve por expansion de recurrencias, se obtiene los siguientes tres casos:
Ejercicio 1 Sea el siguiente programa recursivo para calcular factoriales, encontrar el tiempo
de ejecución en el peor de los casos.
int Factorial(int n)
{
if(n<=1) return 1;
else
return Factorial(n-1)*n;
}
So I
Para este ejercicio se tiene la siguiente ecuación característica que representa el tiempo:
T(n) = T(n-k) + kd
(*)
Por último, el caso base se presenta cuando el argumento de la función T(n) es 1 es decir
para T(1), entonces:
17
Algoritmos avanzados
Ing. Simón Onofre López
d n= 1
T(n)=
2T(n/2)+ cn n<1
n
T(n) 2T cn
2
n n n
T 2T 2 c
2 2 2
n n n
T 2 2T 3 c 2
2 2 2
n
T(n) 2T cn
2
n n n n n n n
T(n) 2 2T 2 c cn 2 2 T 2 2c cn 2 2 T 2 2c cn 2 2 T 2 2cn
2 2 2 2 2 2 2
n n n n n n
T(n) 2 2 2T 3 c 2 c cn 2 3 T 3 2 2 c 2 2cn 2 3 T 3 3cn
2 2 2 2 2 2
El patrón de recurrencia será:
n
T (n) 2 k T k kcn
2
n
k
1 n 2 k k log n n
2
es O(nlogn)orden cuasilineal
18
Algoritmos avanzados
Ing. Simón Onofre López
T(n)= 1 n= 2
0 n=I
T ( n )= 2T ( n/2)+2
T(n) = 2[2T(n/4)+2]+2
T(n)=2*2T(n/8)+8+4+2
k
T ( n) 2 k T ( n k ) 2 i 2’
2 i 1
Si n=2t
k
) 2i
t
T ( n) 2 k T ( 2 k
2 i 1
t 1
2t t 1
) 2i T ( 2) 2 i
t
T ( n) 2 t 1 T (2 t 1
2 i 1 2 i 1
t 1
S 2i 2t 2
i 1
luego reemplazando S en el Patrón de recurrencia y con n=2t
T(n)=n/2 + 2t-2 0 n/2 +n-2=3/2n-2 es O(n)
Ejercicio 4
C n=1
T(n) =
2T(n/2) + n3 e.o.c.
Respuesta:
19
Algoritmos avanzados
Ing. Simón Onofre López
n
T ( n ) 2T ( ) n 3
2
n n 3 n n
3
T ( n ) 2 2T 2 n 3 2 2 T 2 2 n 3
2 2 2 2
n n 3 n
3
n n
3
n
3
T ( n ) 2 2 2T 3 2 2 n 3 2 3 T 3 2 2 2 2 n 3
2 2 2 2 2 2
Generalizando llegamos al Patrón de Recurrencia
3
n k 1 n n k 1 n k 1
3
n 2i
T (n) 2 k T k 2i i 2 k T k 2i i 3 2 k T k n 3 i 3
2 i 0 2 2 i 0 2 2 i 0 2
k 1 i i
2 k 1 1
3 2 S
i 0 2 i 0 2
1 1 1 1
S 1 2 ......... k 2 k 1
4 4 4 4
1 1 1 1 1
S 2 ......... k 1 k
4 4 4 4 4
1 1
S (1 ) 1 k
4 4
4 1
S K 1
3 3.4
La determinación de O se deja como ejercicio
Ejercicio 5 Resuelva la siguiente recurrencia por el método Solución General para una clase
grande de recurrencias
1 n= 2
T(n)=
4T( n/2 )+n3 n> 1
20
Algoritmos avanzados
Ing. Simón Onofre López
21
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: