Beruflich Dokumente
Kultur Dokumente
Algoritmos y Estructuras
de Datos
Diseo y Anlisis de Algoritmos: Casos de
Estudio
Casos de estudio
Subsecuencia de suma
mxima
A
k i
Subsecuencia de suma
mxima
Ejemplo:
Secuencia: -2,11,-4,13,-5,-2
Respuesta: 20
Subsecuencia de suma
mxima
Subsecuencia de suma
mxima
Tiempo: O(n3)
n 3n 2n
1
6
i 0 j i k i
n 1 n 1
Subsecuencia de suma
mxima
Notar que
Subsecuencia de suma
mxima
Subsecuencia de suma
mxima
Tiempo: O(n2)
Solucin 3: Usando dividir para reinar
Subsecuencia de suma
mxima
Dividiendo el problema
Primera mitad
Segunda mitad
Cruza por el medio ambas mitades
10
Subsecuencia de suma
mxima
Dividiendo el problema
Ejemplo:
Primera mitad
Segunda mitad
4 -3 5 -2
-1 2 6 -2
11
Subsecuencia de suma
mxima
Dividiendo el problema
Ejemplo:
Primera mitad
Segunda mitad
4 -3 5 -2
-1 2 6 -2
12
Subsecuencia de suma
mxima
Dividiendo el problema
Ejemplo:
Primera mitad
Segunda mitad
4 -3 5 -2
-1 2 6 -2
13
Subsecuencia de suma
mxima
Dividiendo el problema
Ejemplo:
Primera mitad
Segunda mitad
4 -3 5 -2
-1 2 6 -2
Subsecuencia de suma
mxima
Algoritmo:
15
Subsecuencia de suma
mxima
16
Subsecuencia de suma
mxima
Observaciones:
17
Subsecuencia de suma
mxima
Induccin (reforzada)
Algoritmo
Subsecuencia de suma
mxima
Seudocdigo
int maxSum = 0, thisSum = 0;
for( j=0; j<a.length; j++)
{
thisSum += a[j];
if (thisSum > maxSum)
maxSum = thisSum;
else if (thisSum < 0)
thisSum = 0;
}
19
Subsecuencia de suma
mxima
20
Multiplicacin de matrices
21
Multiplicacin de matrices
Algoritmo simple:
// A, B: matrices de N x N
int[][] C=new int[N][N];
for( int i=0; i<n; i++) // Inicializacion
for (int j=0; j<n; j++)
C[i][j]=0;
for( int i=0; i<n; i++)
for (int j=0; j<n; j++)
for (int k=0; k<n; k++)
C[i][j]+=A[i][k]*B[k][j];
22
Multiplicacin de matrices
23
Multiplicacin de matrices
24
Multiplicacin de matrices
25
Multiplicacin de matrices
Tiempo: O(N3)
Mejora: disminuir nmero de subproblemas
Estrategia de Strassen:
26
Multiplicacin de matrices
Respuesta final:
27
Multiplicacin de matrices
28
Multiplicacin de matrices
Detalles a considerar:
29
Subsecuencia comn ms
larga
Subsecuencia comn ms
larga
Definiciones
31
Subsecuencia comn ms
larga
Definiciones
Z es subsecuencia comn de X e Y si es
subsecuencia de X y de Y
Ejemplos:
Subsecuencia comn ms
larga
X tiene 2m subsecuencias
Tiempo: O(2m)
33
Subsecuencia comn ms
larga
34
Subsecuencia comn ms
larga
35
Subsecuencia comn ms
larga
Subsecuencia comn ms
larga
37
Subsecuencia comn ms
larga
Implementacin:
m=X.length-1; n=Y.length-1; // indices 1 a m,n
for(i=1; i<=m; i++) c[i,0]=0;
for(j=0; j<=n; j++) c[0,j]=0;
for(i=1; i<=m; i++)
return {c,b};
38
Subsecuencia comn ms
larga
Ejemplo:
void LCS(b,X,i,j){
if (i==0 || j==0)
return;
if (b[i,j]==\){
LCS(b,X,i-1,j-1);
print(X[i]);}
else if (b[i,j]==|)
LCS(b,X,i-1,j);
else \\ -
LCS(b,X,i,j-1);
}
39
Seleccin (k-simo)
Segundo: n+log2n
Tercero: n+2log2n
k: n+(k-1)log2n
Quickselect
Seudocdigo
Quickselect(S,k)
{
Sea p en S
S1 = {x en S, x < p}
S2 = {x en S, x > p}
Si k <= |S1| return Quickselect(S1,k)
Si k = |S1|+1 return p
return Quickselect(S2, k-|S1|-1)
}
43
45
Caractersticas de p
n
7
T n n T T
n
5
10
dn 7
T n dn T n n
dn dn
5 10
d 10 T n O n
48
Se escoge 5 porque: