• No se han encontrado resultados

Algoritmos y problemas

N/A
N/A
Protected

Academic year: 2021

Share "Algoritmos y problemas"

Copied!
71
0
0

Texto completo

(1)

Análisis de Algoritmos

Algoritmos y problemas

Dra. Elisa Schaeffer [email protected]

PISIS / FIME / UANL

(2)

Problema

= un

conjunto

(posiblemente infinita) de

instancias

junto con una

pregunta

sobre alguna propiedad de las

instancias

Formalmente:

= conjunto de instancias al cual corresponde un conjunto de soluciones, junto con una relación que asocia para

cada instancia del problema un subconjunto de soluciones (posiblemente vacío)

(3)

Clasificación de problemas

Problemas de

decisi´on

: la respuesta es “sí“ o “no”

(4)

Clasificación de problemas

Problemas de

decisi´on

: la respuesta es “sí“ o “no” Problemas de

optimizaci´on

: la pregunta es del tipo

“cuál es el mejor valor posible” o

“con qué configuración se obtiene el mejor valor posible”

(5)

Problema de decisión

La tarea es decidir

s´ı o no

la relación entre instancias y soluciones asigna un

subconjunto vac´ıo

a una dada instancia.

(6)

Problema de decisión

La tarea es decidir

s´ı o no

la relación entre instancias y soluciones asigna un

subconjunto vac´ıo

a una dada instancia.

Si existen soluciones, la respuesta a la pregunta del

problema es “si”, y si el subconjunto es vacío, la respuesta es “no”.

(7)

Problema de optimización

Para problemas de optimización, la instancia está compuesta por

un conjunto de

configuraciones

, un conjunto de

restricciones

, y

una

funci´on objetivo

que asigna un valor (real) a cada instancia.

(8)

Problema de optimización

Para problemas de optimización, la instancia está compuesta por

un conjunto de

configuraciones

, un conjunto de

restricciones

, y

una

funci´on objetivo

que asigna un valor (real) a cada instancia.

(9)

Solucion óptima

La tarea es identificar cuál de las configuraciones

factibles

a tiene el

mejor

valor de la función objetivo.

Depende del problema si el mejor valor es el

mayor

(problema de maximización) o el

menor

(problema de

minimización).

La configuración factible con el mejor valor se llama la

soluci´on ´optima

de la instancia.

ao sea, las que cumplen con todas las restricciones

(10)

Algoritmo

= un

proceso formal

para

encontrar la respuesta

correcta a la pregunta de un problema

para una

(11)

Algoritmo

= un

proceso formal

para

encontrar la respuesta

correcta a la pregunta de un problema

para una

instancia dada

de un cierto problema

¿Cómo encontrar un nombre en la guía telefónica? ¿Cómo llegar de mi casa a mí oficina?

¿Cómo determinar si un dado número es un número primo?

(12)

No es uno solo

Para un problema, por lo general existen

varios

algoritmos con diferente nivel de

eficiencia

.

Es decir, diferentes algoritmos pueden tener diferentes

tiempos de ejecuci´on

con la misma instancia del problema.

(13)

Notación

(I) Un conjunto E de las

entradas

del algoritmo, que

representan las instancias del problema y

(II) Un conjunto S de las

salidas

, que son los posibles

resultados de la ejecución del algoritmo.

La salida del un

algoritmo determinista

depende únicamente de la entrada:

f : E → S.

Existen también algoritmos

probabilistas

o aleatorizados donde es así.

(14)

Instrucciones

Los algoritmos se escribe como sucesiones de

instrucciones

que

procesan

la entrada ρ ∈ E para

producir el resultado

ξ ∈ S.

Cada instrucción es una

operaci´on simple

, produce un resultado intermedio único y es posible ejecutar con

(15)

Ejecución

La sucesión S de instrucciones tiene que ser

finita

y

∀ρ ∈ E, si P está ejecutada con la entrada ρ, el resultado de la computación será f(ρ) ∈ S.

Sería altamente deseable que para todo ρ ∈ E, la

ejecución de S terminará después de un

tiempo finito

.

(16)

Pseudocódigo

Los algoritmos se implementa como

programas de

(17)

Pseudocódigo

Los algoritmos se implementa como

programas de

c´omputo

en diferentes lenguajes de programación.

El mismo algoritmo se puede implementar en diferentes lenguajes y para diferentes plataformas computacionales.

(18)

Pseudocódigo

Los algoritmos se implementa como

programas de

c´omputo

en diferentes lenguajes de programación.

El mismo algoritmo se puede implementar en diferentes lenguajes y para diferentes plataformas computacionales. En este curso, los ejemplos siguen las estructuras básicas de

programaci´on procedural

, en pseudocódigo

(19)

Algoritmo recursivo

= un algoritmo donde una parte del algoritmo o el

algoritmo completo

utiliza a si mismo como subrutina

En muchos casos es más fácil entender la función de un algoritmo recursivo y también demostrar que funcione correctamente.

Un algoritmo que en vez de llamarse a si mismo

repite en

una manera c´ıclica

el mismo código se dice iterativo.

(20)

Conversión

En muchos casos, el pseudocódigo de un algoritmo

recursivo resulta más corto que el pseudocógido de un algoritmo parecido pero iterativo para el mismo problema.

Cada algoritmo recursivo puede ser convertido a

un algoritmo iterativo

(aunque no viceversa), aunque típicamente

hace da ˜no a la eficiencia

del algoritmo

hacer tal conversión.

Depende del problema cuál manera es más eficiente: recursiva o iterativa.

(21)

Palíndromo

= una sola palabra de puras letrasa que se lee igual hacia adelante que hacia atrás

Ejemplo: “reconocer”

aen espa˜nol, t´ıpicamente se ignora los acutes

(22)

Algoritmo recursivo

procedimiento rpal(palabra P = 12 . . . ℓn1n) si n 1 devuelve verdadero ; si1 = 2 devuelve rpal(23 . . . ℓn2ℓn 1); en otro caso devuelve falso ;

(23)

Algoritmo iterativo

procedimiento ipal(palabra P = 12 . . . ℓn1n) i = 1; j = n; mientras i < j sii 6= j devuelve falso ; en otro caso i := i + 1; j := j − 1; devuelve verdadero ; Algoritmos y problemas– p. 17

(24)

Calidad de algoritmos

Las dos medidas más importantes de la calidad de un algoritmo son

(I) el

tiempo total de computaci´on

, medido por el

número de operaciones de cómputo realizadas durante la ejecución del algoritmo, y

(II) la

cantidad de memoria

utilizada.

(25)

Máquina modelo

Para

eliminar el efecto

de haber usado una cierta computadora o un cierto lenguaje de programación:

Imaginamos que el algoritmo se ejecuta en una

m´aquina

“modelo” virtual tipo R

AM (inglés: random access

machine).

Una máquina RAM no tiene límite de memoria ni límite de

precisión de representación de números enteros o reales.

(26)

Operación básica

Para poder contar las operaciones que ejecuta un

algoritmo, hay que definir

cu´ales

operaciones se cualifican como operaciones

b´asicas

:

operaciones simples

aritm´eticas

(+, , ·, /,

(27)

Operación básica

Para poder contar las operaciones que ejecuta un

algoritmo, hay que definir

cu´ales

operaciones se cualifican como operaciones

b´asicas

:

operaciones simples

aritm´eticas

(+, , ·, /,

m´od , . . .),

operaciones simples

l´ogicas

(, , ¬, , ),

(28)

Operación básica

Para poder contar las operaciones que ejecuta un

algoritmo, hay que definir

cu´ales

operaciones se cualifican como operaciones

b´asicas

:

operaciones simples

aritm´eticas

(+, , ·, /,

m´od , . . .),

operaciones simples

l´ogicas

(, , ¬, , ),

comparaciones

simples de variables (<, >,=, 6=, , ),

(29)

Operación básica

Para poder contar las operaciones que ejecuta un

algoritmo, hay que definir

cu´ales

operaciones se cualifican como operaciones

b´asicas

:

operaciones simples

aritm´eticas

(+, , ·, /,

m´od , . . .),

operaciones simples

l´ogicas

(, , ¬, , ),

comparaciones

simples de variables (<, >,=, 6=, , ),

asignaciones

de variables (:=),

(30)

Operación básica

Para poder contar las operaciones que ejecuta un

algoritmo, hay que definir

cu´ales

operaciones se cualifican como operaciones

b´asicas

:

operaciones simples

aritm´eticas

(+, , ·, /,

m´od , . . .),

operaciones simples

l´ogicas

(, , ¬, , ),

comparaciones

simples de variables (<, >,=, 6=, , ),

(31)

Tamaño de la instancia

Para un cierto problema computacional, existen

típicamente varias si no una cantidad infinita de instancias.

(32)

Tamaño de la instancia

Para un cierto problema computacional, existen

típicamente varias si no una cantidad infinita de instancias. Para definir el tamaño de una dicha instancia, hay que fijar cuál será la

unidad b´asica

de tal cálculo.

(33)

Tamaño de la instancia

Para un cierto problema computacional, existen

típicamente varias si no una cantidad infinita de instancias. Para definir el tamaño de una dicha instancia, hay que fijar cuál será la

unidad b´asica

de tal cálculo.

Típicamente se utiliza la cantidad de

bits, bytes,

variables enteras

, etcétera que se necesita ocupar para representar el problema en su totalidad en la memoria de una computadora.

(34)

Ejemplos

Para un algoritmo de

ordenar una lista de n ´umeros

, el tamaño de la instancia es la

cantidad de n ´umeros

que tiene como entrada.

(35)

Ejemplos

Para un algoritmo de

ordenar una lista de n ´umeros

, el tamaño de la instancia es la

cantidad de n ´umeros

que tiene como entrada.

Si la instancia es un

grafo

, su tamaño es bien capturado en la suma

n

+ 2m

, como ninguno de los dos números sólo puede capturar el tamaño de la instancia

completamente.

(36)

Comparabilidad

Incluso se fijamos el

tama ˜no

de la instancia, todavía hay variaciones en la cantidad de tiempo requerido para la

ejecución del algoritmo por otras propiedades

(37)

Comparabilidad

Incluso se fijamos el

tama ˜no

de la instancia, todavía hay variaciones en la cantidad de tiempo requerido para la

ejecución del algoritmo por otras propiedades

estructurales de la instancia con respeto al problema.

Por ejemplo, es más difícil ordenar la lista [3, 5, 2, 9, 1] que ordenar la lista [1, 3, 5, 6, 7], como la segunda ya está

ordenada.

(38)

Comparabilidad

Incluso se fijamos el

tama ˜no

de la instancia, todavía hay variaciones en la cantidad de tiempo requerido para la

ejecución del algoritmo por otras propiedades

estructurales de la instancia con respeto al problema.

Por ejemplo, es más difícil ordenar la lista [3, 5, 2, 9, 1] que ordenar la lista [1, 3, 5, 6, 7], como la segunda ya está

ordenada.

Lo que queremos nosotros es una caracterización de la

(39)

Comparabilidad

Incluso se fijamos el

tama ˜no

de la instancia, todavía hay variaciones en la cantidad de tiempo requerido para la

ejecución del algoritmo por otras propiedades

estructurales de la instancia con respeto al problema.

Por ejemplo, es más difícil ordenar la lista [3, 5, 2, 9, 1] que ordenar la lista [1, 3, 5, 6, 7], como la segunda ya está

ordenada.

Lo que queremos nosotros es una caracterización de la

calidad de un algoritmo

que nos facilita hacer

comparaciones

entre algoritmos en general, no para una sola instancia.

Las soluciones incluyen el uso del

peor caso

,

caso

(40)

Función del peor caso

Formamos una función de complejidad

f : Z+ Z+

tal que para un valor n, el valor f(n) representa el número de operaciones básicas para

el m´as dif´ıcil

de todas las instancias de tamaño n.

(41)

Función del peor caso

Formamos una función de complejidad

f : Z+ Z+

tal que para un valor n, el valor f(n) representa el número de operaciones básicas para

el m´as dif´ıcil

de todas las instancias de tamaño n.

La única dificultad es

identificar o construir

esa peor instancia.

(42)

Función del caso promedio

Formamos una función de complejidad

f : Z+ R

tal que para un valor n, el valor f(n) representa el número

promedio de operaciones básicas sobre todas las

(43)

Función del caso promedio

Formamos una función de complejidad

f : Z+ R

tal que para un valor n, el valor f(n) representa el número

promedio de operaciones básicas sobre todas las

instancias de tamaño n.

Posible dificultad: la

estimaci´on de la distribuci´on

de probabilidad.

(44)

Función del caso promedio

Formamos una función de complejidad

f : Z+ R

tal que para un valor n, el valor f(n) representa el número

promedio de operaciones básicas sobre todas las

instancias de tamaño n.

Posible dificultad: la

estimaci´on de la distribuci´on

de probabilidad.

(45)

Depedencias

En algunos casos, es posible que el tiempo de ejecución de un algoritmo

depende

de las ejecuciones anteriores. Este ocurre cuando uno procesa una sucesión de

instancias con algún tipo de dependencia entre ellas.

En tal caso, las funciones de peor caso y caso promedio pueden resultar pesimistas.

(46)

Complejidad amortizada

La

complejidad amortizada

evalua la eficiencia de un algoritmo en ejecuciones dependientes:

(47)

Complejidad amortizada

La

complejidad amortizada

evalua la eficiencia de un algoritmo en ejecuciones dependientes:

Ejecutamos el algoritmo varias veces en secuencia con diferentes instancias.

(48)

Complejidad amortizada

La

complejidad amortizada

evalua la eficiencia de un algoritmo en ejecuciones dependientes:

Ejecutamos el algoritmo varias veces en secuencia con diferentes instancias.

Ordenamos las instancias de la peor manera posible (para consumir más recursos).

(49)

Complejidad amortizada

La

complejidad amortizada

evalua la eficiencia de un algoritmo en ejecuciones dependientes:

Ejecutamos el algoritmo varias veces en secuencia con diferentes instancias.

Ordenamos las instancias de la peor manera posible (para consumir más recursos).

Calculamos el tiempo total de ejecución.

(50)

Complejidad amortizada

La

complejidad amortizada

evalua la eficiencia de un algoritmo en ejecuciones dependientes:

Ejecutamos el algoritmo varias veces en secuencia con diferentes instancias.

Ordenamos las instancias de la peor manera posible (para consumir más recursos).

(51)

Complejidad amortizada

La

complejidad amortizada

evalua la eficiencia de un algoritmo en ejecuciones dependientes:

Ejecutamos el algoritmo varias veces en secuencia con diferentes instancias.

Ordenamos las instancias de la peor manera posible (para consumir más recursos).

Calculamos el tiempo total de ejecución.

Dividimos el total por el número de instancias. En muchos casos, esto no es demasiado laboroso.

(52)

Consumo de memoria

Igual como el tiempo de ejecución, el

consumo de

memoria

es una medida importante en la evaluación de calidad de algoritmos.

El caso peor de consumo de memoria es la cantidad de unidades de memoria que el algoritmo tendrá que ocupar simultaneamente en el peor caso imaginable.

Se define el caso promedio y el caso amortizado igual como con el tiempo de ejecución.

(53)

Clases de magnitud

La meta del análisis de algoritmos es

evaluar la calidad

de un algoritmo en comparaci´on con otros

algoritmos

o en comparación a la complejidad del problema o alguna cota de complejidad conocida.

Típicamente el conteo de “pasos de computación”

falta

precisi´on

en el sentido que no es claro que cosas se considera operaciones básicas.

Por eso normalmente se caracteriza la calidad de un algoritmo por la

clase de magnitud

de la función de complejidad y no la función exacta misma.

(54)

Efecto del tamaño de instancia

No son interesantes los tiempos de computación para instancias pequeñas, sino que instancias grandes.

Con una instancia pequeña, normalmente todos los algoritmos producen resultados rápidamente.

(55)

Crecimiento asintótica

Para funciones f : Z+ R y g : Z+ R, escribimos

f(n) ∈ O (g(n)) si c > 0 tal que |f(n)| ≤ c |g(n)| para suficientemente grandes valores de n

(56)

Crecimiento asintótica

Para funciones f : Z+ R y g : Z+ R, escribimos

f(n) ∈ O (g(n)) si c > 0 tal que |f(n)| ≤ c |g(n)| para suficientemente grandes valores de n

f(n) Ω (g(n)) si c > 0 tal que |f(x)| ≥ c|g(x)| para suficientemente grandes valores de n

(57)

Crecimiento asintótica

Para funciones f : Z+ R y g : Z+ R, escribimos

f(n) ∈ O (g(n)) si c > 0 tal que |f(n)| ≤ c |g(n)| para suficientemente grandes valores de n

f(n) Ω (g(n)) si c > 0 tal que |f(x)| ≥ c|g(x)| para suficientemente grandes valores de n

f(n) Θ (g(n)) si c, c′ > 0 tales que

c · |g(x)| ≤ |f(x)| ≤ c′ · |g(x)| para suficientemente grandes valores de n

(58)

Crecimiento asintótica

Para funciones f : Z+ R y g : Z+ R, escribimos

f(n) ∈ O (g(n)) si c > 0 tal que |f(n)| ≤ c |g(n)| para suficientemente grandes valores de n

f(n) Ω (g(n)) si c > 0 tal que |f(x)| ≥ c|g(x)| para suficientemente grandes valores de n

f(n) Θ (g(n)) si c, c′ > 0 tales que

c · |g(x)| ≤ |f(x)| ≤ c′ · |g(x)| para suficientemente grandes valores de n

(59)

Interpretación

O (f(n)) es una

cota superior asint´otica

al tiempo de ejecución

Ω (f(n)) es una

cota inferior asint´otica

Θ (f(n)) dice que las dos funciones crecen asintóticamente

iguales

El símbolo se reemplaza frecuentemente con =.

(60)

Propiedades

Las definiciones de crecimiento asintótica se generalizan para funciones de argumentos múltiples y son transitivas:

(f(n) ∈ O (g(n)) g(n) ∈ O (h(n))) f(n) ∈ O (h(n)) .

(f(n) Ω (g(n)) g(n) Ω (h(n))) f(n) Ω (h(n)) Como este aplica para Ω (f(n)) y O (f(n)) los dos, aplica

(61)

Polinomios

Es fácil formar O (f(n)) de polinomios y muchas otras expresiones por observar que en una suma, el término mayor domina el crecimiento:

(f(n) ∈ O (h(n)) g(n) ∈ O (h(n))) f(n)+g(n) ∈ O (h(n))

g(n) ∈ O (f(n)) f(n) + g(n) ∈ O (f(n))

(62)

Logaritmos

Para cualquier base b > 0 y cada x > 0 tal que x R, aplica que logb(n) ∈ O (nx).

Cambiando la base de un logaritmo, llegamos a tener loga(n) = 1

logb(a) logb(n) ∈ Θ (logb n) , porque logb(a) es un constante.

Entonces no hay necesidad de marcar la base en una expresión de complejidad asintótica con logaritmos.

(63)

Funciones exponenciales

Para todo x > 1 y todo k > 0

nk ∈ O (xn)

O sea, cada polinomial crece asintóticamente más lentamente que cualquiera expresión exponencial.

(64)

Algunas funciones comunes

1 10 100 1000 10000 100000 1e+06 1e+07 f(x) = ex f(x) = 2x f(x) = x3 f(x) = x2 f(x) = x log2(x) f(x) = x f(x) = log2(x)

(65)

Eficiencia

Un algoritmo es

eficiente

si su tiempo de ejecución tiene una cota superior asintótica que es un

polinomio

.

(66)

Eficiencia

Un algoritmo es

eficiente

si su tiempo de ejecución tiene una cota superior asintótica que es un

polinomio

.

Un problema que cuenta con por lo menos un

(67)

Eficiencia

Un algoritmo es

eficiente

si su tiempo de ejecución tiene una cota superior asintótica que es un

polinomio

.

Un problema que cuenta con por lo menos un

algoritmo eficiente es un

problema polinomial

. Un problema es

intratable

si no existe ningún

algoritmo eficiente para resolverlo.

(68)

Eficiencia

Un algoritmo es

eficiente

si su tiempo de ejecución tiene una cota superior asintótica que es un

polinomio

.

Un problema que cuenta con por lo menos un

algoritmo eficiente es un

problema polinomial

. Un problema es

intratable

si no existe ningún

algoritmo eficiente para resolverlo.

(69)

Tiempos de ejecución

f(n) (→) n (↓) n nlog2 n n 2 n3 1,5n 2n n! 10 ≈ 0 ≈ 0 ≈ 0 ≈ 0 ≈ 0 ≈ 0 4 s 30 ≈ 0 ≈ 0 ≈ 0 ≈ 0 ≈ 0 18 min 1025 a 50 ≈ 0 ≈ 0 ≈ 0 ≈ 0 11 min 36 a ≈ ∞ 100 ≈ 0 ≈ 0 ≈ 0 1 s 12,892 a 1017 años ≈ ∞ 1000 ≈ 0 ≈ 0 1 s 18 min ≈ ∞ ≈ ∞ ≈ ∞ 10000 ≈ 0 ≈ 0 2 min 12 d ≈ ∞ ≈ ∞ ≈ ∞ 100000 ≈ 0 2 s 3 h 32 a ≈ ∞ ≈ ∞ ≈ ∞ 1000000 1 s 20 s 12 d 31710 a ≈ ∞ ≈ ∞ ≈ ∞ mayor a 1025 años ≈ ∞ menor a un segundo ≈ 0 Algoritmos y problemas– p. 39

(70)

Primera tarea para entregar

Ordena las funciones siguientes según su

crecimiento

asint´otico

O

(

f

i(

n

))

de la menos rápida a la más rápida:

f1 = 7n f5 = √n f2 = nn f6 = log7 n f3 = n7 f7 = 7log7 n

(71)

Segunda tarea para entregar

Examina si el grafo con esta matriz de adyacencia de aristas es

plano

:                              0 1 0 1 0 0 0 0 1 1 0 0 1 0 1 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 0 0 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 1 0 1 0 0 1 1 0 0 0 0 0 0 1 0 1 0 0 1 1 0 0 0 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 0 1 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 1 1 0 0 0 0                              Algoritmos y problemas– p. 41

Referencias

Documento similar

Entre nosotros anda un escritor de cosas de filología, paisano de Costa, que no deja de tener ingenio y garbo; pero cuyas obras tienen de todo menos de ciencia, y aun

o Si dispone en su establecimiento de alguna silla de ruedas Jazz S50 o 708D cuyo nº de serie figura en el anexo 1 de esta nota informativa, consulte la nota de aviso de la

Fuente de emisión secundaria que afecta a la estación: Combustión en sector residencial y comercial Distancia a la primera vía de tráfico: 3 metros (15 m de ancho)..

Tras establecer un programa de trabajo (en el que se fijaban pre- visiones para las reuniones que se pretendían celebrar los posteriores 10 de julio —actual papel de los

En cuarto lugar, se establecen unos medios para la actuación de re- fuerzo de la Cohesión (conducción y coordinación de las políticas eco- nómicas nacionales, políticas y acciones

La campaña ha consistido en la revisión del etiquetado e instrucciones de uso de todos los ter- mómetros digitales comunicados, así como de la documentación técnica adicional de

D) El equipamiento constitucional para la recepción de las Comisiones Reguladoras: a) La estructura de la administración nacional, b) La su- prema autoridad administrativa

PROVINCIA DE BADAJOZ. Esta provincia comprendida en su mayor parte cn la cuenca del Guadiaoa, con una pequefia seecion dentro de la del Guadalquivir, tiene una estension su- pedicial