Mpinning Gy Alg9(Conteo)

45
1 Segunda Parte: Análisis de Algoritmos Motivación La necesidad de contar los elementos de un conjunto para: comparar evaluar predecir

Transcript of Mpinning Gy Alg9(Conteo)

Page 1: Mpinning Gy Alg9(Conteo)

1

Segunda Parte:Análisis de Algoritmos

❚ Motivación ❙ La necesidad de contar los elementos de un

conjunto para:❘ comparar

❘ evaluar

❘ predecir

Page 2: Mpinning Gy Alg9(Conteo)

2

❚ Por ejemplo, una manera de comparar el costo de aplicar dos algoritmos es determinar, o al menos estimar, cuántas operaciones ejecuta cada uno de ellos al resolver un problema.

❚ Esto puede hacerse contando cierta clase de operaciones que ejecutan los algoritmos.

Page 3: Mpinning Gy Alg9(Conteo)

3

Técnicas básicas de conteo

❚ Def. Un conjunto A es finito si hay algún número natural n N tal que hay una biyección desde el conjunto {0, 1, 2, ..., n-1} al conjunto A. El entero n se llama cardinalidad de A.

❚ Principio Pigeonhole. Si A y B son conjuntos finitos con |A|= m y |B|= n, y m > n, entonces no hay una inyección de A a B

Page 4: Mpinning Gy Alg9(Conteo)

4

❚ Teorema. Sea A un conjunto finito. Entonces la cardinalidad de A es única.

❚ Teorema. Sean A y B conjuntos finitos, y supongamos que hay una biyección de A a B. Entonces |A| = |B|.

❚ Teorema (Regla de la suma). Si A y B son conjuntos disjuntos con cardinalidades m y n respectivamente, entonces |A B| = m + n.

Page 5: Mpinning Gy Alg9(Conteo)

5

❚ Teorema (Regla del producto). Si A y B son conjuntos finitos con cardinalidades m y n respectivamente, entonces |A B| = mn.

Ejemplo. Un nombre de variable en BASIC es un símbolo alfabético o un símbolo alfabético seguido por un dígito decimal. ¿Cuántos nombres de variable posibles existen en BASIC?

Page 6: Mpinning Gy Alg9(Conteo)

6

❚ Si S es el conjunto de los símbolos alfabéticos y D es el conjunto de los dígitos, hay una correspondencia uno-a-uno entre los nombres de variables y el conjunto S(SD).

❚ O sea, en BASIC hay 286 posibles nombres de variables.

Page 7: Mpinning Gy Alg9(Conteo)

7

❚ Teorema Sean A y B conjuntos finitos con cardinalidades m y n respectivamente. Hay nm funciones desde A a B, es decir,

BA = BA

❚ Corolario Si A es un conjunto finito, hay 2

A subconjuntos diferentes de A

Page 8: Mpinning Gy Alg9(Conteo)

8

Permutaciones y Combinaciones

❚ Una permutación de un subconjunto es una biyección desde el conjunto a sí mismo

❚ Es cerrado bajo la composición de funciones

❚ Teorema. Sea A un conjunto finito con n elementos. El número de permutaciones diferentes de A es n!

Page 9: Mpinning Gy Alg9(Conteo)

9

❚ Supongamos un proceso de selección en el cual cada objeto puede ser seleccionado a lo más una vez. En este caso se habla de selección sin reemplazo. La secuencia resultante de la selección sin reemplazo de r objetos de un total de n, donde r n, se llama permutación desde n objetos tomando r a la vez. Una permutación tal es una tupla del tipo <a1, a2, ..., ar> tal que cada ai es uno de los n objetos y si i j, entonces ai aj

Page 10: Mpinning Gy Alg9(Conteo)

10

❚ Teorema. El número de permutaciones desde n objetos tomando r a la vez, denotado por P(n,r), es igual a n(n-1)(n-2) ... (n-r+1):

P(n,r) =n!

(n - r)!

Ejemplo. Sea = {a, b, c, d, e}. Encuentre el número de strings en * de longitud 3 tal que ningún símbolo se use más de una vez.

Page 11: Mpinning Gy Alg9(Conteo)

11

❚ Si la selección de r objetos desde un conjunto de cardinalidad n ignora el orden en el cual los elementos se seleccionan, y si la selección es sin reemplazo, el resultado se llama combinación desde n objetos tomando r a la vez. El número de formas en que se puede hacer esta selección se llama coeficiente binomial, C(n,r). Ese valor es el número de conjuntos distintos de cardinalidad r contenidos en un conjunto de tamaño n.

Page 12: Mpinning Gy Alg9(Conteo)

12

❚ C(n,0) = 1 C(n,n) = 1

❚ C(n,r) = 0 si r<0 o r>n

❚ Teorema. Sean n, r N y r n. El número de combinaciones desde n tomando r objetos a la vez es:

nr( ) n!

=r!(n-r)!

P(n,r)=

r!C(n,r) =

Page 13: Mpinning Gy Alg9(Conteo)

13

Problema del vendedor viajero

❚ El conjunto de n ciudades puede verse como un digrafo con n nodos, usando ai,j como la distancia entre los nodos. La ruta más corta visitará cada ciudad Ci una sola vez y las únicas rutas de interés son los ciclos simples que empiezan y terminan en Ci.

❚ Hay (n-1)! rutas posibles para el vendedor viajero.

❚ Se deben listar los (n-1)! ciclos y luego evaluar la distancia total asociada a cada ciclo.

Page 14: Mpinning Gy Alg9(Conteo)

14

❚ Encontrar la distancia total para una sola ruta implica n sumas.

❚ Ya que hay (n-1)! rutas posibles, el número total de sumas es n!

❚ Supongamos que hay sólo 50 nodos (sabemos que n! es alrededor de 3 ·1064).

❚ Si un computador realiza 109 sumas por segundo, realizar todas las sumas requeridas toma algo más de 1047 años.

Page 15: Mpinning Gy Alg9(Conteo)

15

Arboles de Decisión

❚ Un árbol de decisión es un grafo en el que cada nodo está asociado a un estado y cada arista está asociada a una entrada o acción que provoca la transición.

❚ Son una forma conveniente de enumeración del conjunto de posibles caminos en un procedimiento solución.

Page 16: Mpinning Gy Alg9(Conteo)

16

❚ Cada nodo interno de un árbol de decisión corresponde a una solución parcial; cada hoja corresponde a una solución.

❚ La ejecución de un procedimiento solución corresponde a recorrer una trayectoria desde la raíz del árbol hasta una hoja. La longitud de esa trayectoria indica el número de tests necesarios para ejecutar un procedimiento.

Page 17: Mpinning Gy Alg9(Conteo)

17

❚ Ejemplo. Supongamos que tenemos 8 monedas, de las cuales se sabe que hay una falsa (y más pesada que las otras). Se nos pide encontrar la moneda falsa usando solamente una balanza para comparar los pesos de dos conjuntos de monedas.

Page 18: Mpinning Gy Alg9(Conteo)

18

{1,2,3,4,5,6,7,8} {1,2,3,4} vs {5,6,7,8}

{1,2,3,4} {1,2} vs {3,4} {5,6,7,8} {5,6} vs {7,8}

{1,2} {3,4} {5,6} {7,8}

{1} {2} {3} {4} {5} {6} {7} {8}

Page 19: Mpinning Gy Alg9(Conteo)

19

❚ El árbol anterior requiere tres “pesadas” para encontrar la moneda falsa, y no es muy eficiente.

❚ Nos interesa un procedimiento en el cual el máximo número de pasos del algoritmo sea tan pequeño como sea posible.

❚ Un procedimiento minimax, es uno que minimiza el máximo número de pasos requeridos para resolver un problema.

Page 20: Mpinning Gy Alg9(Conteo)

20

{1,2,3,4,5,6,7,8} {1,2,3} vs {6,7,8}

{1,2,3} {4,5} {6,7,8}

{8}{7}{6}{5}{}{4}{3}{2}{1}

{1} vs {3} {4} vs {5} {6} vs {8}

Page 21: Mpinning Gy Alg9(Conteo)

21

❚ La altura del árbol de decisión de un procedimiento minimax no es mayor que la altura de un árbol de decisión para cualquier algoritmo que resuelva el problema.

❚ Las técnicas básicas de conteo se pueden usar para encontrar los límites al número de pasos en la solución minimax de una tarea.

Page 22: Mpinning Gy Alg9(Conteo)

22

Comportamiento asintótico de funciones

❚ Una de las maneras de evaluar un programa es escoger un conjunto de entrada “típico” y encontrar cuán rápido resuelve un problema.

❚ Estas medidas empíricas están influenciadas tanto por el programa como por la máquina usada para implementar el algoritmo.❙ Si dos programas son comparados en

computadores diferentes, los resultados también pueden ser diferentes.

Page 23: Mpinning Gy Alg9(Conteo)

23

Suposición básica:

❚ Un programa que se ejecuta en un computador se detendrá eventualmente, resolviendo un problema que requiere sólo suficiente tiempo y memoria.

❚ Para independizar las evaluaciones de los computadores particulares, se utiliza una herramienta matemática.❙ Ello permite realizar una evaluación del costo

de la ejecución del algoritmo

Page 24: Mpinning Gy Alg9(Conteo)

24

Ejemplos de problemas❚ Encontrar el valor mayor en una

secuencia de n enteros.

❚ Sea V un vector de enteros con n diferentes valores. Ordenar los valores en V en orden ascendente.

❚ El parámetro n es una medida del tamaño del problema❙ f(n) es una medida de la complejidad

❘ espacial

❘ temporal

Page 25: Mpinning Gy Alg9(Conteo)

25

❚ Def. Sean f y g funciones de N a R. Entonces g acota asintóticamente a f, o f está asintóticamente acotada por g, si existen k 0 y m 0 tales que para todo n k, |f(n)| m · |g(n)|

❚ Def. El conjunto de todas las funciones acotadas asintóticamente por una función g, se denota por O(g), Si f O(g) se dice que f es O(g).

Page 26: Mpinning Gy Alg9(Conteo)

26

❚ Ejemplo.

❚ Sean f(n) = n y g(n) = n3.❙ f es O(g) pero g no es O(f)

❚ Sean f(n) = n y h(n) = 3n.❙ f es O(h) y h es O(f)

Page 27: Mpinning Gy Alg9(Conteo)

27

Ejemplo

❚ Sea f(n) = n.

❚ ¿Cuál es la relación entre f y las funciones siguientes?❙ f1(n) = k

❙ f2(n) = kn

❙ f3(n) = n + k

❙ f4(n) = n + 1/(n+1)

Page 28: Mpinning Gy Alg9(Conteo)

28

❚ Teorema. Considere la clase de funciones de N a R. Entonces,❙ f es O(f)❙ si f es O(g) entonces cf es O(g) para

cualquier c en R (o sea, el conjunto O(g) es cerrado bajo la multiplicación por una constante)

❙ si f y h son O(g), entonces su suma (f + h), donde (f+h)(n) = f(n) + h(n), es O(g) (o sea, el conjunto O(g) es cerrado bajo la suma de funciones)

Page 29: Mpinning Gy Alg9(Conteo)

29

Análisis de Algoritmos

❚ Cuando se debe seleccionar un algoritmo, es conveniente tener alguna idea sobre su rendimiento (y el de otros similares).

❚ El comportamiento de un algoritmo puede ser relacionado con una función, f(n), sobre la cantidad de información a ser procesada.❙ En general, a menor valor de f(n) para un n

dado, mejor es su comportamiento.

Page 30: Mpinning Gy Alg9(Conteo)

30

Factores de eficiencia

• Hay varios factores que inciden en la eficiencia de un algoritmo– Número de copias/comparaciones hechas – Número de instrucciones ejecutadas– Diferentes implementaciones sobre

diferentes máquinas– Diferentes conjuntos de entrada

• Lo más habitual es estimar la eficiencia de un algoritmo haciendo su análisis.

Page 31: Mpinning Gy Alg9(Conteo)

31

Clasificación de rendimiento

Exponencial: cuando n es el doble, el tiempo de ejecución es el cuadrado. Esto es a menudo el resultado de una solución natural de “fuerza bruta”.

2n

Cúbico: cuando n es el doble, el tiempo de ejecución aumenta 8 veces.n3

Cuadrático: cuando n es el doble, el tiempo de ejecución se cuadruplica. Esto es práctico sólo para problemas pequeños; típicamente el programa procesa todos los pares de entrada (por ejemplo, en un loop doble anidado).

n2

Cuando n sube al doble, el tiempo de ejecución es ligeramente superior al doble. Esto es común en programas que descomponen problemas en subproblemas menores, los resuelven independientemente y luego combinan las soluciones.

n log n

Lineal: el tiempo de ejecución varía de acuerdo a n. Típicamente, se realiza una pequeña cantidad de procesamiento en cada elemento.

n

Logarítmico: cuando n aumenta, también aumenta el tiempo de ejecución, pero más lentamente. Cuando n es el doble, log n aumenta una constante, pero no llega al doble sino hasta que n pasa a n2. Esto es común en programas que resuelven problemas grandes que son transformados en problemas más pequeños.

log n

Constante: el tiempo de ejecución es fijo y no depdnde de n. La mayoría de las instrucciones se ejecuta una vez o pocas veces, con independencia de la cantidad de información a ser procesada.

1

Clasificaciónf(n)

Page 32: Mpinning Gy Alg9(Conteo)

32

Eficiencia de algoritmos

Page 33: Mpinning Gy Alg9(Conteo)

33

Tiempo de Ejecución

• El tiempo de ejecución de un programa es, generalmente, alguna constante multiplicada por uno de estos términos (los anteriores), más algunos términos menores (Ej. 2n2 + n/2 )

• El comportamiento de un algoritmo típicamente se describe como proporcional a alguna función f(n)

• Las aproximaciones se expresan usando la notación O Grande: O(f(n))

Page 34: Mpinning Gy Alg9(Conteo)

34

Definición Formal

• T(n) = O(f(n)) si hay dos constantes c y n0 tales que T(n) cf(n) cuando nn0

• Nótese que la constante no es parte de la función usada para describir el comportamiento del algoritmo (es decir, no existe O(2n), sólo O(n))

• “O” Grande nos da el comportamiento del caso peor, el comportamiento promedio de un algoritmo podría ser mejor.

Page 35: Mpinning Gy Alg9(Conteo)

35

Algoritmos

• Un problema es una especificación de una relación entrada-salida.

• Un algoritmo es – un procedimiento computacional bien-definido que

toma un conjunto de valores como entrada produciendo un conjunto de valores como salida.

– una herramienta para resolver un problema computacional bien especificado.

Page 36: Mpinning Gy Alg9(Conteo)

36

Características de los Algoritmos

• Corrección– Los algoritmos se detienen con la salida correcta

para todas las instancias válidas del problema.– Prueba de corrección.

• Generalidad– Deben funcionar bien para todos los datos válidos

(por ejemplo, un algoritmo de ordenación debería trabajar bien sobre números y sobre nombres).

Page 37: Mpinning Gy Alg9(Conteo)

37

Características de los Algoritmos

• Finitud– No se ejecutan eternamente

• Eficiencia– Hacen uso eficiente de los recursos (tiempo y

espacio)

Page 38: Mpinning Gy Alg9(Conteo)

38

Características de los Algoritmos• Pseudocódigo = un lenguaje tipo-español con un vocabulario

limitado que usamos para describir algoritmos en una forma fácil de comprender.

• Ejemplo: Búsqueda Lineal

Entrada : arreglo A, clave xSalida: índice del elemento del arreglo igual a x, -1 si x no está en Afor i = 1 to length[A] if A[i] = x then return i endifendforreturn -1

Page 39: Mpinning Gy Alg9(Conteo)

39

Características de los Algoritmos

• El algoritmo de Búsqueda Lineal es...– ¿correcto?– ¿eficiente?– ¿general?– ¿finito?

Page 40: Mpinning Gy Alg9(Conteo)

40

Análisis de Algoritmos• Analizar un algoritmo = estimar los recursos que

necesita

• Tiempo– Número de pasos/operaciones ejecutadas– Cada operación tiene un costo– Es función del tamaño del problema (entrada)

• Espacio– Cantidad de espacio de almacenamiento necesario.– En general no se considera la entrada.

Page 41: Mpinning Gy Alg9(Conteo)

41

Análisis de Algoritmos

• Análisis Caso Mejor – Dado el algoritmo y la entrada de tamaño n que hace que

el algoritmo sea más rápido (comparando con todas las otras entradas posibles de tamaño n), ¿cuál es el tiempo de ejecución?

• Análisis Caso Peor– Dado el algoritmo y la entrada de tamaño n que hace que

el algoritmo sea más lento (comparando con todas las otras entradas posibles de tamaño n), ¿cuál es el tiempo de ejecución?

Page 42: Mpinning Gy Alg9(Conteo)

42

Análisis de Algoritmos

• Análisis caso promedio– Dado el algoritmo y una entrada promedio típica

de tamaño n, ¿cuál es el tiempo de ejecución?

Page 43: Mpinning Gy Alg9(Conteo)

43

Análisis de Algoritmos

SortInserción (A)

for i=2 to length(A)

item = A[i]

j = i - 1

while (j > 0 and A[j] > item)

A[j+1] = A[j]

j = j - 1

A[j+1] = item

costo veces q’ ejecuta

c1 n

c2 n-1

c3 n-1

c4 ti

c5 (ti-1)

c6 (ti-1)

c7 n-1

Page 44: Mpinning Gy Alg9(Conteo)

44

Principio de Inclusión-Exclusión

❚ Constituye una reformulación de la regla de la suma, para conjuntos que no son disjuntos

❚ Si A y B son subconjuntos finitos de algún universo U, entonces ❙ A B = A + B - A B

Page 45: Mpinning Gy Alg9(Conteo)

45

Principio de Inclusión-Exclusión

❚ Si Ai son subconjuntos de algún universo U, entonces

❙ A1 A2 ... An= Ai - Ai Aj + Ai Aj Ak+...+ (-1)n-1 A1 A2 ... An