CC3001 Algoritmos y Estructuras de Datos - PowerPoint PPT Presentation

About This Presentation
Title:

CC3001 Algoritmos y Estructuras de Datos

Description:

CC3001 Algoritmos y Estructuras de Datos Dise o y An lisis de Algoritmos: Casos de Estudio * Subsecuencia com n m s larga Idea: intentar dividir el problema ... – PowerPoint PPT presentation

Number of Views:87
Avg rating:3.0/5.0
Slides: 50
Provided by: Prof9219
Category:

less

Transcript and Presenter's Notes

Title: CC3001 Algoritmos y Estructuras de Datos


1
CC3001Algoritmos y Estructuras de Datos
  • Diseño y Análisis de Algoritmos Casos de Estudio

2
Casos de estudio
  • Estudiaremos tres problemas
  • Subsecuencia de suma máxima
  • Subsecuencia común más larga
  • Multiplicación de matrices

3
Subsecuencia de suma máxima
  • Subsecuencia de suma máxima
  • Dados enteros A1, , An (posiblemente negativos),
    encontrar el maximo valor de
  • Si todos los números son negativos, la
    subsecuencia de suma máxima es 0

4
Subsecuencia de suma máxima
  • Ejemplo
  • Secuencia -2,11,-4,13,-5,-2
  • Respuesta 20
  • Veremos cuatro soluciones distintas para este
    problema
  • Primera solución (fuerza bruta)
  • Calcular la suma de todas las subsecuencias
  • Quedarse con la suma mayor

5
Subsecuencia de suma máxima
  • Solución 1 Fuerza bruta
  • int maxSum 0
  • for( i0 ilta.length i)
  • for( ji jlta.length j)
  • int thisSum 0
  • for (ki kltj k)
  • thisSum ak
  • if (thisSum gt maxSum)
  • maxSum thisSum

6
Subsecuencia de suma máxima
  • Tiempo O(n3)

7
Subsecuencia de suma máxima
  • Segunda solución (mejora fuerza bruta)
  • Notar que
  • Por lo tanto, el tercer ciclo for se puede
    eliminar

8
Subsecuencia de suma máxima
  • Solución 2 Mejora a fuerza bruta
  • int maxSum 0
  • for( i0 ilta.length i)
  • int thisSum 0
  • for (ji jlta.length j)
  • thisSum aj
  • if (thisSum gt maxSum)
  • maxSum thisSum

9
Subsecuencia de suma máxima
  • Tiempo O(n2)
  • Solución 3 Usando dividir para reinar
  • Idea dividir el problema en dos subproblemas del
    mismo tamaño
  • Resolver recursivamente
  • Mezclar las soluciones
  • Obtener solución final

10
Subsecuencia de suma máxima
  • Dividiendo el problema
  • Subsecuencia de suma máxima puede estar en tres
    partes
  • Primera mitad
  • Segunda mitad
  • Cruza por el medio ambas mitades

11
Subsecuencia de suma máxima
  • Dividiendo el problema
  • Ejemplo

Primera mitad Segunda mitad
4 -3 5 -2 -1 2 6 -2
12
Subsecuencia de suma máxima
  • Dividiendo el problema
  • Ejemplo
  • Suma máxima primera mitad 6

Primera mitad Segunda mitad
4 -3 5 -2 -1 2 6 -2
13
Subsecuencia de suma máxima
  • Dividiendo el problema
  • Ejemplo
  • Suma máxima segunda mitad 8

Primera mitad Segunda mitad
4 -3 5 -2 -1 2 6 -2
14
Subsecuencia de suma máxima
  • Dividiendo el problema
  • Ejemplo
  • Suma máxima incluyendo último primera mitad 4
  • Idem primer elemento segunda mitad 7
  • Total 11 (mayor que máximo en ambas mitades)

Primera mitad Segunda mitad
4 -3 5 -2 -1 2 6 -2
15
Subsecuencia de suma máxima
  • Algoritmo
  • Dividir secuencia en dos (izquierda, derecha)
  • Resolver recursivamente las mitades
  • Caso base secuencia de largo 1
  • Calcular suma máxima centro (borde izquierdo
    borde derecho)
  • Retornar maxizquierda, derecha, centro

16
Subsecuencia de suma máxima
  • Complejidad del algoritmo
  • Dos llamadas recursivas de tamaño n/2
  • Suma máxima centro O(n)
  • Ecuación de recurrencia

17
Subsecuencia de suma máxima
  • Tiempo O(n log(n))
  • Solución 4 Algoritmo eficiente
  • Observaciones
  • No es necesario conocer donde esta la mejor
    subsecuencia
  • La mejor subsecuencia no puede comenzar en un
    número negativo
  • Cualquier subsecuencia negativa no puede ser
    prefijo de la subsecuencia óptima

18
Subsecuencia de suma máxima
  • Solución 4 Algoritmo eficiente
  • Inducción (reforzada)
  • Se conoce la mejor subsecuencia entre 1 y j
  • Se conoce la mejor subsecuencia que termina en j
  • Algoritmo
  • Se almacenan ambos valores (inicialmente 0)
  • Se incrementa j en 1
  • Se actualiza mejor subsecuencia si es necesario
  • Si subsecuencia que termina en j es lt 0 se puede
    descartar, volver su valor a 0

19
Subsecuencia de suma máxima
  • Seudocódigo
  • int maxSum 0, thisSum 0
  • for( j0 jlta.length j)
  • thisSum aj
  • if (thisSum gt maxSum)
  • maxSum thisSum
  • else if (thisSum lt 0)
  • thisSum 0

20
Subsecuencia de suma máxima
  • Tiempo de la solución eficiente O(n)

21
Multiplicación de matrices
  • Problema numérico fundamental
  • A, B matrices de N x N
  • Se desea calcular C A B

22
Multiplicación de matrices
  • Algoritmo simple
  • // A, B matrices de N x N
  • int Cnew intNN
  • for( int i0 iltn i) // Inicializacion
  • for (int j0 jltn j)
  • Cij0
  • for( int i0 iltn i)
  • for (int j0 jltn j)
  • for (int k0 kltn k)
  • CijAikBkj

23
Multiplicación de matrices
  • Tiempo algoritmo simple O(N3)
  • Por largo tiempo se supuso cota W(N3)
  • En los 60, Strassen mostró como romper la
    barrera W(N3)
  • Idea del algoritmo de Strassen
  • Dividir cada matriz en cuatro cuadrantes

24
Multiplicación de matrices
  • Descomposición de ABC en cuatro cuadrantes

25
Multiplicación de matrices
  • Se realizan 8 multiplicaciones de matrices de N/2
    x N/2

26
Multiplicación de matrices
  • Tiempo O(N3)
  • Mejora disminuir número de subproblemas
  • Estrategia de Strassen

27
Multiplicación de matrices
  • Respuesta final

28
Multiplicación de matrices
  • Complejidad ahora satisface la recurrencia

29
Multiplicación de matrices
  • Detalles a considerar
  • N no es potencia de 2 (detalle menor)
  • En la práctica, algoritmo de Strassen funciona
    mejor que el algoritmo simple cuando N es
    grande
  • Numéricamente inestable
  • Sin embargo, representa un resultado interesante
    desde el punto de vista teórico

30
Subsecuencia común más larga
  • Problema comparar dos secuencias de ADN
  • ADN secuencia de moléculas llamadas bases
  • Se puede representar como un string (A, C, G, T)
  • Cómo determinar si dos secuencias son similares
  • Una es substring de la otra
  • Costo de transformar una en otra (distancia
    edición)
  • Encontrar una tercera que se parezca a ambas

31
Subsecuencia común más larga
  • Definiciones
  • Subsecuencia la secuencia con cero o más
    elementos dejados fuera
  • Formalmente
  • Z es subsecuencia de X si existe secuencia de
    índices creciente de X tal que

32
Subsecuencia común más larga
  • Definiciones
  • Z es subsecuencia común de X e Y si es
    subsecuencia de X y de Y
  • Ejemplos
  • Problema encontrar subsecuencia común más larga
    (LCS) de X e Y

33
Subsecuencia común más larga
  • Solución por fuerza bruta
  • Enumerar todas las subsecuencias de X
  • Chequear cada una si es también subsecuencia de Y
  • Guardar la subsecuencia común más larga
  • X tiene 2m subsecuencias
  • Tiempo O(2m)

34
Subsecuencia común más larga
  • Idea intentar dividir el problema
  • Definición i-ésimo prefijo de X
  • Subproblemas de LCS prefijos de X e Y

35
Subsecuencia común más larga
  • Teorema Subestructura óptima de una LCS
  • X (m) e Y (n) secuencias, Z (k) una LCS de X e Y

36
Subsecuencia común más larga
  • Teorema implica revisar uno o dos subproblemas
  • La solución del subproblema es parte de la
    solución final (óptima)
  • Nota Encontrar LCS de casos (2) y (3) del
    Teorema implica calcular LCS de Xm-1 e Yn-1
  • Muchos subproblemas comparten otros subproblemas
  • Total subproblemas distintos mn

37
Subsecuencia común más larga
  • Solución Programación dinámica
  • Definición Matriz C de m x n
  • Algoritmo llenar tabla en forma bottom-up

38
Subsecuencia común más larga
  • Implementación
  • mX.length-1 nY.length-1 // indices 1 a m,n
  • for(i1 iltm i) ci,00
  • for(j0 jltn j) c0,j0
  • for(i1 iltm i)
  • for(j1 jltn j)
  • if (XiYj)
  • ci,jci-1,j-11 bi,j\
  • else if (ci-1,jgtci,j-1)
  • ci,jci-1,j bi,j
  • else
  • ci,jci-1,j bi,j-
  • return c,b

39
Subsecuencia común más larga
  • Ejemplo
  • Para imprimir LCS
  • void LCS(b,X,i,j)
  • if (i0 j0)
  • return
  • if (bi,j\)
  • LCS(b,X,i-1,j-1)
  • print(Xi)
  • else if (bi,j)
  • LCS(b,X,i-1,j)
  • else \\ -
  • LCS(b,X,i,j-1)

40
Selección del k-ésimo
  • Selección (k-ésimo)
  • Problema dado un arreglo desordenado encontrar
    el k-ésimo del conjunto
  • Determinar mínimo o máximo O(n) (cota mínima)
  • Supongamos una especie de torneo entre elementos,
    x es el primero (máximo)
  • El segundo puede ser cualquiera de los que
    perdieron directamente con x

41
Selección del k-ésimo
  • Luego, para calcular segundo, tercero, , toman
    tiempo
  • Segundo nlog2n
  • Tercero n2log2n
  • k n(k-1)log2n
  • Esto está bien para k constante, pero para un k
    genérico (como la mediana)
  • kn/2 O(n log n)

42
Selección del k-ésimo
  • Quickselect
  • Se basa en el tipo de operaciones de quicksort
  • Se escoge pivote al azar
  • Se particiona el arreglo de acuerdo al pivote
    escogido
  • Si el pivote cae más allá de la posición k, sólo
    se ordena la parte izquierda
  • Si el pivote estaba en la posición k, lo
    encontramos de inmediato

43
Selección del k-ésimo
  • Seudocódigo
  • Quickselect(S,k)
  • Sea p en S
  • S1 x en S, x lt p
  • S2 x en S, x gt p
  • Si k lt S1 return Quickselect(S1,k)
  • Si k S11 return p
  • return Quickselect(S2, k-S1-1)

44
Selección del k-ésimo
  • Peor caso O(n2) (mala elección del pivote)
  • Caso promedio O(n)
  • En la práctica este algoritmo es muy rápido, pero
    su peor caso es pésimo
  • Uno quisiera asegurar una garantía de orden
    lineal para encontrar el k-ésimo
  • Idea buscar un pivote tal que deje fuera por lo
    menos una fracción fija del total de elementos

45
Selección del k-ésimo
  • Método de selección lineal
  • Dividir S en S/5 conjuntos (cada Si contiene 5
    elementos)
  • Obtener las medianas m1, m2,
  • Obtener pSelect(mi, (S/5)/2) (mediana de las
    medianas)

46
Selección del k-ésimo
  • Características de p
  • Mayor que la mitad de las medianas
  • Menor que la otra mitad de las medianas
  • De los grupos con medianas menores (que fueron
    obtenidas de entre 5 elementos)
  • 3 elementos son menores que p
  • De los grupos con medianas mayores
  • 3 elementos son mayores que p
  • Esto implica que 3/10 elementos son menores que p
    y que 3/10 son mayores que p

47
Selección del k-ésimo
  • El pivote p sólo puede ser mayor que el 3/10
    menor y menor que el 3/10 mayor de S
  • En el peor caso habrá que buscar recursivamente
    en un grupo con 7/10 de los elementos
  • Cálculo de mi y particiones cálculo de mediana
    de medianas recursión sobre (7/10)n restantes

48
Selección del k-ésimo
  • Suponiendo solución O(n)

49
Selección del k-ésimo
  • La elección de 5 elementos para los grupos Si se
    debe a que
  • Este número debe ser impar para obtener mediana
    exacta
  • Debe ser mayor o igual a 5 para asegurar
    linealidad del algoritmo
  • Se escoge 5 porque
  • Mediana de medianas queda muy a la mitad
  • Para números muy grandes de elementos calcular
    las medianas toma tiempo mayor
Write a Comment
User Comments (0)
About PowerShow.com