1 / 18

UNIVERSIDADE FEDERAL DO RIO DE JANEIRO

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.

anaya
Télécharger la présentation

UNIVERSIDADE FEDERAL DO RIO DE JANEIRO

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. 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

  3. 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

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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.

  9. 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.

  10. 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

  11. 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 ?

  12. 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

  13. 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.

  14. 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.

  15. d 1 2 5 c 2 4 a b 6 COMPLEXIDADE EM ALGORÍTMOS COMPUTACIONAIS UMA OUTRA VISÃO DO PROBLEMA - Grafos

  16. 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.

  17. 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.

  18. 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.

More Related