ANÁLISIS Y DISEÑO DE ALGORITMOS II PRÁCTICO Nº 4 – PROBLEMAS NP-COMPLETOS 1. Un coloreo de un grafo G=(V,A) es una transformación C: V → S donde S es un conjunto finito de colores tal que si (v,w) pertenece a A, luego: C(v) != C(w). Es decir, vértices adyacentes no pueden tener el mismo color. El número cromático de G (X(G)) es el número más bajo de colores necesarios para colorear G. Escriba un algoritmo que encuentre X(G). 2. Dado un conjunto C ={1,2,...,n} de n objetos de tamaños s1,s2,...,sn y una mochila de capacidad M donde s1, s2, ..., sn y M son enteros positivos, encontrar un subconjunto T perteneciente a C tal que maximice la sumatoria Si sujeto al siguiente requerimiento: Si <= M. Escriba un algoritmo que resuelva este problema. 3. Supongamos tener n tareas a ser ejecutadas una por vez. Cada tarea j i tiene un tiempo de ejecución ti, un plazo de espera di medido desde el comienzo de la ejecución, una penalidad pi por exceder el plazo de espera. Un orden específico de tareas es una permutación s de {1,2,...,n} donde js1 es la primera tarea ejecutada, j s2 la siguiente, etc. La penalidad total para un ordenamiento particular es: n P s = [if (tjs1 + ....+ tjsi ) > djsi then pjsi else 0] i=1 Se requiere encontrar un ordenamiento tal que minimice la penalidad total. Escriba un algoritmo que resuelva este problema. 4. Un viajante de comercio debe visitar una serie de ciudades. Cada ciudad está conectada con las restantes mediante rutas de longitud conocida. El problema consiste en hallar la ruta que deberá tomar para visitar todas las ciudades retornando a la ciudad de partida. Escriba un algoritmo por búsqueda local que resuelva este problema. 5. Un conjunto de programas deben ser agregados a un backup, los discos tienen todos la misma capacidad (además están vacíos). El problema consiste en determinar la mínima cantidad de diskettes necesarios para realizar los backups. 6. Problema de la suma de subconjuntos: Dado un conjunto de enteros positivos {x1, x2,... xn}, se desea encontrar un subconjunto del mismo cuya suma sea un cierto t entero positivo. Resuelva el problema con un esquema de aproximación. 7. Se tienen m procesadores idénticos y n tareas a ser ejecutadas en algún procesador. Se conoce el tiempo de ejecución de cada tarea. Se requiere encontrar una asignación de tareas a procesadores de manera de minimizar el tiempo de ejecución del total de tareas. 8. Supongamos tener M llaves y N cerraduras. Cada llave abre una o más cerraduras. Implemente un algoritmo para encontrar un conjunto mínimo de llaves que abran todas las cerraduras. 9. El vertex-cover de un grafo no orientado G = (V, A) es un subconjunto V’ V tal que, (u, v) A entonces u V’ o v V’ (o ambos). El tamaño del vertex-cover es el número de vértices. Implemente un algoritmo para encontrar el vertex-cover de mínimo tamaño.