Você está na página 1de 23

Estructura de datos

Tema I. Análisis de
algoritmos

Departamento de Lenguajes y Sistemas Informáticos e Ingeniería de Software


UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Índice
 Análisis de algoritmos
 Evaluación de la memoria
 Evaluación del tiempo
 NOTACION O()
 Concepto de Notación O ()
 Ejemplos
 Propiedades de la Notación O()
 Complejidad de las sentencias de pascal
 EJEMPLOS
 Consideraciones sobre la eficiencia de un
programa
© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software
Análisis de algoritmos
 1. El algoritmo cumple la especificación
dada y funciona para cualquier posible
valor de los datos que maneje.
 2. El algoritmo es fácil de codificar y
depurar incluso por personas que no sean
el diseñador.
 3. No existe otro algoritmo que resuelva el
problema utilizando menos recursos.

© 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

Decidir cuanta memoria utiliza


nuestro programa
Estática
Variables declaradas
Dinámica
Variables dinámicas
Llamadas dinámicas

© 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

 Ejemplo 1: Algoritmo que determina la paridad de un


número restando 2 sucesivamente mientras el
resultado sea mayor que 1 para finalmente comprobar
el resultado.
El problema tendrá n DIV 2 restas (depende de n).
 Ejemplo 2: Algoritmo de suma lenta

while b>0 do begin


a:=a+1;
b:=b-1;
end;
En este caso T=T(b).

© 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

 Asignaciones, lecturas, escrituras y comparaciones: O(1)


 Secuencia {}: La suma de las complejidades de cada
instrucción.
 Selección (if/switch): La complejidad de evaluar la condición
mas el máximo entre las complejidades de las instrucciones
alternativas (en el caso del if, la instrucción del then y la
instrucción del else; en el caso del switch cada una de las
opciones).
 Bucles: La suma para cada iteración de la complejidad de las
instrucciones dentro del bucle. En cuanto al calculo del
numero de iteraciones en un repeat/while se estimara el
numero de ejecuciones correspondiente al peor caso posible.
 Llamadas a procedimientos y funciones: Se evalúa cada
cuerpo independientemente siguiendo las reglas anteriores,
salvo en el caso de los subprogramas recursivos.

© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software
Instrucciones simples

 Se considera que se ejecuta en tiempo constante:


 La evaluación de las expresiones aritméticas siempre que
los datos sean de tamaño constante así como las
comparaciones de datos simples.
 Las operaciones de asignación, lectura y escritura de
datos simples.
 Las operaciones de acceso a una componente de un
array, a un campo de un registro y a la siguiente posición
de un registro de un archivo.
 Todas estas operaciones se consideran de Θ(1).

© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software
Composición de instrucciones

 Si suponemos que las instrucciones I1e


I2poseen complejidades temporales, en el
peor de los casos de T1(n) y T2(n)
respectivamente entonces el coste de la
composición de ambas instrucciones será:

 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}

 Donde m representa las ‘m’ veces que se


incrementa i y la comprobación de si está
entre los extremos inferior y superior.
 Si el campo interior consume un tiempo
constante entonces la ecuación anterior se
escribe de la siguiente forma:

 Los bucles while y repeat no poseen una


norma general
© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software
Subprogramas

 El coste de un subprograma se deriva de las


reglas anteriores. Si el subprograma es
recursivo entonces hay que distinguir entre
los casos base y recurrentes

© 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

 Los comportamientos asintóticos de más


frecuente aparición se pueden ordenar de
menor a mayor crecimiento de la siguiente
forma:

 1<<log n<<n<<n log


n<<n2<<n3<<.....<<2n<<n!

© Paloma Centenera
UNIVERSIDAD PONTIFICIA DE SALAMANCA EN MADRID
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

Você também pode gostar