Exercícios MT2
Nenhum exercício corresponde a esta pesquisa.
Programação dinâmica
Mochila 0/1 por programação dinâmica e limite da gulosaAutoavaliação
Teste 2, 2024/25
Considere a mochila 0/1 com capacidade e três objetos, com valores e pesos respetivamente e .\n\nDescreva a recorrência da programação dinâmica para este problema, apresente a tabela de resultados dessa formulação e indique o melhor valor obtido. Que valor devolveria a abordagem gulosa que usa a razão como critério de seleção? Em geral, quão má pode ser essa abordagem gulosa em relação à seleção ótima? Justifique.
Solução
Melhor valor: , selecionando os objetos 2 e 3. A gulosa por devolve .
Com o melhor valor considerando objetos até e capacidade , a recorrência compara ignorar o objeto com incluí-lo. A tabela (linhas objeto 1, 2, 3; colunas capacidade 0 a 5) é: objeto 1: ; objeto 2: ; objeto 3: . Logo . A gulosa escolhe o objeto 1 (razão 5) e fica sem capacidade para mais nada, obtendo 5. Em geral pode ser arbitrariamente má: com , e , a gulosa escolhe o primeiro objeto e o rácio gulosa/ótima é , que tende para 0 quando cresce.
Confere a tua resposta:
- A recorrência é .
- A tabela termina com , obtido com os objetos 2 e 3.
- A gulosa devolve apenas 5 e pode ser arbitrariamente má (exemplo com , , rácio ).
Mochila 0/1 com quatro objetos e comparação com a gulosaAutoavaliação
Recurso T2, 2022/23
Considere a mochila 0/1 com capacidade e quatro objetos com valores e pesos e . Apresente a tabela de problemas parciais que resulta diretamente da recorrência de programação dinâmica e indique o melhor valor. Que valor devolveria uma algoritmo guloso que escolhe primeiro os objetos com melhor razão ?
Solução
Ótimo de programação dinâmica: (objetos 2 e 3, ou 1 e 4). Gulosa: .
A tabela (capacidades 0 a 10) dá: objeto 1: ; objeto 2: ; objeto 3: ; objeto 4: . Todas as razões valem 1, logo a gulosa escolhe os dois primeiros objetos e obtém , abaixo do ótimo 10.
Confere a tua resposta:
- A tabela tem melhor valor na célula final.
- Há duas soluções ótimas: objetos ou .
- A gulosa devolve , escolhendo os dois primeiros objetos.
Pertença de uma cadeia a uma gramática com o algoritmo CYKAutoavaliação
Recurso T2, 2024/25
Considere a gramática em forma normal de Chomsky com símbolo inicial , não terminais , terminais e produções , , . Usando a recorrência de programação dinâmica , mostre que a cadeia «baab» pertence à linguagem da gramática. Discuta a complexidade temporal e espacial de uma implementação direta deste método em função do número de caracteres da entrada.
Solução
«baab» pertence a , pois a célula contém .
Células de comprimento 1: , , , . Comprimento 2: (por ), (por e ). Comprimento 3: (por e com , ). Comprimento 4: usa a divisão : e , donde e , obtendo . Como , a cadeia pertence à linguagem. Uma derivação completa é . O método preenche uma tabela triangular de células, cada uma com divisões, pelo que o tempo é para gramática fixa e o espaço é .
Confere a tua resposta:
- A tabela CYK tem na célula da cadeia completa «baab».
- Uma derivação possível é .
- A complexidade temporal é e a espacial para uma gramática fixa.
Retrocesso e poda
Poda da árvore de estados na soma de subconjuntosAutoavaliação
Teste 2, 2024/25
No problema da soma de subconjuntos, usa-se uma função de poda para decidir se um estado deve continuar a ser explorado. Considere a instância e . O estado em que os dois primeiros elementos são escolhidos (, , soma 15) pode ser podado? Justifique. Mostre a subárvore podada (restrita a , ) e determine quantos estados dessa subárvore ficam por explorar, supondo que se procura todas as soluções.
Solução
Não se poda o nó de soma 15. Na subárvore ficam 22 estados por explorar (9 visitados de 31). Solução: , com soma .
Como a soma parcial 15 ainda não ultrapassa , o nó não pode ser podado. Já o nó tem soma 27 e o próximo elemento vale pelo menos 13, logo : é podado. O nó tem soma 28 e o próximo elemento vale 15, logo : também é podado. Restam os nós (soma 15), (soma 30, podado pois ), e as duas folhas, num total de 9 nós visitados entre os 31 nós da subárvore (15 internos e 16 folhas). A única solução encontrada é .
Confere a tua resposta:
- O nó com soma 15 não é podado, pois .
- São podados os nós com somas 27 e 28, pois o próximo elemento já faz ultrapassar 33.
- Dos 31 nós da subárvore, apenas 9 são visitados; a única solução é .
Aproximações com garantia
Redução de ciclo hamiltoniano para TSP e não aproximabilidadeAutoavaliação
Teste 2, 2024/25
Mostre que não é possível uma aproximação polinomial de razão fixa para o problema do caixeiro-viajante (TSP) geral, salvo se , descrevendo uma redução polinomial do problema do ciclo hamiltoniano para o TSP. Mostre que a redução é polinomial quanto ao tamanho da instância de entrada e explique por que um algoritmo de aproximação polinomial para o TSP permitiria resolver o ciclo hamiltoniano em tempo polinomial.
Solução
Redução: se e caso contrário, com .
Dado um grafo conexo com nós, constrói-se completo com pesos 1 nas arestas existentes e nas que não existem. Se tem ciclo hamiltoniano, esse ciclo tem custo em . Se não tem, qualquer circuito em usa pelo menos uma aresta de peso , tendo custo superior a . A construção cria no máximo arestas, logo é polinomial. Se existisse um algoritmo de aproximação de razão polinomial , ele devolveria um circuito de custo quando existe ciclo hamiltoniano, que para é menor que ; assim, distinguir os dois casos decidiria o ciclo hamiltoniano em tempo polinomial.
Confere a tua resposta:
- A redução cria um grafo completo com pesos 1 nas arestas de e nas restantes.
- Há ciclo hamiltoniano em se e só se o TSP em tem custo .
- Um algoritmo de razão permitiria distinguir os dois casos em tempo polinomial, logo .
Cobertura de vértices: pior caso numa estrelaAutoavaliação
Teste 2, 2023/24
Considere o algoritmo de 2-aproximação para a cobertura de vértices que escolhe repetidamente uma aresta entre dois vértices ainda não cobertos. Mostre que, numa estrela com nós (todos ligados a um nó central), este algoritmo atinge o pior caso de ficar a um fator 2 do ótimo. Qual é o número de iterações do algoritmo?
Solução
Cobertura devolvida: 2 vértices (fator 2 sobre o ótimo 1). Iterações: .
Numa estrela com nós há arestas, todas incidentes no nó central. O algoritmo escolhe uma aresta de cada vez; como as arestas escolhidas não partilham extremidades além do centro, em cada iteração apenas uma aresta nova é eliminada, pelo que são precisos passos. O conjunto dos dois extremos de uma última aresta forma uma cobertura de 2 vértices, enquanto o nó central, sozinho, cobre todas as arestas: o rácio é 2, o pior caso do algoritmo.
Confere a tua resposta:
- O algoritmo devolve uma cobertura com 2 vértices.
- O ótimo é o nó central, com 1 vértice.
- O número de iterações é .
Cobertura de conjuntos: gulosa versus ótimoAutoavaliação
Recurso T2, 2022/23
Considere uma instância do problema da cobertura de conjuntos com 8 conjuntos sobre um universo de 32 pontos, em que e cobrem, juntos, todo o universo, e em que a cada passo de seleção os conjuntos ainda disponíveis empatam no número de pontos ainda por cobrir. Indique a cobertura devolvida pela heurística gulosa que escolhe o conjunto que cobre mais pontos por cobrir (com desempate pelo menor identificador), a cobertura ótima desta instância e o rácio entre as duas.
Solução
Gulosa: (6 conjuntos). Ótimo: (2 conjuntos). Rácio 3.
Como há sempre empate no número de pontos por cobrir, o desempate pelo menor identificador faz a gulosa escolher , depois , e assim sucessivamente até , num total de 6 conjuntos. Os conjuntos e cobrem sozinhos os 32 pontos, pelo que a cobertura ótima tem 2 conjuntos. O rácio mostra que a heurística gulosa pode afastar-se do ótimo neste problema.
Confere a tua resposta:
- A gulosa devolve , com 6 conjuntos.
- A cobertura ótima é , com 2 conjuntos.
- O rácio gulosa/ótimo é 3.
TSP: algoritmo da MST com pré-ordem sem garantia neste problemaAutoavaliação
Recurso T2, 2023/24
Considere um problema de sequenciamento de tarefas modelado por um grafo completo em que cada aresta indica o tempo que uma tarefa demora consoante a tarefa seguinte, começando e terminando na tarefa 0. O algoritmo que calcula a árvore de cobertura mínima a partir do nó 0 e percorre a árvore em pré-ordem devolve o percurso com custo 18, enquanto o percurso ótimo tem custo 12. Este algoritmo garante alguma razão de aproximação neste problema? Justifique.
Solução
Custo do algoritmo: 18; ótimo: 12. Sem garantia de razão fixa, por falta da inequação triangular.
O algoritmo da 2-aproximação para o TSP métrico garante fator 2 porque os pesos respeitam a inequação triangular, permitindo atalhar arestas repetidas. Neste problema, o tempo de uma tarefa depende da tarefa seguinte, pelo que arestas com a mesma origem podem ter pesos diferentes consoante o destino e a inequação triangular pode falhar. Sem essa condição, o custo 18 do algoritmo não fica limitado por qualquer fator do ótimo 12.
Confere a tua resposta:
- O algoritmo devolve custo 18 contra o ótimo 12.
- Não há garantia de aproximação, pois os pesos não respeitam necessariamente a inequação triangular.
- A garantia de fator 2 exige pesos métricos.
NP-completude e reduções
Redução de CLIQUE para cobertura de vérticesAutoavaliação
Teste 2, 2023/24
Sabendo que CLIQUE é NP-completo, mostre que a cobertura de vértices (Vertex-Cover) também é NP-completa: mostre primeiro que o problema está em NP e descreva uma redução polinomial de CLIQUE para Vertex-Cover, argumentando que é polinomial quanto ao tamanho da representação do grafo de entrada.
Solução
Redução: tem clique de tamanho se e só se tem cobertura de vértices.
Para mostrar que Vertex-Cover está em NP, dado um subconjunto de vértices, basta verificar para cada aresta se ou , o que demora . Para a redução, dado , constrói-se o complementar com os mesmos vértices e arestas onde não havia. Um conjunto é clique em se e só se é cobertura de vértices em : toda a aresta de tem pelo menos uma extremidade fora de , ou seja, não liga dois vértices de . Assim, tem clique de tamanho se e só se tem cobertura de tamanho . O complementar tem no máximo arestas, logo a transformação é polinomial.
Confere a tua resposta:
- Vertex-Cover está em NP: basta verificar em se cada aresta tem uma extremidade na cobertura candidata.
- A redução usa o grafo complementar : tem clique de tamanho se e só se tem cobertura de vértices.
- A construção do complementar é polinomial no número de nós e arestas.
Redução de conjunto independente para cliqueAutoavaliação
Recurso T2, 2022/23
Desenvolva uma redução polinomial do problema do conjunto independente (Independent Set) para o problema da clique (Clique). Num grafo, um conjunto de nós é independente se não há arestas diretas entre eles; uma clique é um conjunto de nós todos ligados entre si. Dado e , o problema da clique pergunta se contém uma clique de tamanho ; dado e , o conjunto independente pergunta se contém um conjunto independente de tamanho . Forneça um exemplo ilustrativo com grafos de pelo menos 5 nós e , e argumente por que a redução está correta.
Solução
= complementar de , com : tem clique de tamanho se e só se tem conjunto independente de tamanho .
Se é clique em , todas as arestas entre os nós de existem em e, portanto, nenhuma existe em , logo é independente em . Reciprocamente, se é independente em , não há arestas de entre os nós de , ou seja, todas as pares de nós de estão ligados em , logo é clique. A construção do complementar é polinomial, pelo que a redução é válida.
Confere a tua resposta:
- A redução constrói como o complementar de , com o mesmo .
- Um conjunto é clique em se e só se é independente em .
- O exemplo com 5 nós e mostra a correspondência.
ILP é NP-completo por redução de 3-CNF-SATAutoavaliação
Recurso T2, 2024/25
Mostre que o problema de programação linear inteira (ILP) é NP-completo, descrevendo e justificando a correção e a complexidade temporal de uma redução de 3-CNF-SAT para ILP. Mostre primeiro que o ILP está em NP e descreva a construção das variáveis e restrições da redução.
Solução
Redução: e, por cada cláusula, a restrição soma dos literais (com para literais negados) é pelo menos 1.
Para a versão de decisão do ILP, basta «adivinhar» o vetor inteiro , avaliar a função objetivo e verificar as restrições, o que é polinomial; logo ILP está em NP. Dada uma fórmula 3-CNF-SAT com variáveis , definem-se variáveis inteiras com , onde representa verdadeiro. Cada cláusula como transforma-se na restrição : para a satisfazer, pelo menos um dos termos tem de ser positivo, o que corresponde a tornar verdadeiro pelo menos um dos literais da cláusula. A fórmula é satisfazível se e só se o ILP resultante tem solução inteira, e a construção tem um número polinomial de variáveis e restrições.
Confere a tua resposta:
- ILP está em NP: basta adivinhar o vetor inteiro e verificar as restrições em tempo polinomial.
- Cada variável booleana corresponde a uma variável inteira com .
- Cada cláusula dá a restrição .
Programação linear e inteira
PL de duas variáveis: forma slack, região e ótimo inteiroAutoavaliação
Teste 2, 2024/25
Considere o problema linear sujeito a , e . Converta-o para a forma slack, determine graficamente se é exequível e limitado, indique a solução ótima do PL e a solução ótima da variante inteira (ILP) deste problema.
Solução
Ótimo do PL e do ILP: , valor .
Introduzindo as variáveis de folga, obtém-se e . Como ambos os coeficientes da função objetivo são negativos, o máximo ocorre na origem: , com valor 0, que é também inteiro, pelo que é a solução ótima do ILP. A região é um polígono fechado (interseção de duas semiplanos com o primeiro quadrante), logo o problema é exequível e limitado.
Confere a tua resposta:
- Forma slack: , , com todas as variáveis .
- O problema é exequível e limitado; o ótimo do PL é com valor 0.
- A solução ótima do ILP coincide: com valor 0.
PL e ILP: arredondar a solução fracionária não serveAutoavaliação
Recurso T2, 2023/24
Considere o problema sujeito a , e . Converta-o para a forma standard e para a forma slack, determine graficamente se é exequível e limitado, e indique a solução ótima do PL com o valor da função objetivo. Para a variante inteira, indique a solução ótima e explique por que arredondar a solução do PL para o inteiro mais próximo não produz uma solução exequível.
Solução
PL: , valor 5 em . ILP: ou , valor 4.
Passando a minimização de para maximização de e multiplicando as restrições por , obtém-se e . A região exequível é o triângulo com vértices , e ; como se maximiza , o ótimo é com valor 5. No ILP, inteiro fica limitado por (pois e ), pelo que o ótimo é ou com valor 4. Arredondar daria , que viola , logo não é exequível.
Confere a tua resposta:
- Forma standard: com e .
- O PL é exequível e limitado; o ótimo é com valor 5 (na maximização).
- O ILP ótimo é ou , com valor 4; arredondar para dá ponto infezível.
Formular e resolver um problema de exame como PLAutoavaliação
Recurso T2, 2022/23
Vai fazer um exame com 10 questões dissertativas (20 pontos cada, 10 minutos cada) e 50 questões de escolha múltipla (5 pontos cada, 2 minutos cada), dispondo de 90 minutos. Deve responder a pelo menos 3 dissertativas e pelo menos 10 de escolha múltipla, e quer maximizar os pontos. Formule o problema como programação linear, com o número de questões de escolha múltipla e o de dissertativas, e determine graficamente a solução ótima e o valor ótimo.
Solução
Ótimo: 30 questões de escolha múltipla e 3 dissertativas, num total de 210 pontos.
As restrições são (tempo), , , , . Os vértices da região exequível com interesse são , e (o vértice vem de com ). Os valores da função objetivo são 60, 190 e 210, respetivamente. O máximo é 210, com 30 questões de escolha múltipla e 3 dissertativas.
Confere a tua resposta:
- O modelo é sujeito a , , .
- Os vértices relevantes são , e .
- A solução ótima é , , com valor 210 pontos.
Branch and bound: poda, limites e ordem de exploraçãoAutoavaliação
Teste 2, 2024/25
Considere a árvore de exploração de um ILP com variáveis , explorada em profundidade (DFS) por branch and bound. O nó raiz tem solução ; o nó (ramo ) tem ; o nó (ramo de ) tem ; o nó tem solução inteira ; o nó tem solução inteira ; o nó (ramo ) tem solução inteira ; os nós , e são infezíveis. Responda: (1) Por que se abandona a exploração no nó ? (2) O valor de no nó poderia ser 30? Porquê? (3) Que nós seriam explorados numa exploração em largura (BFS)? Porquê?
Solução
n7: podado por incumbent 28 > 26. n6: z ≤ 29, logo não pode ser 30. BFS: n1, n2, n11.
(1) Ao chegar a já existe uma solução inteira com valor 28 (em ) e, como se maximiza, todos os nós abaixo de têm valor ; a exploração abaixo de é abandonada. (2) O nó está abaixo de , onde a relaxação linear vale 29, pelo que qualquer solução inteira abaixo de vale no máximo 29; 30 é impossível. (3) Em BFS exploram-se primeiro , depois os filhos e . Como é inteiro com 38 e só vale 31, todos os nós abaixo de ficam com valor e podem ser podados de imediato.
Confere a tua resposta:
- Em há solução inteira 26 e já existe incidente 28, logo a subárvore de não pode melhorar.
- Em , não pode ser 30 porque está abaixo de , onde .
- Em BFS exploram-se , e ; como é inteiro com 38 e vale 31, o resto pode ser podado.
Caminhos mínimos
Algoritmo de Johnson num grafo com aresta negativaAutoavaliação
Recurso T2, 2023/24
Considere o grafo dirigido com nós e arestas (2), (), (1), (3), (4) e (2). Indique qual dos algoritmos de Dijkstra e Bellman-Ford é adequado para caminhos mais curtos a partir de um nó neste grafo e justifique. Aplique o algoritmo de Johnson para determinar os caminhos mais curtos do nó para todos os outros nós, mostrando os pesos reponderados não negativos. Se a aresta passasse a ter peso , o algoritmo continuaria a dar caminhos mais curtos válidos? Justifique.
Solução
Distâncias de : , , . Com , há ciclo negativo e o algoritmo falha.
Como existe uma aresta de peso negativo, Dijkstra não é adequado; Bellman-Ford trata pesos negativos. No algoritmo de Johnson, adiciona-se um nó com arestas de peso 0 para todos os nós e corre-se Bellman-Ford, obtendo e . Reponderam-se as arestas com : fica 2, fica 0, fica 0, fica 3, fica 5 e fica 2, todos não negativos. Dijkstra a partir de dá distâncias reponderadas 0, 2, 2, 2; voltando aos pesos originais com , obtém-se , , . Se , o ciclo tem peso , pelo que não existem caminhos mais curtos bem definidos e Johnson não se aplica.
Confere a tua resposta:
- Usa-se Bellman-Ford, por causa da aresta negativa .
- Os pesos de Johnson são , , e os caminhos de são , , .
- Com há ciclo negativo , logo Johnson deixa de se aplicar.
Dijkstra com aresta negativa: quando funciona e quando falhaAutoavaliação
Recurso T2, 2024/25
Considere o grafo dirigido com nós e arestas (2), (1) e (). A aplicação do algoritmo de Dijkstra com fonte em funciona neste grafo? Porquê? Modifique os pesos das arestas de forma a obter um exemplo em que o Dijkstra falha neste grafo, ou explique por que tal não é possível, e justifique em geral por que o Dijkstra não tolera arestas de peso negativo. Qual é a complexidade temporal do Dijkstra com um min-heap em termos do número de nós e arestas ?
Solução
No grafo original, e o algoritmo acerta. Exemplo de falha: , , (ótimo 0, Dijkstra devolve 1). Complexidade .
No grafo original, depois de processar , o min-heap contém com 2 e com 1; sai primeiro e relaxa para , que é a distância correta. O algoritmo falha quando um nó é retirado definitivamente do heap antes de todas as arestas negativas que lhe chegam serem consideradas: com , e , o nó sai com distância 1 e é finalizado, embora o caminho tenha custo 0. Em geral, o Dijkstra assenta na monotonicidade dos pesos (todo o prefixo de um caminho mais curto é ele próprio mais curto), que deixa de valer com arestas negativas. Com min-heap, cada nó entra e sai no máximo uma vez e cada aresta pode provocar uma atualização, donde .
Confere a tua resposta:
- No grafo original funciona: sai primeiro com distância 1 e atualiza para .
- O Dijkstra falha quando um nó é finalizado antes de ser relaxado por um caminho com aresta negativa; exemplo: , , .
- A complexidade com min-heap é .