Algoritmo

44

description

Algoritmo. Algoritmo. Al-Khowarizmi nunca pensó que su nombre , seria el origen de pala b ras mas importantes que el mismo: Álgebra. Logaritmo. Algoritmo. - PowerPoint PPT Presentation

Transcript of Algoritmo

Algoritmo

Al-Khowarizmi nunca pensó que su nombre, seria el origen de palabras mas importantes que el mismo:

– Álgebra.

– Logaritmo.

– Algoritmo.

Abu Ja’Far Mohammed lbn Musa al-Khowarizmi (780 - 850), astronomo y matemático arabe. Era miembro de la “Casa de la sabiduria”, el cual era una academia de cientificos en Bagdad.

El nombre al-Khowarizmi significa de la ciudad de Khowarizmi, que actualmente es llamada Khiva.

Al-Khowarizmi escribió libros de matemáticas, astronomía y geografía. El álgebra fue introducida en Europa a través de sus trabajos. La palabra álgebra proviene del arabe al-jabr, el cual es parte del título de su libro Kitab al-jabr w’al muquabala. Este libro fue traducido al latin y fue usado por mucho tiempo.

En su libro, sobre el uso de los numerales, Khowarizmi describe procedimiento para realizar las operaciones aritméticas. Los autores europeos usaron una adaptación latina de su nombre, hasta que finalmente llegaron a la palabra algoritmo.

Gracias a ese matemático árabe del siglo IX, hoy tenemos conocimiento de conceptos tan básicos.

Algoritmos y Estructuras de Datos forman el núcleo de la Ciencia de la Computación, siendo los componentes básicos de cualquier software.

Por lo tanto, aprender algoritmos es importante para que quien desee desarrollar software de calidad.

¿ Qué es el diseño de algoritmos – Un algoritmo es una entidad matemática, independiente de un lenguaje de

programación especifico, máquina o compilador.

– Diseñar algoritmos, en algún sentido, es todo acerca de la teoría matemática detrás del diseño de buenos programas.

¿ Porque se estudia diseño de algoritmos

Los algoritmos son parte del día de las personas.– Instrucciones: para el uso de medicamentos medicinales.

– Indicaciones : de cómo montar un equipo de maquinaria.

– Establecer : un recorrido desde la casa a la universidad.

Algoritmo es la sucesión de pasos ejecutables para obtener una solución para un determinado tipo de problema.

Dijkstra: Un algoritmo corresponde a una descripción de un patrón de comportamiento, expresado en términos de un conjunto finito de acciones.

– Ejecutando la operación a + b, notamos un patrón de comportamiento.

Definición: – Algoritmo es un conjunto finito de instrucciones precisas para ejecutar un

proceso computacional.

– Un algoritmo es una herramienta para resolver un problema computacional bien especificado.

Definiciones de algoritmo– El diccionario Houaiss de la lengua portuguesa, 2001:

Conjunto de reglas y procedimientos lógicos bien definidos que llevan a la solución de un problema en etapas.

– Diccionario Webster de la lengua inglesa:

Bibliografía:

Introductions to algorithms. Chapters 1, 2, 3 and 4.Thomas H. Cormen, Charles E. Leiserson and Ronald L. Rivest

Analizando algoritmos

• El análisis de un algoritmo es para predecir los recursos que este requiere.

• Recursos como:– Tiempo (complexity time).

– Memoria (complexity space).

– Comunicación (complexity communication).

• Lo mas frecuente es la complejidad de tiempo (complexity time).

• Generalmente, para un problema se analizan diversos algoritmos candidatos, esto permite identificar al mas eficiente.

• El análisis puede indicar mas de un candidato viable, pero en el proceso diversos algoritmos generalmente son descartados.

• Analizar un algoritmo simple puede ser un descubrimiento. Pues− Como el comportamiento de un algoritmo puede ser diferente para cada

entrada posible, entonces es necesario resumir el comportamiento en fórmulas fácilmente entendibles.

− Aunque, generalmente, se selecciona un solo modelo de máquina (para analizar un algoritmo); es posible enfrentarse a muchas opciones (decidir cómo expresar nuestro análisis).

¿Que modelo debo usar?

Algunos algoritmos presentan:– Complejidad de tiempo:

O(n3C), donde C denota la capacidad máxima de cada arco en la red.

O(n5).

– Complejidad de espacio: O(n2).

Análisis de algoritmos

• Antes de analizar un algoritmo, primero se debe tener claro:1) Modelo computacional.

2) Dominación asintótica.

3) Análisis de algoritmos.– Costo de un algoritmo.– Función de complejidad de un algoritmo.– Tamaño de la entrada de los datos.– Clases de comportamiento asintótico.– Jerarquía de las funciones.– Casos de complejidad.– Comparación de programas.– Técnicas para el análisis de algoritmos.

Introducción

• Aquel que incluye los recursos que serán usados, además de los costos que implica su uso.• RAM

• PRAM

1) Modelo computacional

¿Que modelo debo usar?

• Modelo RAM:– Las instrucciones son ejecutadas una después de la otra, con operaciones

no concurrentes.

X1 X2 . . . XnCinta de entrada

Programa

.

.

.Memoria

Acumulador

Contador

Cinta de salida y1 y2 . . . yn

• Modelo PRAM:– Investigar modelos para computadores paralelos.

Unidad de Control

Pp

...

Memoria Privada

P2

Memoria Privada

...

P1

Memoria Privada

.... . .

Interconexión en Red

...

Memoria Global

0

1

Interconnection network

p-1

Procesadores

I/O paralela

.

.

.

.

.

.

Memorias

Memoria distribuida:

2) Dominación asintótica

El análisis de un algoritmo cuenta con algunas operaciones elementales.

La medida de costo o medida de complejidad indica el crecimiento asintótico de la operación considerada.

Definición: Una función f(n) domina asintóticamente a otra función g(n), si existen las constantes c, m 0 tal que, para n m, se tiene

|g(n)| c.|f(n)|

– Sean g(n) = (n+1)2 y f(n) = n2 . Entonces: g(n) y f(n) se dominan asintoticamente, pues:

– |(n+1)2 | 4|n2|, para n 1.– |n2| |(n+1)2 | , para n 0.

Notación O

f(n) = O(g(n)) expresa: Que g(n) domina asintóticamente a f(n).

La notación O significa que g(n) es el límite superior para el crecimiento de f(n).

O(g(n)) = {f(n) : n constantes positivas c y n0, tal que n n0,

tenemos 0 f(n) cg(n) }

– Cualquier función lineal an + b esta en O(n2). ¿cómo?

– Mostar que 3n3 = O(n4) para un c y un n0 apropiado.

Lo tengo asintoticament

e dominado

Cuando la notación O se usa para expresar el tiempo de ejecución de un algoritmo en el peor caso, entonces estaremos definiendo el limite superior del tiempo de ejecución de tal algoritmo para todas las entradas.

Ejemplo:– Algoritmo de ordenación por inserción es en el peor caso O(n2).

Técnicamente es un abuso decir que el tiempo de ejecución del algoritmo de ordenación por inserción es O(n2), sin especificar de que caso se trata.

a) El tiempo de ejecución de este algoritmo depende de cómo estén dados los datos de entrada.

b) Si los datos de entrada ya estuviesen ordenados, entonces el algoritmo tiene un tiempo de ejecución de O(n) en el mejor caso

Notación

Especifica un límite inferior para el crecimiento de g(n).

(g(n)) = { f(n) : constantes positivas c y n0, tal que n n0,

tenemos 0 cg(n) f(n) }

– Para mostrar que f(n) = 3n3 + 2n2 es (n3), basta hacer c = 1. Entonces n3 3n3 + 2n2 , para n 0.

– f(n) es (n2), haciendo c = 1/10 y n = 0, 2, 4, . . .

Al fin domino la situación

Cuando la notación se usa para expresar el tiempo de ejecución de un algoritmo en el mejor caso, entonces estaremos definiendo el limite inferior del tiempo de ejecución de tal algoritmo para todas las entradas.

Ejemplos:1) El tiempo de ejecución del algoritmo de ordenación por inserción es, en el mejor

caso es (n).

2) Para mostrar que f(n) = 3n3 + 2n2 es (n3), basta hacer c = 1. Entonces n3 3n3 + 2n2 , para n 0.

3) Sea

Entonces f(n) es (n2), haciendo c = 1/10 y n = 0, 2, 4, . . .

0,

1,

102 nparn

nimparnnnf

n

Limites del algoritmo de ordenación por inserción

De acuerdo con las notaciones anteriores, notamos que el tiempo de ejecución del algoritmo esta entre (n) y O(n2).

Notación

(g(n)) = {f(n) :n constantes positivas c1, c2, y n0,

tal que n n0, donde 0 c1g(n) f(n) c2g(n) }

Sea f(n) = n2/3 – 2n. Dq: f(n) = (n2) Debemos obtener c1, c2 y n0 tal que:

c1n2 (1/3)n2 – 2n c2n2, n n0 . Dividiendo tenemos:

c1 1/3 – 2/n c2, n n0 .

• Lado derecho de la desigualdad es válido n 1, cuando se escoge c2 1/3.• Escogiendo c1 1/21, el lado izquierdo de la desigualdad es válido n 7.• Luego, considerando

– c1 = 1/21; c2 = 1/3; m = 7

• Tenemos que: n2/3 – 2n = (n2).

Somos iguales

Ejemplo: Muestre que 22

32

nnn

En efecto

Por definición

22

22

1 32

ncnn

nc 0nn

Dividiendo por : 2n

21

3

2

1c

nc

21

2,1 cn

141

1,7 cn

Por tanto : 22

32

nnn

se verifica para: 141

1 c 21

2 c 70 n

3) Análisis de algoritmos

Determinar las características de la performance del algoritmo.– Tiempo.– Memoria.– Ancho de banda de la comunicación.

¿Porque analizar algoritmos?– De todos los algoritmos que se tenga, elegir aquel que sea el mas eficiente

para el mismo problema.

¿Es posible obtener el mejor tiempo de ejecución para un problema razonablemente finito ?.

Determinar el menor costo para resolver problemas de una clase dada.

Cuando el Costo de un Algoritmo es igual al Menor Costo Posible, entonces el algoritmo es óptimo.

3.1 Costo de un algoritmo

Pueden existir varios algoritmos para resolver el mismo problema.

Si la misma medida de costo se aplica a diferentes algoritmos, entonces se puede compararlos y escoger el mas adecuado.

Ejemplo:– Ordenación selección.

– Ordenación inserción.

– Ordenación Quicksort.

– Ordenación HeapSort.

Para medir el costo de ejecución de un algoritmo:– Se debe definir la función de costo o función de complejidad f.

f(n) denota la medida del tiempo necesario para ejecutar un algoritmo para un problema de tamaño n.

3.2 Función de complejidad de un algoritmo

Función de complejidad de tiempo f(n):– Mide el tiempo que es necesario para ejecutar un algoritmo en un problema

de tamaño n.

– La complejidad de tiempo no representa directamente tiempo. Esta complejidad representa la cantidad de veces que una operación se ejecuta.

Función de Complejidad de Espacio f(n):– Mide la cantidad de memoria necesaria para ejecutar un algoritmo en un

problema de tamaño n.

La medida del costo de ejecución de un algoritmo depende del tamaño de la entrada de los datos.

Es común considerar el tiempo de ejecución de un algoritmo, como una función.

3.3 Tamaño de la entrada de los datos

Para algunos algoritmos, el costo de ejecución es una función de la entrada particular de los datos.

– En la función Max, el costo es uniforme sobre todos los problemas de tamaño n.

– En un algoritmo de ordenación esto no ocurre: Si los datos de entrada ya estuviesen casi ordenados, entonces el algoritmo trabaja menos.

Complejidad constante: f(n) = O(1)– El uso del algoritmo es independiente del tamaño de n.

– Las instrucciones del algoritmo son ejecutadas una cantidad fija de veces.

3.4 Clases de comportamiento asintótico

Complejidad logarítmica: f(n) = O(log n)– Se presenta, comúnmente, en algoritmos que resuelven un problema

transformándolo en problemas menores.

– El tiempo de ejecución puede ser considerado como menor que una constante grande.

Para n = 1000, log2 1000 10.

– Ejemplo: Busca binaria.

Complejidad lineal: f(n) = O(n)– Un pequeño trabajo se realiza sobre cada elemento de entrada.

– Esto es bueno para un algoritmo que tiene que procesar y/o producir n elementos de entrada y/o salida.

– Ejemplo: Busca secuencial, teste de la planaridad de un grafo.

Complejidad lineal logaritmica: f(n) = O(nlog n)– Ocurre en algoritmos que solucionan un problema dividiéndolo en

subproblemas. Luego resuelve cada subproblema y finalmente agrupa las soluciones.

– Es común en algoritmos basados en el paradigma dividir para conquistar.

– Ejemplo: Ordenación MergeSort.

Complejidad cuadrática: f(n) = O(n2)– Ocurre en algoritmos que presentan anillos (loops) uno dentro del otro.

– Es útil en algoritmos que usan datos relativamente pequeño.

– Ejemplo: Ordenación por selección e inserción.

Complejidad exponencial: f(n) = O(2n)– No son útiles del punto de vista practico.

– Se presentan cuando en la solución de los problemas se usa la fuerza bruta.

– Ejemplo: Cartero viajante.

Complejidad factorial: f(n) = O(n!)– Su comportamiento es mucho peor que el caso exponencial.

– Se presentan cuando se usa la fuerza bruta en la solución del problema.

– 20! = 2432902008176640000

220 = 1048576

Del punto de vista asintótico esta dado por:

3.5 Jerarquía de funciones

donde y c son constantes arbitrarias con

Resultados: