Algoritmo. Algoritmo Algoritmo Al-Khowarizmi nunca pensó que su nombre, seria el origen de palabras mas importantes que el mismo: Álgebra. Logaritmo.

Slides:



Advertisements
Presentaciones similares
ALGORITMO Un algoritmo es un conjunto finito de instrucciones o pasos que sirven para ejecutar una tarea y resolver un problema. De un modo más formal,
Advertisements

Complejidad Computacional
Complejidad Computacional
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Nuestro reto es educar al pensamiento, para que razone de acuerdo a ciertas reglas; con ello podremos ser más eficientes al momento en que ordenamos.
CARRERA: INGENIERIA CIVIL UNI-RUACS
Razonamiento algorítmico
LÓGICA DE PROGRAMACIÓN
¿Cómo hacer para que una máquina comprenda el LN?
¿ Que es la complejidad de un algoritmo ?
Resolución de Problemas Algoritmos y Programación
Técnico en programación de Software
Representación en espacio de estado
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE INGENIERIA DIVISIÓN DE INGENIERÍA ELÉCTRICA COMPUTACIÓN PARA INGENIEROS NOTA IMPORTANTE: Para complementar.
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Programas Son una serie o secuencia de instrucciones entendibles por los ordenadores que permiten la realización de las acciones o tareas para las que.
¿Qué es un algoritmo? “(del árabe al-Khowârizmî, sobrenombre del célebre matemático árabe Mohámed ben Musa). Conjunto ordenado y finito de operaciones.
PARADIGMA Es un esquema de pensamiento que nos lleva a concebir las cosas de una manera determinada. el término paradigma puede indicar el concepto de esquema.
METODOLOGIA DE LA PROGRAMACION
Matemáticas Discretas y Algoritmos
Conceptos Fundamentales
INTRODUCCIÓN A LA COMPUTACIÓN 12va Semana – 19va Sesión Miércoles 18 de Mayo del 2005 Juan José Montero Román
Proceso de información en la computadora
Programación II Profesor A.S. MOLINA, Carlos
ALGORITMOS.
Academia de Informática
EL PODER DE SOLVER.
Análisis de Algoritmos
Fundamentos de programación
Problemas, algoritmos y programas: Modelar: Simular o programar su solución en un computador. Algoritmos: Es un conjunto finito, y no ambiguo de etapas.
Análisis de Algoritmos
Introducción al análisis de algoritmos

Sistemas decimal, binario, octal y hexadecimal
DISEÑO DE SOFTWARE 1ª. Parte
 Fue en el año 1945 cuando el matemático Jhon Von Neumann, fascinado por las posibilidades del ENIAC, demostró que una computadora podía tener una estructura.
Fundamentos de programación Organización de una computadora.
Figure: Algoritmos Conceptos básicos. Programación: 1.Establecer una secuencia de acciones que: puedan ser ejecutadas por el procesador realicen una.
Análisis y Diseño de Algoritmos
Unidad 1: FUNDAMENTOS DE COMPUTACIÓN Y PSEUDOLENGUAJE
ALGORITMOS La palabra algoritmo se deriva de la traducción al latín de la palabra árabe alkhowarizmi, nombre de un matemático y astrónomo árabe que escribió.
Parte I. Estructuras de Datos.
Análisis de Algoritmos
Análisis de algoritmos Generalidades
Ing. Rodolfo Junior Miranda Saldaña CIP: Chimbote- 2013
Prof. Flor Narciso Departamento de Computación
Rendimiento de la CPU y sus factores
Elaboración de algoritmos usando lógica de programación
Presente un cuestionario con los aspectos mas importantes sobre los
2.1 DEFINICIONES CARACTERÍSTICAS Y SUPOSICIONES.
Metodología de la programación
“CURSO PROPEDÉUTICO PARA EL MEJORAMIENTO DEL PENSAMIENTO MATEMÁTICO”
Introducción a los TADs
* Cuando nos permite desarrollar un programa que necesitamos para tomar un conjunto de buenas prácticas para hacer eso. Esto se debe a que podemos ahorrar.
Facultad de Ciencias de la Computación - BUAP Introducción a los Algoritmos M.C. Pedro Bello López.
75.41 Algoritmos y Programación II Cátedra Ing. Patricia Calvo Complejidad algorítmica.
FUNDAMENTOS DE PROGRAMACIÓN
DETECCION DE SEÑALES BINARIAS EN RUIDO GAUSSIANO El criterio de toma de decisión fue descrito por la ecuación Un criterio muy usado para escoger el nivel.
ESTE TERMINO SE DEFINE COMO : UN PROCESO EN EL CUAL SE NOS DESCRIBE UN PROBLEMA (EN LENGUAJE NATURAL), LUEGO DE ESTO SE PLANTEAN POSIBLES RESOLUCIONES.
OPTIMIZACION DEL DESEMPEÑO DE ERROR
David A Salamanca Díaz. DEFINICIÓN  Se define como una serie de pasos organizados que describen el proceso que se debe seguir, para dar solución a un.
PROGRAMACION DE APLICACIONES EN MEMORIA DEL COMPUTADOR = ALGORITMOS Y ESTRUCTURAS DE DATOS.
Fundamentos de Programación Unidad I Conceptos Básicos.
Programación I Prof. Carolina Cols. Algoritmo es una lista bien definida, ordenada y finita de operaciones que permite hallar la solución a un problema.
Prof. Jonathan Silva Ingeniería Civil – Informática I Ingeniería Civil Informática I Clase 3 – Diseño de Programas.
Melissa Victoria Mendiola Peralta.  Los algoritmos son las series de pasos por los cuales se resuelven los problemas.
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) IV. IMPLANTACION DE ALGORITMOS.
TEMA 7 ANÁLISIS DE LOS RESULTADOS TEMA 7 ANÁLISIS DE LOS RESULTADOS.
Transcripción de la presentación:

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.

Definiciones de algoritmo 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:

Teoria de complejidad computacional 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

Introducción Antes de analizar un algoritmo, primero se debe tener claro: Modelo computacional. Dominación asintótica. 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.

1) Modelo computacional Aquel que incluye los recursos que serán usados, además de los costos que implica su uso. RAM PRAM ¿Que modelo debo usar?

Modelo RAM: Las instrucciones son ejecutadas una después de la otra, con operaciones no concurrentes. X1 X2 . . . Xn Cinta de entrada Programa . Memoria Acumulador Contador Cinta de salida y1 y2 . . . yn

Modelo PRAM: Investigar modelos para computadores paralelos. Pp ... P2 Unidad de Control Pp ... Memoria Privada P2 P1 . . . Interconexión en Red Memoria Global

. Interconnection network Memoria distribuida: 1 p - Procesadores 1 Interconnection network p - Procesadores I/O paralela . Memorias

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.

Sean g(n) = (n+1)2 y f(n) = n2 . Entonces: 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.

Lo tengo asintoticamente dominado 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.

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. El tiempo de ejecución de este algoritmo depende de cómo estén dados los datos de entrada. Si los datos de entrada ya estuviesen ordenados, entonces el algoritmo tiene un tiempo de ejecución de O(n) en el mejor caso

Al fin domino la situación Notación  Al fin domino la situació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, . . .

Entonces f(n) es (n2), haciendo c = 1/10 y n = 0, 2, 4, . . . 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: El tiempo de ejecución del algoritmo de ordenación por inserción es, en el mejor caso es (n). Para mostrar que f(n) = 3n3 + 2n2 es (n3), basta hacer c = 1. Entonces n3  3n3 + 2n2 , para n  0. Sea Entonces f(n) es (n2), haciendo c = 1/10 y n = 0, 2, 4, . . .

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  Sea f(n) = n2/3 – 2n. Dq: f(n) = (n2) Somos iguales 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).

Ejemplo: Muestre que En efecto Por definición Dividiendo por : Por tanto : se verifica para:

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 ?.

3.1 Costo de un algoritmo 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. 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.

3.2 Función de complejidad de un algoritmo 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. 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.

3.3 Tamaño de la entrada de los datos 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. 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.

3.4 Clases de comportamiento asintótico 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. 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!) 220 = 1048576 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

3.5 Jerarquía de funciones Del punto de vista asintótico esta dado por: donde  y c son constantes arbitrarias con Resultados: