Escolar Documentos
Profissional Documentos
Cultura Documentos
Tema I. Análisis de
algoritmos
© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software
Evaluación de la memoria
© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software
Evaluación del tiempo
Depende del computador concreto que usemos.
Supondremos un computador hipotético (con tiempos de
ejecución ficticios) pero semejante en resultados a la
realidad.
T(n): Función de tiempo, llamada complejidad
n hace referencia a una medida de los datos
numero de datos en el input,
grado de un polinomio,
tamaño de un fichero,
dimensiones de una matriz,
nodos de un grafo, etc.
© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software
La medida de los datos
© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software
Evaluación del tiempo
Dos medidas para T(n):
1. Se puede computar T(n) como el tiempo
para el peor caso de los posibles. T(n) indica
el tiempo peor que podemos emplear.
2. Se puede computar T(n) como el tiempo
medio para todos los casos posibles.
© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software
Peor, mejor, tiempo medio
En este algoritmo se
FUNCTION Busquedasec pueda dar las siguientes
(v:tvector;elem:telem) situaciones:
begin
i:=0; Caso mejor: el elemento
este en la primera
repeat posición.
i:=i+1;
until(v[i]>=elem) or(i=N); Caso peor: Se tenga que
ifv[i]=elemthen recorrer todo el vector.
Busquedasecord:=i
else Caso promedio o
Busquedasecord:=0 esperado:Puesto que
End todas la posiciones son
equiprobablesel tiempo
será n/2 pasos.
© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software
NOTACION O()
Concepto de Notación O ()
Decimos que una función f(n) esta en O(g(n)) si se
cumple que existe una constante c > O y un
numero no (que no dependen de n) tal que
f (n) / g(n) <= c
Nótese que sí
Lim f (n) /g(n) es acotado
n->∞
Entonces f(n) є O(g(n))
Decidir que T(n) es O(g(n)) supone que f(n) es
una cota superior del tiempo de ejecución del
algoritmo. Es decir, que para ningún caso el
tiempo excede de cierta proporcionalidad de f(n).
© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software
Notación O
Ejemplos
* Si T(n) = 4n3 + 2n2 tenemos que T(n) es O(n3)
ya que tomando c = 5 y n0 = 2 obtenemos:
(4n3 + 2n2) / n3 < 5 para todo n > n0
© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software
Propiedades de la Notación O()
c*O(f(n)) є O(f(n))
O(f(n)) + O(f(n)) є O(f(n))
O(f(n)) + O(g(n)) є O(f(n) +
g(n))
O(f(n))*O(g(n)) є O(f(n)*g(n))
O(O(f(n)) є O(f(n))
© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software
Complejidad de las sentencias
© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software
Instrucciones simples
© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software
Composición de instrucciones
TI1,I2(n)=T1(n)+T2(n)
Que aplicando la regla de la suma es el
máximo de ambos.
© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software
Instrucciones de selección
If (<condición>){I1} else {I2}
Tselección(n)=Tcondición(n)+max(T1(n),T2(n))
switch (<expresión>)
{
case <constante>: {I1}
case <constante>: {I2}
...
case <constante>: {Ij}
}
Tselección(n)=Texpresión(n)+max(T1(n),....,Tj(n))
© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software
Instrucciones de iteración: bucles
for (i=1 ; i<= m ;i++) {Ij}
© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software
Subprogramas
int Fac( int n)
{
if (n=0)
Fac=1;
else
Fac=n*Fac(n-1)
}
El caso base posee un coste constante: Tfac (0)=1
Para los casos recurrentes:
© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software
Consideraciones sobre la eficiencia
de un programa (i)
O(1) ‑ complejidad es constante.
O(log n) ‑ complejidad es logarítmica.
O(n) ‑ complejidad es lineal.
O(n*log n) ‑ Nótese que todos los
logaritmos (en cualquier base) son del
mismo O
O(n2) ‑ Complejidad cuadrática.
O(n3) ‑ Complejidad cubica.
© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software
Consideraciones sobre la eficiencia
de un programa (ii)
O(nk) ‑ En este caso general hablaremos de
complejidad polinómica.
O(kn) - complejidad exponencial
O(n!) - complejidad factorial
O(nn)
© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software
Lo importante es el
comportamiento asintótico
Tiempos empleados para el cálculo de
algoritmos con distintos ordenes,
considerando que el computador en
cuestión ejecuta 1 Millón de operaciones
por segundo (1MHz).
© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software
Medidas del comportamiento
asintótico
© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software
Jerarquía de órdenes de frecuente
aparición
© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software