análisis de algoritmos medición empírica medición simulada medición analítica soporte...
Post on 11-Apr-2015
147 Views
Preview:
TRANSCRIPT
Medición y rendimientos de Algoritmos
Análisis de algoritmosMedición empíricaMedición simuladaMedición analítica
Soporte matemáticoNotaciones comunes (O grande)
Métodos de ordenamientos, medición de tiempos de ejecución
Medición empíricaEs un modelo de investigación científica.Lleva a cabo un experimentoLos datos empíricos son obtenidos de las
pruebas acertadas y los errores, es decir, de experiencia. Su aporte al proceso de investigación es resultado fundamentalmente de la experiencia.
Características de la medición empíricaEs un método fáctico: se ocupa de los hechos que realmente
acontecen
Se vale de la verificación empírica: no pone a prueba las hipótesis mediante el mero sentido común o el dogmatismo filosófico o religioso, sino mediante una cuidadosa contrastación por medio de la percepción.
Es autocorrectivo y progresivo. La ciencia se construye a partir de la superación gradual de sus errores. No considera sus conclusiones infalibles o finales. El método está abierto a la incorporación de nuevos conocimientos y procedimientos con el fin de asegurar un mejor acercamiento a la verdad.
Muestra: El muestreo es un parte importante del método analítico ya que si se toma mal la muestra los resultados serian erróneos o inservibles.
Clasificaciones de la medición empírica
Método Experimental:Aislando al objeto y las propiedades que estudia de
la influencia de otros factores Reproduciendo el objeto de estudio en condiciones
controladas -Modificando las condiciones bajo las cuales tiene
lugar el proceso o fenómeno que se estudia.Método de la observación científicaMétodo de la medición
Es el método empírico que se desarrolla con el objetivo de obtener información numérica acerca de una propiedad o cualidad del objeto
Se apoya en procedimientos estadísticos.
Medición simuladaLa simulación es el proceso de
diseñar un modelo de un sistema real y llevar a término experiencias con él, con la finalidad de comprender el comportamiento del sistema
• Simular, es reproducir artificialmente las relaciones entrada-salida de un sistema. Esto ocurre siempre cuando la operaciónde un sistema o la experimentación en él son imposibles,costosas, peligrosas o poco prácticas, como en el entrenamiento de personal, pilotos de aviones, para la enseñanza de la medicina,ingeniería civil (resistencia sísmica), etc.
Medición Analítica Se realiza a partir de la experimentación y el
análisis de gran número de casos para establecer leyes universales
Se descompone el todo en sus partes para estudiar en forma intensiva cada uno de sus elementos
Este método nos permite conocer más del objeto de estudio, con lo cual se puede: explicar, hacer analogías, comprender mejor su comportamiento y establecer nuevas teorías.
El análisis de la eficiencia de un algoritmo
Estudia el tiempo que tarda un algoritmo en ejecutarse
y la memoria que requiere.
Como se mideEl tiempo de ejecución se mide contando el
número de pasos del programa.
Los comentarios y las instrucciones de declaración no son pasos de programa.
Las expresiones y las instrucciones de asignación representan un paso de programa.
Si las expresiones contienen llamadas a funciones al número de pasos se le suma al número de pasos de la función.
Si la llamada a la función tiene paso de parámetros por valor hay que tener en cuenta las asignaciones a estos parámetros.
Como se midecont.
Si la función es recursiva deben considerarse también las variables locales, ya que deben ser almacenadas en la pila del sistema.
Si las expresiones manejan tipos compuestos (por ejemplo vectores) el número de pasos depende del tamaño de los datos.
Las instrucciones de iteración.La ejecución de la parte de control cuenta como el
número de pasos de la expresión que debe ser evaluada.
El numero de pasos necesarios para ejecutar el cuerpo del bucle debe multiplicarse por el número de veces que se ejecuta el bucle.
Como se midecont.
Instrucciones de selección. La ejecución de la parte de control cuenta como el número de pasos de la expresión que debe ser evaluada. Se considerarán las diversas alternativas al
contar el número de pasos total del programa.
La instrucción de retorno return cuenta como el número de pasos de la expresión que debe ser evaluada.
EjemploFunción línea contado
rfrecuencia
total pasos
float sum (float *a, const int n) {
float s = 0; 1 1 1 1
int i = 0 2 1 1 1
while (i < n) { 3 1 n+1 n+1
s +=a[i]; 4 1 n n
i++; } 5 1 n n
return; } 6 1 1 1
3n+4
Factores que afectan el tiempo de ejecución
Tamaño de los datos de entradaContenido de los datos de entradaEl código generado por el compilador y el
computador
Ejercicio:Algoritmo de ordenación por selección
1 for (int i = 1; i < n; i++){ // pmin es la posición del mínimo de a[i..n]
int pmin = i; for (int j = i+1; j < n; j++)
if (a[j] < a[pmin]) pmin = j;
intercambiar(a[i],a[pmin]);
}Ejercicio: Contar el número de pasos de
programa del algoritmo de ordenación por selección.
Respuesta En el algoritmo de ordenación por selección:
Para un vector de 10 posiciones se realizan como mucho 45 comparaciones, 45 + ? asignaciones y 9 intercambios.
Para un vector de 100 posiciones se realizan como mucho ?2 comparaciones, ?2 + 99 asignaciones y 99 intercambios.
Factor: contenido de los datos de entradaEn el algoritmo de ordenación por selección:
Si el vector está ordenado se realizan n asignaciones y n2 comparaciones,
Si el vector está completamente desordenado (ordenado en orden descendente), se realizan n asignaciones, n2 comparaciones y asignaciones y n intercambios
Analizar la eficiencia del algoritmo en el peor de los casos.
Analizar la eficiencia del algoritmo en el caso promedio: es necesario conocer el tiempo de ejecución de cada ejemplar y la frecuencia con que se presenta cada uno de ellos (su distribución de probabilidades).
Factor: el compilador y el computadorSe utiliza el criterio asintótico, esto es ignorar el efecto del
computador, ya que:Se pretende analizar la eficiencia del algoritmo de un modo
totalmente independiente de las máquinas y lenguajes existentes
Diferentes implementaciones de un algoritmo diferirán en sus tiempos de ejecución a lo sumo en una constante multiplicativa, para tamaño de los datos de entrada suficientemente grandes
Un factor constante en los tiempos de ejecución no se considera en general importante frente a una dependencia del tamaño de los datos de entrada.
3 tipos de ejemplares A la hora de analizar un algoritmo es necesario saber que pueden darse
Caso mejor: se trata de aquellos ejemplares del problema en los que el algoritmo es más eficiente; por ejemplo: multiplicar un número por cero, insertar en una lista vacía, ordenar un vector que ya está ordenado, etc. Generalmente no nos interesa.
Caso peor: se trata de aquellos ejemplares del problema en los que el algoritmo es menos eficiente (no siempre existe el caso peor). Ejemplos: insertar al final de una lista, ordenar un vector que está ordenado en orden inverso, etc. Nos interesa mucho.
Caso medio: se trata del resto de ejemplares del problema. Por ejemplo:
multiplicar dos números enteros distintos de cero, insertar en una lista que no sea el principio ni el final, ordenar un vector que no está ordenado ni en orden directo ni inverso, etc. Es el caso que más nos debería preocupar puesto que será el más habitual, sin embargo no siempre se puede calcular (habría que saber cuáles son las probabilidades de los distintos ejemplares).
La notación O-grande La notación “O grande” se utiliza para manejar la
complejidad de un algoritmo, es decir, la cota superior del tiempo de ejecución.
Ignora los factores constantes, es decir, ignora si se hace una mejor o peor
implementación del algoritmo, además de ser independiente de los datos de entrada del algoritmo. Es decir, la utilidad de aplicar esta notación a un algoritmo es encontrar un límite superior del tiempo de ejecución, es decir, el peor caso.
Tiempos1 : Tiempo de ejecución constante. Significa que la mayoría
de las instrucciones se ejecutan una vez o muy pocas.
logN : Tiempo de ejecución logarítmico. Se puede considerar como una gran constante. La base del logaritmo (en informática la más común es la base 2)
N : Tiempo de ejecución lineal. Un ejemplo sería un algoritmo que lee N números enteros y devuelve la media aritmética.
N·logN : El tiempo de ejecución es N·logN. Es común encontrarlo en algoritmos como Quick Sort y otros del estilo divide y vencerás. Si N se duplica, el tiempo de ejecución es ligeramente mayor del doble.
TiemposN2 : Tiempo de ejecución cuadrático. Suele ser habitual
cuando se tratan pares de elementos de datos, como por ejemplo un bucle anidado doble. Si N se duplica, el tiempo de ejecución aumenta cuatro veces. El peor caso de entrada del algoritmo Quick Sort se ejecuta en este tiempo.
N3 : Tiempo de ejecución cúbico. Como ejemplo se puede dar el de un bucle anidado triple. Si N se duplica, el tiempo de ejecución se multiplica por ocho.
2N : Tiempo de ejecución exponencial. No suelen ser muy útiles en la práctica por el elevadísimo tiempo de ejecución. Si N se duplica, el tiempo de ejecución se eleva al cuadrado.
Gráfica de notación O grande
Clasificar los diferentes algoritmos con la notación O grande
Insertar al inicio de una lista simple
Borrar en un arreglo ordenado
Borrar en un arreglo desordenado
Imprimir una matriz de adyacencia
Ordenamiento de burbuja.
top related