ESCUELA ESCUELA POLIT POLIT CNICA CNICA NACION NACIONAL AL FACULTAD DE INGENIERÍA DE SISTEMAS INGENIERÍA DE SISTEMAS INFORMÁTICOS Y DE COMPUTACIÓN
Laboratorio de: Algoritmos. Práctica No.: 7 - Segundo Bimestre Tema: Problemas P y NP Nombres: Juan Pablo Mendieta, Juan Erazo, Bryan Jarrin OBJETIVOS:
Conocer las diferencias y semejanzas existentes entre ambas clases para su discusión y análisis
Analizar el comportamiento de los algoritmos al goritmos pertenecientes a las clases P y NP
Fomentar el conocimiento de las técnicas de algoritmos para ser implementadas en problemas de la vida real.
Marco teórico: Problemas P y NP
Existen diferentes modelos que suponen que una computadora es determinista (dado el estado actual de la computadora y las variables de entrada, existe una única acción posible que la computadora puede tomar) y secuencial (realiza las acciones una después de la otra).
En estos modelos encontramos 2 clases definidas:
La clase P: son aquellos problemas de decisión que pueden ser resueltos en un tiempo
polinómico en una máquina determinista secuencial tomando en cuenta todos sus datos. La clase NP: consiste de todos aquellos problemas de decisión que pueden ser verificadas en tiempo polinómico a partir de ser alimentadas con la información apropiada, o en forma equivalente, cuya solución puede ser hallada en tiempo polinómico en una máquina no determinista.
Para la resolución de este tipo de problemas hacemos uso de la teoría de la complejidad cuya finalidad es la creación de mecanismos y herramientas capaces de describir y analizar la complejidad de un algoritmo y la de un problema en general. A esto se suma la complejidad computacional donde se toman en cuenta 2 rasgos importantes:
Tiempo: Numero de pasos base de ejecución de un algoritmo para resolver un problema Espacio: Cantidad de memoria utilizada para resolver un problema
Desarrollo de la práctica:
Los problemas aquí presentados forman parte del análisis de otros problemas previamente resueltos en el análisis del curso, así:
ESCUELA POLIT CNICA NACIONAL FACULTAD DE INGENIERÍA DE SISTEMAS INGENIERÍA DE SISTEMAS INFORMÁTICOS Y DE COMPUTACIÓN
Algoritmo sobre NP
public class Hannoi { public static void main(String[] args) { int num=0; Scanner discos= new Scanner(System.in); System.out.println("Ingrese el numero de discos: "); num = discos.nextInt(); Hannoi(num,1,2,3); }
public static void Hannoi(int n, int origen, int auxiliar, int destino){ if(n==1) System.out.println("Moviendo el disco de: " + origen + " a " + destino); else{ Hannoi(n-1, origen, destino, auxiliar); System.out.println("Moviendo el disco de: "+ origen + " a " + destino); Hannoi(n-1, auxiliar, origen, destino); } } } Algoritmo sobre P Búsqueda Secuencial
public static boolean secuencial(int[] array, int dato){ //busca el element comparando uno por uno en un bucle for(int i = 0; i < array.length; i++){ if(array[i]==dato) { System.out.println("El elemento " + dato + " esta en la posición " + (i+1) + "."); return true; / } } System.out.println("El elemento " + dato + " no existe en el arreglo."); return false; }
ESCUELA POLIT CNICA NACIONAL FACULTAD DE INGENIERÍA DE SISTEMAS INGENIERÍA DE SISTEMAS INFORMÁTICOS Y DE COMPUTACIÓN
Problema del agente viajero (código base)
int fx[15][15], crom[16][16], gen[16][16], selec[15][2], pdr[2][16], hj[2][16], select[15], cant , validar; char cityInFin, pob[15]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','0'}; void ingresar (void) { JOptionPane.showInputDialog("INGRESAR CIUDADES"); cant =(Integer)JOptionPane.showInputDialog("Ingrese la cantidad de ciudades "); int z=12; for(int i=0;i
ESCUELA POLIT CNICA NACIONAL FACULTAD DE INGENIERÍA DE SISTEMAS INGENIERÍA DE SISTEMAS INFORMÁTICOS Y DE COMPUTACIÓN
{ asig=random(cant ); for(int l=0;l=cant ) asig=0; l=-1; } } crom[i][j]=asig; } for(int i=0;i
void seleccion (int crom[16][16]) { int yendo, yendoa, a, b; for(int i=0;i
ESCUELA POLIT CNICA NACIONAL FACULTAD DE INGENIERÍA DE SISTEMAS INGENIERÍA DE SISTEMAS INFORMÁTICOS Y DE COMPUTACIÓN
void ruleta (int crom[16][16]) { int med, asig; med=cant /2; int j=selec[0][1]; for(int i=0;i
void hijos (void) { int tmp, x, l, k; int med=cant /2; int cpar=med-1; int cret=cpar*2; for(x=0;x<2;x++) for(int j=0;j=cant ) tmp=0; j=-1; }
ESCUELA POLIT CNICA NACIONAL FACULTAD DE INGENIERÍA DE SISTEMAS INGENIERÍA DE SISTEMAS INFORMÁTICOS Y DE COMPUTACIÓN
} hj[0][i]=tmp; } for(int i=1;i=cant ) tmp=0; j=-1; } } hj[1][i]=tmp; } for(int i=cret+1;i=cant ) tmp=0; j=-1; } } hj[0][i]=tmp; } for(int i=cret+1;i
Para las torres de Hanoi, NP, realizamos un análisis de complejidad [1] con los siguientes resultados: La expresión recursiva del algoritmo es la siguiente: Tn = 2Tn−1 + 1 T 0 = 0 Expansión de recurrencias: Tn = 2Tn−1 + 1 Tn= 2(2Tn−2 + 1) + 1 = 22T n−2 + 2 + 1 Tn= 2(2(2Tn−3 + 1) + 1) + 1 = 23T n−3 + 4 + 2 + 1 Tn= 2(2(2(2Tn−4 + 1) + 1) + 1) + 1 = 24T n−4 + 8 + 4 + 2 + 1 Se puede ver, por tanto, que la expresión general es:
ESCUELA POLIT CNICA NACIONAL FACULTAD DE INGENIERÍA DE SISTEMAS INGENIERÍA DE SISTEMAS INFORMÁTICOS Y DE COMPUTACIÓN
Se llega al caso base cuando el parámetro de la T es cero. Es decir, cuando n−i = 0. Despejando
la i, se obtiene i = n. Sustituyendo en la expresión obtenemos:
Viendo que T(0) = 0 y resolviendo la serie geométrica queda finalmente: Tn = 2n − 1
)
n
θ(2
Lo mismo realizamos para la búsqueda secuencial teniendo como resultado: T (n)=C1n+C 2 O(n)
Y finalmente para un problema NP completo: La cantidad de rutas posibles en una red está determinada por la ecuación: T(n)=(n-1)!
Es decir que en una red de 5 nodos la cantidad de rutas probables es igual a (5-1) = 24, y a medida que el número de nodos aumente la cantidad de rutas posibles crece factorialmente. En el caso de que el problema sea simétrico la cantidad de rutas posibles se reduce a la mitad, es decir: T(n)=( (n-1)! ) / 2
Conclusiones y recomendaciones:
Como se puede ver analizar los problemas P y NP es dar un recorrido por cada uno de los distintos algoritmos estudiados en el presente curso, pero desde el punto de vista de la complejidad para ser separados en estos 2 tipos. La diferencia entre ambas clases está en su resolución P son fácilmente solucionables en tiempo polinómico mientras que NP solo se tiene una solución en tiempo polinómico en su fase de verificación mientras que en la resolución presenta tiempos exponenciales capaces de desbordar la memoria y uso del CPU.
ESCUELA POLIT CNICA NACIONAL FACULTAD DE INGENIERÍA DE SISTEMAS INGENIERÍA DE SISTEMAS INFORMÁTICOS Y DE COMPUTACIÓN
Bibliografía
Ávila, E. R. (2010). El Correcto y Completo Desarrollo de un Algoritmo. Obtenido de https://pastranamoreno.files.wordpress.com/2010/09/algoritmos-hanoi.pdf López, B. S. (2012). PROBLEMA DEL AGENTE VIAJERO - TSP. Obtenido de Ingenieria Industrial Online: http://www.ingenieriaindustrialonline.com/herramientas-para-elingeniero-industrial/investigaci%C3%B3n-de-operaciones/problema-del-agente-viajerotsp/