Subido por camilarodriguezpico13

00-Algoritmos y Complejidad

Anuncio
Algoritmos y
Complejidad
Esmeide Leal
Introducción
• Números Romanos
• Antes que la numeración india fuera adoptada, muchos de los países
Europeos usaban la numeración Romana.
• ¿Como haces para hacer aritmética con números escritos en números romanos?
• ¿Qué es XLVIII + LIII
• ¿Qué es V * X ?
Introducción
• Muhammad ibn Musa al-Khwarizmi
• al-Khwarizmi (c. 780 –c. 850) fue un erudito
persa quién escribió libros de textos en cómo
hacer aritmética y álgebra usando el sistema
numérico Indio.
• Introdujo el posicionamiento de los decimales.
• Describió los pasos básicos para sumar, substraer,
multiplicar y dividir números.
• Desarrolló
reglas
básicas
del
álgebra
(al-jabr
significa restauración en árabe).
• Resolvió las raíces de polinomios cuadráticos y
calculó la raíz cuadrada y dígitos de ϖ.
• Estos textos fueron traducidos al latín in 1145 y
popularizados en Europa por Fibonacci en la 15ª
centuria.
• Al-Khwarizmi cuando se tradujo al latín fue algorithmi, y su
nombre fue usado como raíz de la palabra algoritmo en muchos
lenguajes Europeos
Introducción
• Algoritmos y Problemas
• ¿Qué es un algoritmo?
• Un algoritmo intenta resolver un problema.
• En ciencias computacional un problema es establecido como una
relación entre condiciones de entrada y salidas esperadas.
• Suma
• Entrada: N, M ϵ Z
Substracción
Entrada: N, M ϵ
Z
• Salida: N + M
Salida: N - M
• Multiplicación
• Entrada: N, M ϵ Z
• Salida: NM
División
Entrada: N, M ϵ Z
Salida: Q=N/M y R = N%M
• Esta es una secuencia de pasos que trasforman la entrada en la
salida
Introducción
• Instancias
• Una entrada a un problema que coincide con las condiciones de
entrada es llamada una instancia del problema
• Suma
• Entrada: N, M ϵ Z
• Salida: N + M
Substracción
Entrada: N, M ϵ
Salida: N - M
• Multiplicación
• Entrada: N, M ϵ Z
• Salida: NM
División
Entrada: N, M ϵ Z
Salida: Q=N/M y R = N%M
Z
• Un ejemplo de instancia de los problemas anteriores
N = 42, M = 1337
N = -35, M = 35
N = 65536, M = 1024
Introducción
• Algoritmo
• Un algoritmo es una solución a un problema
• Problemas y algoritmos son abstractos
•
•
Un problema es una abstracción y una instancia es concreción
Un algoritmo es una abstracción y un programa resolviendo una instancia es una concreción
• Un algoritmo se enuncia en pseudocódigo, un híbrido de lenguaje natural y
código.
•
•
La audiencia prevista de un algoritmo son otros seres humanos, por lo que está escrito para que
otros puedan entenderlo.
La audiencia prevista de un programa es el computador y por eso debemos hablar su lenguaje.
• El algoritmo describe los pasos que un programa debe tomar para resolver un
problema.
• Los algoritmos son medidos por dos estándares:
• Corrección: preferimos demostrar que un algoritmo es correcto mediante una
prueba formal de corrección. Cuando esto no es posible, podemos confiar en
evidencia empírica del desempeño de un algoritmo. Eficiencia: demostramos la
eficiencia de un algoritmo proporcionando un análisis de tiempo de ejecución o
un análisis de los costos de otros recursos. Los análisis de tiempo de
ejecución formales a menudo incluyen pruebas.
Analysis of Algorithms
• ¿Qué hace que un algoritmo sea bueno?
• Corrección
• Un algoritmo siempre es correcto.
• Un algoritmo de aproximación siempre está cerca de ser correcto según alguna
medida.
• Una heurística suele ser correcta, pero no en todos los casos.
• Un algoritmo aleatorio tiene una probabilidad de corrección.
• Demostramos estas propiedades con una prueba de corrección.
• Eficiencia
• Un algoritmo requiere una cierta cantidad de pasos.
• Un algoritmo utiliza cierta memoria para llevar a cabo los pasos.
• Un algoritmo puede utilizar otros recursos, como un canal de comunicación o la
aleatoriedad.
• Demostramos la eficiencia con análisis cuantitativo de recursos.
Funciones de Tiempo de
Ejecución
• La cantidad de operaciones que realiza un algoritmo generalmente
depende del tamaño de la instancia.
• Es muy común que las entradas más grandes requieran más operaciones.
• Medimos la cantidad de operaciones que realiza un algoritmo como
una función de su tamaño de entrada.
• Por ejemplo, esta función podría expresar un tiempo de ejecución
f(n) = 4n2 + 6n + 3
• Esto significa que cuando el algoritmo se ejecuta en una entrada de tamaño n,
requerirá f(n) cantidad de operaciones.
• No todas las funciones expresan un tiempo de ejecución y hay una
clase de funciones que se encuentran comúnmente en el análisis de
tiempos de ejecución.
• Las funciones de tiempo de ejecución son típicamente funciones no negativas y
no decrecientes.
Funciones de Tiempo de
Ejecución
• A continuación, se muestran algunas funciones de tiempo in orden
de crecimiento asintótico creciente.
• Logarítmico
• (loga n)d para a, d ϵ R+
• Polinomial
• nd para d ϵ R+
• Exponencial
• bn para b ϵ R+, b ≥ 1
• Mas allá
• n!
• nn
Funciones de Tiempo de
Ejecución
• A continuación, se muestran algunas funciones de tiempo in orden
de crecimiento asintótico creciente.
Forma O(x)
Nombre
-----------------------------------------O(1)
Constante
O(log x)
Logarítmico
O(x)
Lineal
O(xlog x)
xLogarítmico
O(x)
Cuadrático
O(x)
Cúbico
O(x ), m=0,1,2,3 Polinomial
O(C ), c>1
Exponencial
O(n!)
Factorial
Descargar