A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Módulo 12 4.5 Complexidade de Problemas 4.5.1 Complexidade da Ordenação 4.5.2 Problemas np-completos: o Problema do Caixeiro Viajante 4.5.3 Problemas Indecidíveis:

Apresentações semelhantes


Apresentação em tema: "Módulo 12 4.5 Complexidade de Problemas 4.5.1 Complexidade da Ordenação 4.5.2 Problemas np-completos: o Problema do Caixeiro Viajante 4.5.3 Problemas Indecidíveis:"— Transcrição da apresentação:

1 Módulo 12 4.5 Complexidade de Problemas 4.5.1 Complexidade da Ordenação 4.5.2 Problemas np-completos: o Problema do Caixeiro Viajante 4.5.3 Problemas Indecidíveis: o Problema da Correspondência de Post DCC 001 Programação de Computadores 2º Semestre de 2011 Prof. Osvaldo Carvalho 1DCC001 - 2011-2

2 Complexidade da Ordenação DCC001 - 2011-22

3 Complexidade da Ordenação O tempo necessário para ordenar um vetor é para o SelectSort para o MergeSort Existiriam algoritmos com curvas de crescimento melhores do que o MergeSort? Vamos estudar o comportamento de algoritmos de ordenação por comparação (existem outros tipos de algoritmos que, por exemplo, tiram partido das chaves serem formadas por 3 dígitos) 3DCC001 - 2011-2

4 Algoritmos de Ordenação por Comparações Algoritmos de ordenação decidem suas próximas ações a partir de comparações entre elementos do vetor de entrada Um algoritmo correto deve ser capaz de ordenar qualquer permutação de [1..n] Os diagramas dos próximos slides foram produzidos “aparelhando” algoritmos de ordenação para registro da sequência de comparações realizada submetendo todas as permutações de [1 2 3] a cada algoritmo DCC001 - 2011-24

5 Árvore de Decisões Select Sort DCC001 - 2011-25 Comparação de elementos de índices 2 e 3 no vetor original Resultado de Comparação Vetor ordenado

6 Árvore de Decisões Bolha DCC001 - 2011-26

7 Árvore de Decisões QuickSort DCC001 - 2011-27

8 Requisitos para uma Árvore de Decisões para Ordenação por Comparação DCC001 - 2011-28 ? Permutação 1 Permutação n! … Árvore de DecisõesAlgoritmoArbitrário

9 Árvores Binárias (2 filhos no máximo) DCC001 - 2011-29 Raiz “Folhas” não têm filhos

10 Profundidade em uma Árvore DCC001 - 2011-210 p=0 p=1 p=2 p=3

11 Profundidade Máxima e Número de Folhas de uma Árvore Binária DCC001 - 2011-211 p No máximo 2 p folhas

12 Profundidade Mínima Árvore de decisões para ordenar n itens têm obrigatoriamente n! folhas Sua profundidade máxima mínima deve ser tal que DCC001 - 2011-212

13 A soma dos logaritmos é a Soma de Riemann pela Esquerda de log(n) DCC001 - 2011-213

14 Complexidade Mínima para Ordenação DCC001 - 2011-214 Conclusão: A complexidade mínima para qualquer algoritmo de ordenação por comparações é O MergeSort atinge este limite

15 O Problema do Caixeiro Viajante DCC001 - 2011-215

16 O Problema do Caixeiro Viajante Um caixeiro viajante quer visitar n cidades e retornar ao ponto de partida, percorrendo a menor distância possível, sem passar duas vezes pela mesma cidade Ele conhece a distância entre duas cidades quaisquer de seu roteiro Quando não existir uma estrada entre duas cidades, atribui-se o valor infinito à distância entre elas 16DCC001 - 2011-2

17 O Problema do Candidato Como minimizar o custo de visitar, de avião, todas as capitais brasileiras, sem pousar duas vezes na mesma cidade? 17DCC001 - 2011-2

18 Um problema com 5 cidades DCC001 - 2011-218 1 2 34 5 2 3 6 4 3 7 3 3 Qual é o melhor roteiro?

19 Um Caminho DCC001 - 2011-219 1 2 34 5 2 3 6 4 3 7 3 3 Custo = 19

20 Outro Caminho DCC001 - 2011-220 1 2 34 5 2 3 6 4 3 7 3 3 Custo = 22

21 O Problema do Caixeiro Viajante DCC001 - 2011-221 1 2 34 5 2 3 6 4 3 7 3 3 Custo = 15 Caminho ótimo!

22 Um problema com 8 cidades DCC001 - 2011-222 8 7 6 5 4 3 2 1 11 9 12 9 15 10 13 4 11 5 12 9 1 15 3 6 1 12 8 14

23 Um caminho DCC001 - 2011-223 8 7 6 5 4 3 2 1 11 9 12 9 15 10 13 4 11 5 12 9 1 15 3 6 1 12 8 14 Custo = 81

24 Outro caminho (o pior) DCC001 - 2011-224 8 7 6 5 4 3 2 1 11 9 12 9 15 10 13 4 11 5 12 9 1 15 3 6 1 12 8 14 Custo = 98

25 Caminho Ótimo DCC001 - 2011-225 8 7 6 5 4 3 2 1 11 9 12 9 15 10 13 4 11 5 12 9 1 15 3 6 1 12 8 14 Custo: 64

26 Solução “Força Bruta” para o Caixeiro Viajante 1. Gerar todas as alternativas de rota = todas as permutações de cidades, excetuando a cidade de partida 2. Para cada rota, calcular seu custo total 3. Escolher a rota de menor custo 26DCC001 - 2011-2

27 O Programa CaixeiroViajante.sce Primeira Versão // Lê a matriz de distâncias // Gera todas as rotas possíveis // Calcula o custo de cada rota // Seleciona a de menor custo // Imprime o resultado 27DCC001 - 2011-2

28 Arquivo com a matriz de distâncias fscanfMat só lê números Como as distâncias são positivas, usamos -1 para representar ∞ 28DCC001 - 2011-2

29 Leitura da matriz de distâncias // Lê a matriz de distâncias Dist =... fscanfMat(uigetfile("*.txt",pwd(),"Distâncias")); // Substitui -1 por %inf Dist(Dist==-1) = %inf; Elementos de Dist onde Dist==-1 29DCC001 - 2011-2

30 Obtenção das rotas e cálculo dos custos [nl,nc] = size(Dist); //nl deve ser igual a nc Rotas = permutations(2:nc); // Calcula o custo de cada rota [NL,NC] = size(Rotas); for i = 1:NL Custo(i) = cost(Dist,[1 Rotas(i,:) 1]); end Justaposição de 1 às rotas geradas 30DCC001 - 2011-2

31 A função cost function c = cost(D,path) c = 0; for i=1:length(path)-1 c = c + D(path(i),path(i+1)); end endfunction 31DCC001 - 2011-2

32 A função permutations Cabeçalho Function p = permutations(A) // gera uma matriz p onde // cada linha é uma permutação de A endfunction 32DCC001 - 2011-2

33 Permutações Para um problema com 4 cidades, as rotas a serem examinadas são (lembrando que a cidade 1 é o início e o fim do percurso) 2. 3. 4. 2. 4. 3. 3. 2. 4. 3. 4. 2. 4. 2. 3. 4. 3. 2. 33DCC001 - 2011-2

34 Algoritmo para gerar permutações de um vetor Se o vetor é de tamanho 1, ele já é a única permutação; senão, “Separar” o primeiro elemento do vetor; Gerar todas as permutações dos elementos restantes, e concatená-las ao elemento separado Repetir este passo para os demais elementos do vetor 34DCC001 - 2011-2

35 Exemplo de Geração de Permutações Vetor = [2 3 4] Passos: Separar o elemento 2, e gerar todas as permutações de [3 4]; concatenar 2 às permutações obtidas; Separar o elemento 3, e gerar todas as permutações de [2 4]; concatenar 3 às permutações obtidas; Separar o elemento 4, e gerar todas as permutações de [2 3]; concatenar 4 às permutações obtidas; 35DCC001 - 2011-2

36 A função permutations function p = permutations(A) if length(A) == 1 then p = A; else p = []; for i = 1:length(A) B = permutations(OneOut(A,i)); [nl,nc] = size(B); for j = 1:nl p = [p ; [A(i) B(j,:)]]; end endfunction 36DCC001 - 2011-2

37 A função OneOut function b = OneOut(A,i) x = 1:length(A); b = A(x ~= i); endfunction 37DCC001 - 2011-2

38 Caixeiro Viajante Complexidade Solução “força bruta”: Gerar todas as permutações das cidades Para cada uma, calcular a distância total Escolher o roteiro com a menor distância total Problema com a força bruta: são ( n-1)! roteiros Para o exemplo com 5 cidades, são 4! = 24 possibilidades, mas Para o problema das capitais brasileiras, são 26! = ~ 4 x 10 26 possibilidades a serem examinadas! 38DCC001 - 2011-2

39 Caixeiro Viajante Complexidade Existiriam soluções melhores? Sim, mas a melhor encontrada até hoje é Isto é pior do que qualquer potência de n, ou que qualquer polinômio em n 39DCC001 - 2011-2

40 As Classes P e NP DCC001 - 2011-240

41 Comparação de funções de complexidade DCC001 - 2011-241

42 Efeito de Progressos Tecnológicos DCC001 - 2011-242

43 Problemas de Decisão Teóricos de complexidade preferem trabalhar com problemas de decisão, cuja resposta é Sim ou Não O problema de decisão associado ao Caixeiro Viajante é: Dado um conjunto de n cidades e suas distâncias, existe pelo menos uma rota com custo menor que um dado valor B? DCC001 - 2011-243

44 Satisfatibilidade (SAT) Dados: um conjunto de variáveis booleanas v1,…,vn, e um conjunto de cláusulas, que são expressões com OR destas variáveis, como v3+v7’+v10 Existe um conjunto de valores para v1,…,vn tal que o AND de todas as cláusulas tenha o valor True? DCC001 - 2011-244

45 Verificando uma Solução de um Problema de Decisão A vantagem de um problema de decisão é a possibilidade de definição de um problema associado, que somente verifica uma solução apresentada O problema de verificação pode ter complexidade menor do que o problema de decisão P.Ex, é possível verificar se uma dada rota tem custo menor que B em tempo linear DCC001 - 2011-245

46 A Classe NP de Problemas de Decisão Um problema de decisão está na classe de complexidade P : quando existe um algoritmo polinomial que o resolve; NP: quando o problema de verificação associado a ele tem complexidade polinomial, como é o caso do Caixeiro Viajante e do SAT NP não quer dizer Não Polinomial, mas sim Non-deterministic Polynomial, referindo-se a um artifício teórico utilizado para se ter o problema de verificação “resolvendo” por sorteio o problema de decisão DCC001 - 2011-246

47 Problemas NP-completos O Caixeiro Viajante e o SAT são exemplos de problemas NP-completos, Um problema Π é NP-completo quando qualquer problema da classe NP pode ser transformado em Π 47DCC001 - 2011-2

48 P = NP? Apesar dos esforços dos mais brilhantes e persistentes cientistas da computação, ninguém conseguiu provar que um problema como o SAT não pertence à classe P, apresentando um algoritmo polinomial que o resolva (ou que resolva qualquer problema NP-completo) provar (como fizemos com algoritmos de ordenação) que não existe tal algoritmo DCC001 - 2011-248

49 P = NP? Se você Provar que não existe nenhum algoritmo polinomial para qualquer problema NP-Completo, Ou Encontrar um algoritmo polinomial para um problema NP-Completo, Você terá de imediato 1 milhão de dólares, glória e fama eternas DCC001 - 2011-249

50 Problemas Indecidíveis DCC001 - 2011-250

51 O Problema de Emil Post Considere um estoque ilimitado de dominós de um número finito de tipos Todos os dominós de um tipo têm um mesmo string de 0s e 1s na parte de cima e outro na parte de baixo O problema de Post consiste em obter uma sequência de dominós tal que os strings formados pela concatenação dos strings superiores e inferiores sejam iguais 100 1 0 1 00 Tipo 1Tipo 2Tipo 3 100 1 1 1 1 0 0 0 0 1 00 1 1 1 51DCC001 - 2011-2

52 O Problema de Post 100 1 0 1 00 100 1 1 00 100 1 1 1 00 0 100 0 1001100100100 Solução com 7 dominós 52DCC001 - 2011-2

53 O Problema de Post Algoritmo força-bruta: n = 0; repita n = n+1 teste todas as sequências com n dominós até encontrar uma solução 53DCC001 - 2011-2

54 Geração de sequências n = 1 [1] [2] [3] n = 2 [1 1] [1 2] [1 3] [2 1] [2 2] [2 3] [3 1] [3 2] [3 3] n = 3 [1 1 1] [1 1 2] [1 1 3] [1 2 1] [1 2 2] [1 2 3] [1 3 1]... 54DCC001 - 2011-2

55 Método para Geração das Sequências É como contar: os tipos de dominós parecem algarismos em um sistema de numeração Se o algarismo menos significativo for menor que T (nro. de tipos), soma-se 1 a ele; Senão, coloca-se 1 no algarismo menos significativo, e propagamos o vai-um, aumentando o número de algarismos se for o caso Exemplos com T = 3 Suc([2]) = [3]; Suc([3]) =[1 1] Suc([2 2]) = [2 3]; Suc([2 3]) = [3 1] Suc([3 3]) = [1 1 1] DCC001 - 2011-255

56 O programa Post.sce // Leitura do problema de Post [nTypes Up Down] = ReadPostProblem(); WritePostProblem(Up,Down); found = %f; seq = []; while ~found seq = Sucessor(seq,nTypes); upString = strPost(Up,seq); dnString = strPost(Down,seq); found = upString == dnString; if found then WritePostSolution(seq,Up,Down); end 56DCC001 - 2011-2

57 A função Sucessor DCC001 - 2011-257 function s = Sucessor(r,nTypes) // retorna o sucessor da sequência r VaiUm = 1; for i = length(r):-1:1 if VaiUm > 0 then if r(i) < nTypes then r(i) = r(i) + 1; VaiUm = 0; else r(i) = 1; end if VaiUm == 1 then s = [1 r]; else s = r; end endfunction

58 A função Sucessor : Exemplos de Uso DCC001 - 2011-258 -->Sucessor([],3) ans = 1. -->Sucessor([2 3 1],3) ans = 2. 3. 2. -->Sucessor([3 3 3],3) ans = 1. 1. 1. 1.

59 Teste do Programa Post.sce DCC001 - 2011-259 Problema de Post: 100 0 1 1 100 00 Solução: 1001100100100 1 3 1 1 3 2 2 100 1 100 100 1 0 0

60 Um Problema de Post difícil 1000 0 01 0 1 101 00 001 A menor solução para o problema acima usa 206 dominós! Como geramos sequências na forma como contamos, seria contar até obter um número com 206 algarismos; em um notebook, o programa Post.sce demoraria 10 112 anos para resolver! Ruim? Pois ainda pode ser bem pior! 60DCC001 - 2011-2

61 O Problema de Post 10 0 0 001 1 O problema: tem solução? Até hoje ninguém sabe! 61DCC001 - 2011-2

62 Problemas Indecidíveis O problema de Post pertence à classe dos problemas indecidíveis O espaço de busca em um problema np-completo como o do Caixeiro Viajante é grande, cresce explosivamente, mas Em um problema indecidível o espaço de busca é infinito! Para o problema de Post, sempre existe a possibilidade da solução ser uma sequência maior DCC001 - 2011-262

63 Conclusões Resultados teóricos do estudo de um problema podem colocar limites na complexidade de qualquer algoritmo que o resolva Problemas np-completos não têm resultados teóricos com estes limites, mas todas as soluções já encontradas são piores que qualquer polinômio Problemas indecidíveis têm como resultado teórico a não existência de nenhum algoritmo que garantidamente encontre uma solução 63DCC001 - 2011-2


Carregar ppt "Módulo 12 4.5 Complexidade de Problemas 4.5.1 Complexidade da Ordenação 4.5.2 Problemas np-completos: o Problema do Caixeiro Viajante 4.5.3 Problemas Indecidíveis:"

Apresentações semelhantes


Anúncios Google