180 likes | 349 Views
UNIVERSIDADE FEDERAL DO RIO DE JANEIRO. CENTRO DE TECNOLOGIA – COPPE. PESC – ÁREA INTERDISCIPLINAR DE HCTE. PROBLEMAS NP-COMPLETO: O PROBLEMA DO CAIXEIRO VIAJANTE E APLICAÇÕES NA TEORIA DOS GRAFOS POR Daniel Felipe Neves Martins. dmartin@cos.ufrj.br.
E N D
UNIVERSIDADE FEDERAL DO RIO DE JANEIRO CENTRO DE TECNOLOGIA – COPPE PESC – ÁREA INTERDISCIPLINAR DE HCTE PROBLEMAS NP-COMPLETO: O PROBLEMA DO CAIXEIRO VIAJANTE E APLICAÇÕES NA TEORIA DOS GRAFOS POR Daniel Felipe Neves Martins dmartin@cos.ufrj.br
COMPLEXIDADE EM ALGORÍTMOS COMPUTACIONAIS ROTEIRO • Conceitos Históricos • O Conceito de Complexidade Computacional • A eficiência de algoritmos • Algoritmos P e NP • O problema do Caixeiro Viajante • Algoritmos Pseudo-Polinomiais • Conclusão
COMPLEXIDADE EM ALGORÍTMOS COMPUTACIONAIS 1. NOTAS HISTÓRICAS (a) Pioneiros em problemas NP-Completos: Steven Cook (1971) e Richard Karp (1972) (b) Garey e Johnson lançaram o primeiro livro em 1979 contendo uma série de problemas NP-Completo. (c) Principais problemas: A questão da satisfabilidade, os conjuntos independentes de vértices, Cliques, Isomorfismo de sub-grafos. (d) A terminologia atual para a questão do estudo da complexidade de algoritmos deve-se a Richard Karp. (e) O critério para considerar os algoritmos polinomiais como eficientes é anterior aos estudos de Steven Cook
COMPLEXIDADE EM ALGORÍTMOS COMPUTACIONAIS 2. O CONCEITO DE COMPLEXIDADE 2.1- A Complexidade Computacional é um ramo da Matemática Computacional que estuda a eficiência dos algoritmos. 2.2- Para medir a eficiência de um algoritmo freqüentemente usamos um tempo teórico que o programa leva para encontrar uma resposta em função dos dados de entrada. 2.3- Se a dependência do tempo com relação aos dados de entrada for polinomial, o programa é considerado rápido, pois dado um polinômio p(x) sabemos que p(x) cresce para + com x. Se, entretanto, a dependência do tempo for exponencial o programa é considerado lento.
COMPLEXIDADE EM ALGORÍTMOS COMPUTACIONAIS 3- ALGORITMOS P E NP 3.1- A classe de algoritmos P é formada pelos procedimentos para os quais existe um polinômio p(n) que limita o número de passos do processamento se este for iniciado com uma entrada de tamanho n. 3.2- Os algoritmos NP não se referem a procedimentos não polinomiais (na verdade isto é uma conjectura). A leitura correta para procedimentos NP é dizer que se referem a algoritmos "não-determinísticos-polinomiais" no tempo.
COMPLEXIDADE EM ALGORÍTMOS COMPUTACIONAIS 4- UM PROBLEMA DE COMPLEXIDADE (I) O número 4.294.967.297 é um número primo? Solução pelo crivo de Erastóstenes – Lenta – Tente ! Procurar fatorar o número – Menos lenta – Euler resolve a questão em 1732.
COMPLEXIDADE EM ALGORÍTMOS COMPUTACIONAIS 5- O QUE SÃO OS ALGORITMOS NP AFINAL ? 5.1- A classe dos problemas NP é aquela para as quais podemos verificar, em tempo polinomial, se uma possível solução é correta. 5.2- Os problemas de classe P estão contidos nos de classe NP. De fato, se um algoritmo pode ser executado em tempo polinomial e tivermos em mãos um possível candidato S à solução, é possível executar o programa, obter uma solução correta C e comparar C com S para certificar que S é de fato solução, tudo em tempo polinomial.
COMPLEXIDADE EM ALGORÍTMOS COMPUTACIONAIS 6- COMO RECONHECER SE UM ALGORITMO É OU NÃO É EFICIENTE ? 6.1 - Um algoritmo é eficiente precisamente quando sua complexidade for um polinômio no tamanho de sua entrada. 6.2- De acordo com a definição, um problema seria considerado tratável, exibindo-se algum algoritmo de complexidade polinomial que o resolvesse. 6.3- Para verificar que é intratável, há necessidade de provar que todo possível algoritmo que o resolva não possui complexidade polinomial.
COMPLEXIDADE EM ALGORÍTMOS COMPUTACIONAIS 7- CLASSIFICAÇÃO DOS PROBLEMAS • 7.1- Problema algorítmico: conjunto de dados +objetivos+instância • 7.2- Tipos: • Problema de Decisão: Existe estrutura S que satisfaça a propriedade P ? • Problema de Localização: Encontrar uma estrutura S que satisfaça uma propriedade P. • Problema de Otimização: Encontrar uma estrutura S que satisfaça critérios de otimização.
COMPLEXIDADE EM ALGORÍTMOS COMPUTACIONAIS 8- UM OUTRO PROBLEMA DE COMPLEXIDADE (II) “Suponha que um caixeiro viajante tenha de visitar n cidades diferentes, iniciando e encerrando sua viagem na primeira cidade. Suponha, também, que não importa a ordem com que as cidades são visitadas e que de cada uma delas pode-se ir diretamente a qualquer outra. O problema do caixeiro viajante consiste em descobrir a rota que torna mínima a viagem total”. O problema do Caixeiro Viajante
COMPLEXIDADE EM ALGORÍTMOS COMPUTACIONAIS • O problema do caixeiro viajante é um problema de otimização combinatória. • Como transforma-lo num problema de enumeração ? • Como determinar todas as rotas do caixeiro ? • Como saber qual delas é a menor ? SOLUÇÃO: São (n-1)! Rotas É um trabalho fácil para a máquina ?
n Rotas por segundo (n - 1)! Cálculo total 5 250 milhões 24 insignificante 10 110 milhões 362 880 0.003 seg 15 71 milhões 87 bilhões 20 min 20 53 milhões 1.2 x 1017 73 anos 25 42 milhões 6.2 x 1023 470 milhões de anos COMPLEXIDADE EM ALGORÍTMOS COMPUTACIONAIS A quantidade ( n - 1 )! cresce com uma velocidade alarmante
COMPLEXIDADE EM ALGORÍTMOS COMPUTACIONAIS • Se descobrirmos como resolver o problema do caixeiro viajante em tempo polinomial, ficaremos sendo capazes de resolver, também em tempo polinomial, uma grande quantidade de outros problemas matemáticos importantes. • Se um dia alguém provar que é impossível resolver o problema do caixeiro em tempo polinomial no número de cidades, também se terá estabelecido que uma grande quantidade de problemas importantes não tem solução prática. • Costuma-se resumir essas propriedades do problema do caixeiro dizendo que ele pertence à categoria dos problemas NP - completos.
COMPLEXIDADE EM ALGORÍTMOS COMPUTACIONAIS UMA OUTRA VISÃO DO PROBLEMA - Grafos (1)Se tivermos as cidades A, B, C e D, uma rota que o caixeiro poderia considerar é sair de A para B, dessa vai para C, e daí ba para B e então volte para A. Existem mais seis rotas possíveis ABCDA, ABDCA, ACBDA, ACDBA, ADBCA e ADCBA. ( 2) Seja um grafo G completo, tal que cada aresta e possui um peso c(e) maior ou igual a zero. Um percurso de caixeiro viajante é simplesmente um ciclo hamiltoniano (um caminho que contenha cada vértice do grafo uma vez) de G. O peso de um percurso é a soma dos pesos das arestas que o formam. Um percurso de caixeiro viajante ótimo é aquele cujo peso é mínimo. No grafo abaixo, para o caminho a, b, c, d, a o peso é 16, enquanto que um peso ótimo é a, b, d, c, a de peso 11.
d 1 2 5 c 2 4 a b 6 COMPLEXIDADE EM ALGORÍTMOS COMPUTACIONAIS UMA OUTRA VISÃO DO PROBLEMA - Grafos
COMPLEXIDADE EM ALGORÍTMOS COMPUTACIONAIS UMA OUTRA VISÃO DO PROBLEMA - Grafos NOVAS FORMULAÇÕES PARA O PROBLEMA (1) Problema de decisão: Dados: um grafo G e um inteiro k maior do que zero. Objetivo: Verificar se g possui um percurso de caixeiro viajante de peso menor ou Ou igual ao valor de k. (2) Problema de localização: Dado um grafo G e um inteiro k maior do que zero. Objetivo: Localizar em G, um percurso de caixeiro viajante, de peso menor ou igual ao valor de k. (3) Problema de otimização: Dados: Um grafo G. Objetivo: Localizar em G, um percurso de caixeiro viajante que seja ótimo.
COMPLEXIDADE EM ALGORÍTMOS COMPUTACIONAIS 9-ALGORITMOS PSEUDO-POLINOMIAIS Seja P um problema de decisão. Um algoritmo A que resolva P é dito pseudopolinomial quando a complexidade de A for polinomial no tamanho da entrada de P, supondo que esta seja codificada em unário. Aplicações: Particionamento de árvores.
COMPLEXIDADE EM ALGORÍTMOS COMPUTACIONAIS 10- CONCLUSÕES • Busca da eficiência dos algoritmos para diminuir o tempo de execução; • Existem problemas que necessitam da adoção de processos analíticos para a avaliação da eficiência do algoritmo; • A quantidade de memória de uma máquina influencia no tempo de execução de um algoritmo; • A complexidade é um indicador para a avaliação da eficiência de tempo do algoritmo; • A complexidade procura traduzir analiticamente uma expressão da eficiência de tempo no pior caso; • A maioria dos algoritmos são da classe NP; • Algoritmos que resolvem problemas de decisão são chamados pseudo-polinomiais, desde que tais problemas sejam codificados em unários.