tarea 1 viernes analisis
DESCRIPTION
analisis de algoritmosTRANSCRIPT
-
Departamento de Ingeniera Informtica y Ciencias de la Computacin
Facultad de Ingeniera
Universidad de Concepcin
Asignatura: Anlisis de algoritmos
Tarea 1
Integrantes: Pablo Flores Torres Matas Lermanda Sandoval Profesora: Mara Andrea Rodrguez Tastets Ayudante: Erick Elejalde Sierra Fecha: 20 de Abril de 2015
-
1. Considere el siguiente algoritmo donde la entrada es una matriz de n x (n + 1) de nmeros reales.
for i = 0 to n-1 do for j = i + 1 to n- 1 do for k = i to n do A[j, k]
-
public class matriz { public static void main(String[] args) { int matriz[][] = new int[3][4]; // Creamos una matriz de 3x4 como ejemplo int i, j, k, n = 3; // Inicializamos los valores de la matriz matriz[0][0] = 2; matriz[0][1] = 4; matriz[0][2] = 4; matriz[0][3] = 7; matriz[1][0] = 6; matriz[1][1] = 6; matriz[1][2] = 9; matriz[1][3] = 13; matriz[2][0] = 8; matriz[2][1] = 10; matriz[2][2] = 12; matriz[2][3] = 33; // Recorremos la matriz para verificar su configuracin inicial for (int x = 0; x < matriz.length; x++) { for (int y = 0; y < matriz[x].length; y++) { System.out.print(matriz[x][y]); } System.out.println(); } //proceso sealado en la tarea for (i = 0; i
-
Derive la complejidad del algoritmo.
Desarrollando cada for y la cantidad de veces en que se realiza cada uno podemos llegar a
la siguiente sumatoria:
S = 4*n(n-i+1)(n-i)
Extendiendo esta sumatoria se tiene:
i=0 -> 4n3 + 4n2
i=1-> 4n3 - 4n2
i=2-> 4n3 -12n2 +8n . . . i=n-1-> 8n
Por lo cual el trmino dominante es n3 y por lo tanto nuestra sumatoria S esta acotada de la
siguiente forma:
S cn3 con c R, n0 n
Lo que nos indica que en notacin Big-O la complejidad de este algoritmo es O(n3).
-
Existe alguna mejora posible al algoritmo?
Para mejorar el algoritmo cambiamos la funcin Enigma por el siguiente cdigo:
for (i = 1; i 2n-2 i=3-> 3n-3 . . . i=n-1-> n2 -2n + 1
Por lo cual el trmino dominante es n2 y por lo tanto nuestra sumatoria S esta acotada de la
siguiente forma:
S cn2 con c R, n0 n
Lo que nos indica que en notacin Big-O la complejidad de este algoritmo es O(n2). Siendo
mejor que el anterior algoritmo que tenia complejidad O(n3).
-
A continuacin se muestra el cdigo para que pueda ser probado y comprobar que realiza lo
mismo que el cdigo original.
public class matriz {
public static void main(String[] args) {
int matriz[][] = new int[3][4]; // Creamos una matriz de 3x4 como ejemplo
int i, j, k, n = 3;
// Inicializamos los valores de la matriz
matriz[0][0] = 2;
matriz[0][1] = 4;
matriz[0][2] = 4;
matriz[0][3] = 7;
matriz[1][0] = 6;
matriz[1][1] = 6;
matriz[1][2] = 9;
matriz[1][3] = 13;
matriz[2][0] = 8;
matriz[2][1] = 10;
matriz[2][2] = 12;
matriz[2][3] = 33;
// Recorremos la matriz para verificar su configuracin inicial
for (int x = 0; x < matriz.length; x++) {
for (int y = 0; y < matriz[x].length; y++) {
System.out.print(matriz[x][y]);
}
System.out.println();
}
//proceso mejorado
for (i = 1; i
-
2. Quickselect es el siguiente algoritmo simple para encontrar el k-esimo elemento ms pequeo en un conjunto desordenado S.
QuickSelect(S; k) Tome un elemento pivote p aleatoriamento de S Comparando p a cada uno de los elementos de S, divide S en dos partes: S1 = {x S : x < p} and S2 = {x S : x > p} if jS1j = k - 1 then return p if jS1j > k - 1 then return QuickSelect(S1; k) if jS1j < k - 1 then return QuickSelect(S2; k -|S1|- 1)
Determine el nmero esperado de comparaciones hechas por el QuickSelect en el
conjunto S de tamao n. Puede asumir que inicialmente k = n/2, el cual es el peor caso.
Primero que todo, por simplicidad suponemos que los nmeros del conjunto S no se repiten
y adems k |S| para conservar la correctitud del algoritmo de bsqueda.
Definimos nuestra variable aleatoria.
- X: nmero de iteraciones que realiza el algoritmo. En donde xi seala la i-sima iteracin.
Por lo tanto nuestra ecuacin para determinar la esperanza queda de la siquiente forma:
E[X] = E[ xi] = =
-
Expandiendo la sumatoria descrita anteriormente tenemos:
=
.
.
.
En donde el Si es el conjunto no seleccionado en la i-sima iteracin.
Al hacer los supuestos expuestos anteriormente y expandir la sumatoria nos damos cuenta
que es un caso muy complejo de analizar, por lo cual realizamos este intento por simplificar
el estudio del caso de las comparaciones y llegamos a buscar en internet si alguien ms
haba solucionado esta incgnita y nos encontramos con el estudio del matemtico y
experto en ciencias de la computacin Donald Knuth (1971) que demostr que Ck
n ,el
nmero medio de comparaciones necesarias para seleccionar el k-simo de entre n es:
Ckn = 2((n + 1)Hn - (n + 3 - j)Hn+1-k - (j + 2)Hk + n + 3)
El valor mximo se alcanza para k = n/2; entonces:
Ckn = 2(ln 2 + 1)n + O(n).
Lo que nos indica que el valor esperado de comparaciones para el k-simo elemento es
O(n)
Probabilidad de encontrar
el k-simo elemento en la
iteracin n
Probabilidad de no haber
encontrado el elemento
anteriormente