Apuntes Sobre Análisis de Algoritmos

September 20, 2022 | Author: Anonymous | Category: N/A
Share Embed Donate


Short Description

Download Apuntes Sobre Análisis de Algoritmos...

Description

 

Programación Programa ción 3

Apuntes de Teórico

Análisis de Algoritmos

Instituto de Computación, Facultad de Ingeniería, Universidad de la República

28 de agosto de 2015

 

Índice 1. Introduc Introducción ción

 

1

2. Conc Concepto eptos s básic básicos os

 

1

2.1. Contar Contar las operaciones operaciones teniendo teniendo en cuenta cuenta el costo   . . . . . . . . . . . . . . . . . 2.2. Contar Contar las operaciones operaciones sin tener tener en cuenta el costo   . . . . . . . . . . . . . . . . . 2.3. Complejida Complejidad d de un algoritmo algoritmo   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. Defin Definicion iciones es

 

4. Ejem Ejemplo: plo: Find Find

3  

5. Comportamien Comportamiento to asintótico asintótico

5  

5.1. Noción informal informal   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2. Notación Notación asint asintótic óticaa   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

iii

2 2 3

6

6 7

 

1. Intr Introdu oducc cció ión n En esta sección se desarrollará el tema de Análisis de Algoritmos. Un algoritmo es un método para resolver un problema que en particular puede utilizar una computadora para llegar a la resolución del mismo. El punto de partida es en la realidad un problema determinado, el cual se estudia y eventualmente se desarrollan posibles formas de solucionarlo. Entonces, dado un  problema particular  (y una arquitectura subyacente donde resolverlo), es necesario contar con un método preciso que lo resuelva (algoritmo). Es por tanto de interés desarrollar formas de análisis y medidas que nos permitan realizar comparaciones entre distintos algoritmos que resuelven un mismo problema y/o estimar qué tan bueno es un algoritmo particular. En particular interesa estudiar los aspectos relativos a la eficiencia de un algoritmo, es decir, aquellos aspectos que determinan un uso eficiente de los recursos. En general la medida de eficiencia de un algoritmo está basada en el  tiempo  que demora en ejecutarse y la  memoria  ocupada o que utiliza. En este curso se hará énfasis en el Tiempo de Ejecución Ejecu ción de un algoritmo. algoritmo. El Análisis de Algoritmos consiste en calcular   de antemano  cuánto tiempo puede llevar la ejecución de un  algoritmo  que resuelva un   problema problema dado  y ya que no es práctico buscar el tiempo exacto, será necesario definir una medida representativa del mismo pero que se obtenga del propio algoritmo. De esta manera se consigue desacoplar la eficiencia temporal de un algoritmo de otros aspectos arquitectónicos y de contexto que requieren de un análisis cuya dependencia pendenc ia en estas característ características icas lo conviert convierten en en un enfoque difícilm difícilment entee generaliza generalizable ble y poco práctico. El objetivo será entonces conocer la cantidad de operaciones que un algoritmo realiza a lo largo de su ejecución. Como ejemplo informal ante el  problema  de la “búsqueda de un elemento en un arreglo ordenado”, pueden considerarse dos formas diferentes de   implementar  un algoritmo que resuelva el  problema: Si se realiza una búsqueda lineal, eventualmente habrá que recorrer todo el vector para encontrar el elemento, con lo cual el “tiempo” crecerá linealmente con el largo  n del  n  del arreglo y por lo tanto la cantidad de operaciones será proporcional a n a  n.. Si se realiza una búsqueda binaria, en cada paso se busca en la “mitad” del arreglo donde el elemento puede estar, entonces resulta que la cantidad de operaciones será proporcional a  log n. Se puede concluir entonces que la segunda forma de resolver el problema es más   eficiente.

2. Conc Concep epto toss bási básicos cos El  análisis de un algoritmo  consiste en determinar la cantidad de operaciones que realiza el algoritmo. Para ello se tendrán en resta, cuentaetc. sólo ciertas operaciones simples de los algoritmos, p.e.: asignación, comparación, suma, Es importante notar que cada operación de las mencionadas tiene un costo asociado para el compilador que se utilice (como se mencionó en la introducción no es práctico tener en cuenta la máquina particular en que se ejecute). En general la cantidad de operaciones realizadas por un algoritmo depende de diversos factores, como por ejemplo Tamaño de la entrada (medida de las dimensiones de la entrada, por ejemplo, la dimensión de un vector a ordenar). Instancia particular de los datos del problema (por ejemplo, el orden de los datos de un vector de entrada). El análisis en concreto consistirá en determinar el resultado de contar el total de operaciones realizadas. Para esto habrá que valerse de herramientas matemáticas. Según el contexto y la finalidad del análisis se necesitarán distintos niveles de precisión, por lo tanto se verán tres posibles puntos de vista para el análisis: 1

 

1. Contar Contar las operaciones operaciones simples con sus costos. costos. 2. Contar Contar las operaciones operaciones simples sin tener tener en cuen cuenta ta costos. 3. Contar Contar sólo una operación operación predefinida predefinida y/o básica. básica. A continuación se verán más en detalle estas alternativas utilizando el siguiente ejemplo: 1

 

int   minim minimo o (int*   A,   int   n) {

2

 

int   min;

3 4

   

mi min n = A[ A[0] 0]; ; int   i;

5

 

for   (i=1; (i=1; i< i g  si y sólo si   ∃n0   ∈   N  tal que   ∀n  ∈   N  que cumple   n > n0   entonces 

f ((n)  > g (n). f  Algunas observaciones: Cuando utilizamos la notación anterior notamos que además de despreciar los términos de menor orden también se están despreciando las constantes multiplicativas, las cuales pueden determinar cuál de dos algoritmos de un mismo orden es mejor que otro. Es importante recalcar que para algoritmos que se comportan de manera más eficiente para entradas arbitrariamente grandes puede ocurrir que no se comporten tan bien para entradas más chicas. Cabe destacar que hay algoritmos para los cuales no tiene sentido hablar una entrada arbitrariamente grande. Por otro lado, hay varias clases de algoritmos para los cuales sí tiene sentido, como pueden ser los algoritmos de ordenación, de generación de permutaciones, etc.

8

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF