Vous êtes sur la page 1sur 39

+

Diseño y Análisis de
Algoritmos
Centro de Investigación en Computación
+
Unidad 2
Bases para el análisis de algoritmos

2
+
2.1. Tratabilidad
computacional
Computational tractability

3
+ 4

Tiempo de ejecución

 Es la estimación de cuánto tiempo será necesario para que


un algoritmo encuentre la solución a un problema
 Este tiempo esta dado en términos del tamaño de la entrada

 Se considera que todos los algoritmos son de búsqueda


 Búsqueda de la solución
 Búsqueda de una propiedad
+ 5

Análisis del peor caso

 Se utiliza para obtener una cota superior del tiempo de


ejecución más largo posible para un algoritmo que tiene una
entrada de tamaño N

 Esto captura, en la práctica, la eficiencia

 Podemos definir la eficiencia como la relación entre los


recursos utilizados en un proyecto y los logros conseguidos con
el mismo
 Se entiende que la eficiencia se da cuando se utilizan menos recursos
para lograr un mismo objetivo
 O cuando se logran más objetivos con los mismos o menos recursos.

 Respecto a la eficacia, podemos definirla como el nivel de


consecución de metas y objetivos. La eficacia hace referencia a
nuestra capacidad para lograr lo que nos proponemos.
+ 6

Análisis del caso intermedio

 Se busca tener una cota del tiempo de ejecución de un


algoritmo con una entrada aleatoria de tamaño N

 Es muy difícil (si no imposible) modelar con exactitud


instancias reales con distribuciones aleatorias

 Además, un algoritmo puede tener buenos resultados con


ciertas distribuciones y muy malos resultados con otras
+ 7

Fuerza bruta

 Para muchos de los problemas existe un algoritmo natural de


búsqueda por fuerza bruta que examina cada posible
solución
 Tipicamente toma un tiempo de 2N o más para entradas de
tamaño N
 Por ejemplo, para el caso del emparejamiento estable toma N!
para conjuntos de N hombres y N mujeres
 No es aceptable en la práctica
+ 8

Tiempo polinomial

 Un algoritmo funciona en tiempo polinomial si se puede


caracterizar su tiempo de ejecición como una función
polinomial de la entrada N
 Por ejemplo, en el algoritmo PR dicha función es N2

 Un polinomio es una expresión matemática constituida por


un conjunto finito de variables y constantes (números fijos
llamados coeficientes), utilizando únicamente las
operaciones aritméticas de suma, resta y multiplicación, así
como también exponentes enteros positivos
+ 9

Tiempo polinomial

 Se dice que por definición que un algoritmo es eficiente si


corre en tiempo polinomial
 Aunque, por ejemplo, 6.02×1023 ×N20 es tecnicamente un tiempo
polinomial, sería impráctico
 En la práctica, los algoritmos que corren en tiempo polinomial
casi siempre tienen bajos coeficientes y exponentes
 El deshacerse de la barrera exponencial de la fuerza bruta
normalmente expone alguna estructura crucial del problema

 Excepciones
 Algoritmos de tiempo polinomial que tienen exponentes y/o
coeficientes muy grandes son inútiles en la práctica
 Algoritmos de tiempo exponencial, o peor, se utilizan cuando en
la práctica las instancias del peor caso son raras
+ 10

¿Porqué es importante?
+
Orden de crecimiento
asintótico

11
+ 12

Órden de crecimiento asintótico

 Se busca caracterizar el comportamiento del tiempo de


ejecución como una función f(n), donde n es el tamaño de la
entrada

 Para facilitar esta búsqueda, se establece que es suficiente con


caracterizar f(n) con un órden de crecimiento asintótico, es decir
una función g(n) que describe un límite en el comportamiento
de f(n)

 Si g(n) es un límite superior para el comportamiento de f(n) se


dice que f(n) pertenece a O(g(n)) – (f(n) es O(g(n)) )

 Si g(n) es un límite inferior para el comportamiento de f(n) se


dice que f(n) pertenece a Ω(g(n)) – (f(n) es Ω(g(n)) )

 Si g(n) es un límite estrecho para el comportamiemto de f(n) se


dice que f(n) pertenece a Θ(g(n)) – (f(n) es Θ(g(n)) )
+ 13

Límite superior (O)

 f(n) pertence a O(g(n)) si existen las constantes positivas n0 y


c tal que para toda n≥n0 tenemos que cg(n)≥f(n)
+ 14

Límite inferior (Ω)

 f(n) pertence a Ω(g(n)) si existen las constantes positivas n0 y


c tal que para toda n≥n0 tenemos que f(n)≥cg(n)
+ 15

Límite estrecho (Θ)

 f(n) pertence a Θ(g(n)) si existen las constantes positivas n0,


c1 y c2 tal que para toda n≥n0 tenemos que
0≤c1g(n)≤f(n)≤c2g(n)
+ 16

Algunas propiedades

 f(n) pertence a Θ(g(n)) si y solo si es O(g(n)) y es Ω(g(n))

 Por ejemplo:
 g(n)=32n2+17n+50
 g(n) es
 O(n2), O(n3)
 Ω(n2), Ω(n)
 Θ(n2)
 g(n) no es
 O(n)
 Ω(n3)
 Θ(n), Θ(n3)
+ 17

Otros límites

 Límite estrecho superior no asintótico


 f(n) pertenece a o(g(n)) si para todas las constantes c>0, existe
una constante n0>0, tal que 0≤f(n)≤cg(n) para todas las n≥n0

 Límite estrecho inferior no asintótico


 f(n) pertenece a ω(g(n)) si para todas las constantes c>0, existe
una constante n0>0, tal que 0≤cg(n) ≤f(n) para todas las n≥n0
+ 18

Más propiedades

 Transitividad
 Si f(n) es O(g(n)) y g(n) es O(g(h)) entonces f(n) es O(g(h))
 Si f(n) es Ω (g(n)) y g(n) es Ω (g(h)) entonces f(n) es Ω (g(h))
 Si f(n) es Θ(g(n)) y g(n) es Θ(g(h)) entonces f(n) es Θ(g(h))
 Si f(n) es o(g(n)) y g(n) es o(g(h)) entonces f(n) es o(g(h))
 Si f(n) es ω (g(n)) y g(n) es ω (g(h)) entonces f(n) es ω (g(h))

 Demostración
+ 19

Más propiedades

 Demostración
 f(n) es O(g(n)) => existen nf y cf tal que para toda n≥nf,
cfg(n)≥f(n)
 g(n) es O(h(n)) => existen ng y cg tal que para toda n≥ng,
cgh(n)≥f(n)
 Entonces, cfcg(n)≥f(n) para toda n≥max{nf,ng}
 Por lo tanto, f(n) es O(h(n))
+ 20

Más propiedades

 Reflexividad
 f(n) es O(f(n))
 Lo mismo para Θ y Ω

 Simetría
 f(n) es Θ(g(n)) si y sólo si g(n) es Θ(f(n))

 Simetría transpuesta
 f(n) es O(g(n)) si y sólo si g(n) es Ω(f(n))
 f(n) es o(g(n)) si y sólo si g(n) es ω(f(n))

 Aditividad
 Si f(n) es Θ(h(n)) y g(n) es Θ(h(n)), entonces f(n)+g(n) es Θ(h(n))
 Lo mismo para las demás
+
Compilación de tiempos de
ejecución comunes

21
+ 22

Tiempo lineal – O(n)

 El tiempo de ejecución es a lo más un factor de tiempo


constante por el tamaño de la entrada

 Ejemplo: calcular el máximo de un conjunto de números


A={a1, a2, …, an}
+ 23

Tiempo lineal – O(n)

 Combinar dos conjuntos de números ordenados A={a1, a2, …,


an} y B={b1, b2, …, bn} en un solo conjunto ordenado
+ 24

Tiempo lineal – O(n)

 La combinación de los conjuntos de números de tamaño n


toma un tiempo de O(n)

 Demostración
+ 25

Tiempo lineal – O(n)

 La combinación de los conjuntos de números de tamaño n toma un tiempo


de O(n)

 Demostración
 El conjunto A se vacía
 Mejor caso: después de n iteraciones
 todos los números en el conjunto A son menores que el primer número en el
conjunto B
 Peor caso: después de 2n iteraciones
 el primer número en el conjunto A es mayor a todos los números del conjunto B
 El conjunto B se vacía
 Mejor caso: después de 2n iteraciones
 todos los números en el conjunto A son menores que el primer número en el
conjunto B
 Peor caso: después de n iteraciones
 el primer número en el conjunto A es mayor a todos los números del conjunto B
+ 26

Tiempo logarítmico O(n log n)

 Surge en los algoritmos de dividir y vencer


 Para ordenar un conjunto de n números se realizan n log n
comparaciones
 Mergesort
 Heapsort
 Encontrar el camino en un grafo más corto desde un nodo hacia
todos los demás nodos
+ 27

Tiempo logarítmico O(n log n)


+ 28

Tiempo cuadrático O(n2)

 Enumeración de todos los pares de elementos


 Emparejamiento estable
 Simulación gravitatoria

 Encontrar el par de puntos más cercanos


 Dada una lista de puntos, encontrar los dos que se encuentran
más cerca
+ 29

Tiempo cuadrático O(n2)

 Solución de tiempo de O(n2)


+ 30

Tiempo cúbico O(n3)

 Enumeración de todos los tríos de elementos

 Determinar si n conjuntos son disjuntos


 Dados n conjuntos S1, S2, …, Sn cada cual es subconjunto de {1, 2,
…, n}, existe algún par de conjuntos que sean disjuntos?
+ 31

Tiempo cúbico O(n3)

 Solución de tiempo de O(n3)


+ 32

Tiempo polinomial O(nk)

 Conjunto independiente
 Dado un grafo, existen k nodos tales que no están unidos por una
arista?
 Solución de tiempo de O(nk)
+ 33

Tiempo polinomial O(nk)

 Dado un conjunto de n elementos, calcular los subconjuntos


de k elementos

 O(nk/k!)=O(nk)
+ 34

Clasificación de los algoritmos

 Se suele decir que el orden de complejidad de un problema


es el del mejor algoritmo que se conozca para resolverlo

 Estudios han llevado a la constatación de que existen


problemas muy difíciles, problemas que desafían la
utilización de los computadoras para resolverlos
 Clase P
 Clase NP
 Clase NP-completos
 Clase NP-difícil
+ 35

Clasificación de los algoritmos

 Clase P
 Los algoritmos de complejidad polinómica se dice que son
tratables en el sentido de que suelen ser abordables en la
práctica
 Los problemas para los que se conocen algoritmos con esta
complejidad se dice que forman la clase P.
 Aquellos problemas para los que la mejor solución que se conoce
es de complejidad superior a la polinómica, se dice que son
problemas intratables. Seria muy interesante encontrar alguna
solución polinómica (o mejor) que permitiera abordarlos.
+ 36

Clasificación de los algoritmos

 Clase NP
 Algunos de estos problemas intratables pueden caracterizarse
por el curioso hecho de que puede aplicarse un algoritmo
polinómico para comprobar si una posible solución es válida o no
 Esta característica lleva a un método de resolución no
determinista consistente en aplicar heurísticos para obtener
soluciones hipotéticas que se van desestimando (o aceptando) a
ritmo polinómico
 Los problemas de esta clase se denominan NP (la N de no-
deterministas y la P de polinómicos)
+ 37

Clasificación de los algoritmos

 Clase NP-completo
 Se conoce una amplia variedad de problemas de tipo NP, de los
cuales destacan algunos de ellos de extrema complejidad.
 Son problemas NP, y son los peores problemas posibles de clase
NP. Estos problemas se caracterizan por ser todos "iguales" en el
sentido de que si se descubriera una solución P para alguno de
ellos, esta solución sería fácilmente aplicable a todos ellos.
 Actualmente hay un premio de prestigio equivalente al Nobel
reservado para el que descubra semejante solución ... ¡y se duda
seriamente de que alguien lo consiga!
 Si se descubriera una solución para los problemas NP-completos,
esta sería aplicable a todos los problemas NP y, por tanto, la clase
NP desaparecería del mundo científico al carecerse de
problemas de ese tipo.
+ 38

Clasificación de los algoritmos

 Clase NP-difícil
 Intuitivamente estos son los problemas que son más difíciles que
los NP-completos
 Los problemas NP-hard no tienen que ser NP
+ 39

Clasificación de los algoritmos

Vous aimerez peut-être aussi