Você está na página 1de 26

Tema 6

Como citar este material:


SANTANA, Gisele Alves. Análise de algoritmos: métodos de ordenação. Caderno de Atividades.
Valinhos: Anhanguera Educacional, 2018.

2
3
Neste Caderno, você estudará a definição de complexidade do problema e conhecerá
como são classificados alguns problemas em termos de sua complexidade e
tratabilidade, e os conjuntos de problemas NP. Ao longo desta disciplina, você teve
oportunidade de analisar diversos tipos de algoritmos em relação à sua complexidade
computacional, agora você vai conhecer problemas que são conhecidos na literatura
como aqueles que não possuem solução, ou que sua solução é inviavelmente custosa,
e como os problemas entram nessas classificações. Afinal, mais do que desenvolver
algoritmos para solucionar problemas, e desenvolver algoritmos eficientes, também
devemos saber quando um algoritmo não será capaz de encontrar tal solução.
Esses conteúdos e habilidades são necessários para que você possa conhecer técnicas
já consolidadas de desenvolvimento de algoritmos e utilizá-las para melhorar e otimizar
seus projetos. Você também pode vivenciar o ambiente de pesquisa, dedicando-se a
encontrar uma solução computacional, ou uma verificação computacional, para os
problemas conhecidos como intratáveis.

4
1 Introdução
Ao longo de sua formação universitária, você deve ter observado o quanto os algoritmos
estão presentes no dia a dia do profissional de Engenharia de Computação, certo? Se
você optar por uma carreira acadêmica, você estudará o avanço das técnicas de
desenvolvimento de algoritmo e os novos conceitos de pesquisa nessas áreas.
Da mesma forma, se você trabalhar em empresas ou indústrias, é bem provável que você
seja direcionado a desenvolver soluções para problemas por meio de algoritmos. O
desafio é: todos os problemas possuem solução por meio de algoritmos? Se sim, esses
algoritmos são realizáveis?
Nesta seção, especificamente, nós estudaremos mais os problemas do que os algoritmos
que os resolvem. Isso é necessário se considerarmos alguns problemas comumente
recorrentes nos setores de biologia, entretenimento, logística, comunicação de dados,
entre outros, já que uma boa parte deles não possui uma solução em forma de algoritmo
que seja possível de se executar.
Nos Cadernos anteriores, foi visto que o tempo de execução, a quantidade de operações
e a quantidade de memória utilizada por um algoritmo são fatores que influenciam na sua
escolha.
Para chegar a essa conclusão, partimos de problemas que possuem algoritmos para
solucioná-los, e então estudamos a fundo os aspectos de complexidade desses
algoritmos, inclusive quando sua entrada para processamento é demasiadamente
grande.

5
O principal desafio das áreas de pesquisa de complexidade de algoritmos são os
problemas que não possuem algoritmos viáveis ou factíveis de se executar, ou seja, eles
são construídos de forma que suas instruções levariam muito tempo para serem
executadas para então obter a resposta em problemas com grandes quantidades de
entradas, como é o caso dos crescimentos quadráticos, cúbicos e exponenciais em geral.
Esses algoritmos são considerados tão lentos assintoticamente, que mesmo com uma
evolução no hardware ou em processos computacionais, eles ainda não teriam resultado
de execução satisfatória, por isso esta disciplina de Análise de Algoritmos aborda esses
aspectos, na busca por estratégias de construção de algoritmos que sejam realizáveis
em tempos polinomiais.

2 Conceitos P e NP
Para que possamos entender como se comportam os problemas e seus respectivos
algoritmos, podemos classificá-los segundo os conceitos P e NP.
A classe P é composta pelos problemas que são resolvidos por meio de algoritmos em
tempo polinomial, de maneira formal O(nk) sendo n o tamanho da entrada do problema e
k uma constante (CORMEN, 2002).
Podemos destacar como problemas da classe P os variados problemas de ordenação de
elementos e de busca linear, bem como os seguintes problemas, alguns extensivamente
discutidos na literatura (AHO; HOPCFROFT; ULLMAN, 1974), devido à aplicabilidade no
contexto científico, comercial, industrial e de serviços em geral:
 2-SAT: o problema da satisfatibilidade booleana limitado a 2 caracteres, sua
resolução consiste em encontrar uma solução verdade para uma dada fórmula
booleana, e ele é resolvido por meio da modelagem na forma de um grafo
direcionado, em que os vértices representam as literais e suas respectivas
negações na sentença lógica;

6
 HORN-SAT: problema similar ao 2-SAT, a fórmula em questão tem apenas
cláusulas com um único literal positivo;

 problema da árvore geradora mínima: o objetivo é encontrar o caminho mais


curto entre todos os pares de nós em um grafo conectado com pesos, esse é
um problema comum nos projetos de engenharia envolvendo
telecomunicações, transporte, rodovias, transmissão de energia, entre outros;

 problema do caminho mais curto: o objetivo é percorrer um grafo conectado,


de uma origem até um destino, ambos predeterminados, por um caminho mais
curto. Pode ser utilizado no contexto de distância, custo ou outra variável
desejável;

 problema do emparelhamento em grafo não dirigido (Bipartite Matching): o


problema consiste em encontrar um conjunto de arestas que conectem 2 nós
de maneira exclusiva, uma aplicação a ser considerada é um grafo
representando um grupo de pessoas, um emparelhamento máximo é o
máximo de pares monogâmicos que podem ser formados com essas pessoas;

 problema da mochila fracionária: o problema é encontrar um melhor


compromisso custo-benefício na escolha dos itens a serem colocados na
mochila. Considerando que cada item tem um peso e uma importância,
deve-se optar por acomodar na mochila itens mais importantes e mais leves.
Esse problema só é considerado um problema da classe P por ser fracionário,
ou seja, partindo do princípio de que os itens podem ser fragmentados. Sua
aplicação é muito presente em áreas de logística e distribuição, e-commerce

7
e gerenciamento de estoques. Esse problema será discutido a seguir também
no contexto dos problemas que não compõem a classe P;

 problema do conjunto independente máximo em árvores: o objetivo para


resolução é encontrar um conjunto independente de arestas ponderadas em
uma árvore, cujo peso final das arestas seja maximizado. O problema é
resolvido por meio da técnica de recursividade;

 problema do Caminho de Euler: esse problema, também chamado de


problema da Ponte de Konigsberg, ficou conhecido como Caminho de Euler
porque Leonard Euler provou como se dá a solução desse problema, quando
ela existe e quando não existe solução. Ele está descrito como problema da
classe P porque ele provou quais são as condições para que se possa chegar
à solução. Para a descrição do problema, considere a Figura 1, da cidade de
Konigsberg, no século 17. Os moradores se questionavam se era possível
trilhar uma caminhada contínua que passasse uma única vez em cada uma
das sete pontes. Se você observar o mapa da Figura 1 e procurar uma rota
que satisfaça esse desafio, você chegará à conclusão de que não existe tal
caminho! De qualquer forma, para essa afirmação ser válida no ponto de vista
científico, foi necessário um formalismo matemático adequado para a prova,
por isso esse problema recebeu o nome de Euler, como homenagem.

8
Figura 1 – Cidade de Konigsberg para o problema do Caminho de Euler

Fonte: disponível em: <http://webpages.fc.ul.pt/~pmduarte/tmf/Problemas/Images/konigsberg.gif>. Acesso em:


19 jun. 2018

Euler provou que o problema da Ponte de Konigsberg não tem solução, pois ao
transformar o esquema das pontes em um grafo não orientado, encontramos vértices com
um número ímpar de arestas, o que faz com que, ao visitar esses vértices, não é possível
visitar todos sem repetir a aresta. Para que a solução do problema exista, é necessário
que o grafo conexo em questão seja um grafo de Euler, que significa que todos os seus
vértices são de grau par. Se isso for atendido, o problema tem solução calculada em
tempo polinomial.

Além desses problemas apresentados, existem outras variações de problemas que


pertencem à classe P, ou seja, que possuem uma solução por meio de um algoritmo que
é executado em tempo polinomial mesmo para uma entrada consideravelmente grande.
Para definirmos a classe NP e os problemas que a compõem, precisamos reforçar uma
ideia: NP não significa não polinomial!
Não podemos considerar que os problemas que não pertencem à classe P seriam da
classe NP por possuírem soluções em tempo não-polinomial, cuidado para não chegar à

9
essa errônea conclusão! Vamos a algumas considerações técnicas antes de definirmos
de maneira formal como são reconhecidos os problemas NP.
Cormen (2002) define os problemas da classe NP como: os problemas que são
verificáveis em tempo polinomial, ou seja, se houver a possibilidade de uma certificação
para a solução, a validação desse certificado seria em tempo polinomial em função da
entrada do problema.
Isso nos faz chegar à conclusão de que P está em NP, de maneira formal: P ⊆ NP, ou
seja, todos os problemas da classe P estão contidos na classe NP, e isso pode ser
explicado como: se os problemas são resolvidos em tempo polinomial (P), então
certamente eles são verificados em tempo polinomial (NP), já o contrário não pode ser
afirmado.
Consideramos ainda a classe NPC, ou problemas da classe NP-completo, que, por
definição, é que esse problema é da classe NP e ele é tão difícil de se resolver quanto
qualquer problema NP (CORMEN, 2002).
Alguns problemas do tipo NP e NP-completo são similares aos problemas do tipo P,
porém são considerados NP e NP-completos por vários deles ainda não possuírem
sequer uma solução conhecida, ou seja, não são verificáveis em tempo polinomial. Os
problemas do tipo NP normalmente são NP pois envolvem problemas combinatórios que,
por sua natureza, possuem soluções não triviais e que crescem exponencialmente
conforme sua entrada, e alguns estão descritos a seguir:
 SAT: o problema da satisfatibilidade booleana sem limitação de caracteres é
muito mais custoso de ser calculado que sua variação 2-SAT;

 caixeiro viajante: o objetivo é encontrar o caminho mais curto para percorrer


todas as cidades que o caixeiro precisaria viajar. A dificuldade existe quando
o número de cidades aumenta, pois é um problema de permutação, o que
fornece uma resposta fatorial. Por exemplo, com 20 cidades, seriam 20 (20
fatorial) operações, que poderiam levar bilhões de anos para serem

10
calculados. Naturalmente, esse também é um problema comum para a
logística e os setores de comércio e distribuição, então um algoritmo de força
bruta é totalmente inviável e infactível;

 problema do caminho mais longo: enquanto o problema do caminho mais


curto é considerado P, o problema do caminho mais longo é NP, seu objetivo
é encontrar um caminho de comprimento máximo em um dado grafo, e por
ainda não possuir um algoritmo que resolva esse desafio, ele é considerado
NP-completo;

 Problema do acoplamento tridimensional (3D Matching): o problema consiste


em encontrar um conjunto de triplas que conectem 3 conjuntos disjuntos
finitos, esse também é um problema de combinação que cresce muito
conforme a entrada;

 problema da mochila: o problema é encontrar um melhor compromisso


custo-benefício na escolha dos itens a serem colocados na mochila, da
mesma forma que o problema da mochila fracionária, porém, neste caso, o
item é colocado inteiro na mochila ou não é colocado, e isso faz com que a
computação para encontrar os melhores conjuntos de produtos seja muito
custosa. No caso fracionário, podem-se adotar os seguintes passos:
o calcular a relação custo-peso de cada item individualmente;
o ordená-los de maneira crescente;
o preencher com os primeiros elementos, priorizando os itens do início da
lista, e fragmentando os restantes até encher a mochila.
Como pode ser observado, esses passos crescem de maneira polinomial com
a entrada. O problema se torna NP-completo porque o último passo não é
aplicado de maneira direta, ou seja, quando os itens não podem ser

11
fragmentados, há a decisão de colocar o item ou não, e se não o colocar, qual
outro item ou quais outros conjuntos de itens devem ser colocados? Repare
que a construção da lógica se tornou um problema de combinação com muito
mais possibilidades. Considere uma empresa que precisa entregar
encomendas, e essas encomendas estão em caixas lacradas, não podendo
ser fragmentadas, então estamos diante de um problema NP, que
cotidianamente está nas empresas de remédios, de alimentos, de distribuição
terceirizada, entre outros. A Figura 2 ilustra caixas de tamanhos variados,
considere que normalmente essas caixas possuem valores associados
diferentes, como, por exemplo, uma caixa com 12 celulares possui um custo
maior e um tamanho menor que uma caixa com 100 pacotes de folhas sulfite,
que certamente possui tamanho maior e custo menor. Se uma distribuidora
precisar escolher as encomendas que irão em cada carregamento, essa
escolha deve ser ponderada. Agora imagine ainda que no cenário comercial
temos de considerar multas por atraso, seguro de itens, armazenamento
adequado, entre outros, esse problema fica ainda mais desafiador;

Figura 2 – Caixas para serem carregadas

Fonte:disponível em: <https://image.freepik.com/vetores-gratis/empilhadeira-com-plataforma-de-caixas-


empilhadas_3446-398.jpg>. Acesso em: 19 jun. 2018

12
 problema do Ciclo Hamiltoniano: esse problema é o mais conhecido dos
problemas NP, consiste em descrever o caminho ou o passeio que visita todos
os vértices uma única vez, com exceção do vértice de início, que também é o
fim do trajeto. Esse problema é descrito nos livros de Aho et al (1974) e
Cormen (2002), por ser um clássico NP-completo.

3 Desafios para a engenharia e a computação

Quando analisamos os conjuntos P e NP e suas relações, temos que, embora P e NP


sejam definidos, a relação de intersecção, disjunção ou união entre eles não é definida!
Ou seja, ainda não se conseguiu definir se P ≠ NP ou P = NP por meio das classificações
dos problemas e suas variações.
Esse importante aspecto a ser destacado é descrito no livro de Cormen (2002), bem como
outros autores também o fazem, e o interessante desse assunto é que ainda não foi
conhecido algum algoritmo de tempo polinomial para um problema NP-completo, ao
mesmo tempo que ninguém ainda conseguiu provar que não pode existir nenhum
algoritmo de tempo polinomial para qualquer um dos problemas NP-completo.
A maioria dos estudiosos do assunto acredita que os problemas NP-completos são
intratáveis, pois há muito tempo se estudam esses problemas e não houve muito
progresso em relação a uma solução computacional em tempo polinomial para esses
problemas. Cormen (2002) reforça que seria espantoso se todos eles pudessem ser
resolvidos em tempo polinomial.
Ao mesmo tempo, o mesmo autor reforça que também não há resultados conclusivos que
façam eliminar a possibilidade dos problemas NP-completos serem resolvidos em tempo
polinomial.

13
Boa parte da dificuldade dessas provas matemáticas é que vários desses problemas NP-
completos são muito similares com os problemas da classe P, em geral, os problemas
são os mesmos, porém seu contexto é adaptado, restrito ou flexibilizado para que o
problema possa ser resolvido por um algoritmo de tempo polinomial.
Você está querendo saber o porquê de um engenheiro saber tais definições se mesmo a
comunidade científica da área não tem todas as respostas, certo? Se você precisar
desenvolver uma solução computacional para um problema com características de NP-
completo, você possível e provavelmente passará dias e dias elaborando e executando
um algoritmo que não chegará a uma resposta desejável, o algoritmo pode nem mesmo
chegar a uma resposta.
Se você for designado para esse desafio, você deve procurar algoritmos de aproximação
ou então restringir/flexibilizar as exigências da solução do problema, chegando a um caso
tratável e resolvível.
Estratégias técnicas para resolução de problemas desse tipo têm sido discutidas na
literatura, sejam para resolver problemas da classe P ou tentar aproximar uma solução
para problemas da classe NP. Algumas técnicas para evitar algoritmos de força bruta, ou
busca exaustiva são (OLIVEIRA, 2012):
 backtracking (ou tentativa e erro), uma adaptação melhorada de força bruta;
 branch-and-bound, uma variação de backtracking;
 recursividade;
 balanceamento;
 abordagem incremental;
 divisão e conquista, abordadas nesta disciplina;
 algoritmos gulosos;
 programação dinâmica;
 algoritmos aproximativos.

14
4 Formalismo matemático e técnicas de prova
Existem formas precisas de definirmos como os problemas são caracterizados e onde
esses conceitos se estabelecem na Análise de Algoritmo, vamos conhecer cada uma
delas.
4.1 Máquinas de Turing
Uma das formas de provar a solucionabilidade dos problemas é a Máquina de Turing
(GERSTING, 2004), mesmo que a Máquina de Turing seja naturalmente mais lenta do
que uma máquina com memória de acesso aleatório (RAM), como o computador que
conhecemos hoje, essa prova é aceita para definir os problemas da classe P e da classe
NP.
O livro de Aho et al. (1974) aborda em um capítulo a relação entre a Máquina de Turing
e as máquinas com memória RAM, e como essa relação pode ser estendida para as
provas de complexidade de problemas e de algoritmos.
Essa prova é possível pelo conceito de decisão da Máquina de Turing, já que ela para
para qualquer entrada apropriada, como explica Gersting (2004), se codificarmos
adequadamente as entradas e os símbolos dos problemas que queremos analisar, então
podemos tratá-lo como um problema de decisão da Máquina de Turing. Uma máquina de
Turing de múltiplas fitas está ilustrada na Figura 3.
A Máquina de Turing decide, de forma determinística, parando em um estado final ou não
final, se uma cadeia de entrada é ou não um elemento do conjunto solução (GERSTING,
2004), dada uma cadeia de entrada, a máquina para em um estado final se essa cadeia
pertence ao conjunto.
Se a máquina consegue encontrar a solução para um dado problema proposto, mapeado
nos símbolos que essa máquina reconhece, então esse problema pertence à classe P.

15
Figura 3 – Máquina de Turing de múltiplas fitas

Fonte: AHO et al., 1974, p. 27

Um dado problema pode não possuir algoritmo eficiente para resolvê-lo, entretanto, se
uma solução correta para esse problema puder ser verificada pela Máquina de Turing em
tempo polinomial, isso prova que esse problema é da classe NP.
O problema do Ciclo Hamiltoniano, como já discutido, pertence à classe de problemas
NP-completo, o que significa que, além de pertencer à classe NP, implica que, se for
encontrado um algoritmo polinomial para resolvê-lo por meio da Máquina de Turing, então
todos os outros problemas NP teriam solução polinomial também por meio da Máquina
de Turing, o que demonstraria P = NP (GERSTING, 2004).

4.2 Decisão x otimização


Para considerar a existência ou não da solução de um problema, devemos considerar se
ele é um problema de decisão ou um problema de otimização.

16
Problemas de otimização, em geral, possuem diversas soluções, a melhor solução
possível é chamada solução ótima, porém, por vezes, existem soluções subótimas, ou
seja, são boas soluções e em alguns casos podem substituir a solução ótima.
Isso é considerado satisfatório porque, muitas vezes, encontrar a solução ótima demanda
muito custo computacional, ou muitas vezes o tempo seria inconcebível de tão longo.
Algoritmos heurísticos e de buscas locais costumam encontrar soluções subótimas para
problemas de otimização.
Já os problemas de decisão são aqueles em que a resposta é “sim” ou “não”. Cormen
(2002) relaciona os problemas de otimização e seu problema de decisão, considerando
que o problema de otimização é mais “difícil” de ser resolvido.

4.3 Reduções
Na tentativa de provar que existe um algoritmo de tempo polinomial para decidir um dado
problema A, existe a técnica de redução (CORMEN, 2002).
Considere uma transformação de A para B, sendo α a instância que representa a entrada
de A e β a instância da entrada de B, e que essa transformação seja em tempo polinomial.
Considere também que se a resposta for “sim” para α, também a resposta é sim para β.
É executado um algoritmo para decidir B, e então podemos obter a resposta de β para α.
Esse processo incorpora o conceito de decidibilidade e é descrito pela Figura 4.

Figura 4 – Redução de tempo polinomial

Fonte: CORMEN, 2002, p. 766

17
Otimização combinatória
Neste link, o professor Flávio Keidi descreve vários dos problemas que discutimos ao
longo do Caderno; ele inclusive cita diversos setores industriais em que os problemas
são aplicados. Disponível em:
<https://www.ic.unicamp.br/~fkm/problems/combopt.html#placas>. Acesso em: 29 jun.
2018.

Teoria dos problemas completos na classe NP


Neste documento, elaborado por Armando Matos e Nelma Moreira, o formalismo
matemático é seguido com rigor para as provas de complexidade dos problemas.
Disponível em: <http://www.dcc.fc.up.pt/~acm/cpx3.pdf >. Acesso em: 29 jun. 2018.

Isto é matemática: o problema do caixeiro viajante


Neste vídeo, é apresentado de maneira diferenciada como é o problema do caixeiro
viajante. Disponível em: <https://www.youtube.com/watch?v=_vKMyRj855A>. Acesso
em: 29 jun. 2018.

Algoritmo colônia de formigas – Aplicado ao problema do caixeiro viajante


Neste vídeo, você conhecerá um algoritmo de aproximação, o ACO (Ant Colony
Optimization), e sua aplicação no problema do caixeiro viajante.
Disponível em: <https://www.youtube.com/watch?v=UXSc0jwgZis>. Acesso em: 29 jun.
2018.

18
Instruções
Caro aluno, agora chegou a sua vez de exercitar seu aprendizado. A seguir, você
encontrará algumas questões de múltipla escolha e dissertativas. Leia
cuidadosamente os enunciados e atente-se para o que está sendo pedido em cada
questão.

Questão 1
“Problemas de empacotamento têm aparecido constantemente nas indústrias, com
aplicações principalmente nas cadeias de suprimento e logística. Algumas pesquisas
lidam com o problema da mochila ilimitado em sua versão tridimensional com o objetivo
de maximizar a ocupação do recipiente.”
(Fonte: disponível em: <http://www.proceedings.blucher.com.br/article-details/o-
problema-da-mochila-tridimensional-resolvido-por-uma-heurstica-11956>. Acesso em: 1
jul. 2018)
O problema da mochila é um problema com muita aplicabilidade, por isso é tão discutido.
Analise as alternativas a seguir sobre esse tema e assinale a única correta:
a) O problema da mochila é sempre um problema NP, independente das restrições
de entrada ou de exigências gerais do problema.
b) O problema da mochila é um problema de decisão, com um conjunto de
subsoluções.
c) Uma das formas de resolver o problema da mochila é por meio de algoritmos da
classe P.
d) Somente o problema da mochila fracionária é resolvido em tempo exponencial.

19
e) Somente o problema da mochila fracionária é resolvido em tempo polinomial.

Questão 2
Considere o algoritmo de Dijkstra: “o algoritmo de Dijkstra encontra o comprimento de um
caminho mais curto entre dois vértices em um grafo com peso, não orientado, simples e
convexo. Ele utiliza O(n2) operações de adições e comparações para encontrar o
comprimento do caminho mais curto entre dois vértices de um grafo com peso, não
orientado simples, conexo, com n vértices” (fonte: Livro de matemática discreta e suas
aplicações, de Kenneth H. Rosen).
Explique se esse algoritmo resolve problemas da classe P ou não, informando qual é a
entrada e a possível solução.

Questão 3
Os conceitos de tratabilidade e decidibilidade são importantes conceitos na área de
Análise de Algoritmos, ambas tratam, em geral, da complexidade de um problema ao ser
submetido a um algoritmo. Analise os itens a seguir sobre o assunto:
I – Decidibilidade é um conceito que avalia os problemas de otimização.
II – Tratabilidade de um problema significa se o problema é tratável por um algoritmo
eficiente.
III – O problema do ciclo hamiltoniano é tratável independentemente do tamanho do
caminho.

Assinale a alternativa que avalia corretamente os itens analisados:


a) Somente o item II está correto.
b) Somente o item III está correto.
c) Somente os itens I e II estão corretos.
d) Somente os itens I e III estão corretos.
e) Somente os itens II e III estão corretos.

20
Questão 4
Quão custoso é resolver um problema por meio de um algoritmo? Essa pergunta é feita
no cotidiano de um engenheiro ao propor uma solução computacional para um
determinado problema. Sabe-se que a análise assintótica do algoritmo fornece a
_______________ , utilizada para concluir sobre a classificação do problema em
_____________. Assinale a alternativa que completa as lacunas:
a) Decidibilidade em função da cadeia de entrada; tratável ou não.
b) Tratabilidade; decidível ou não.
c) Complexidade de execução; redutível ou não.
d) Complexidade em função da entrada; tipo P ou NP.
e) Cadeia em função da entrada; decidível ou não.

Questão 5
Considere a imagem a seguir:

Fonte: disponível em:


<https://www.researchgate.net/profile/Fateh_Boutekkouk/publication/310499142/figure/fig1/AS:4301300
83438603@1479562411851/Complexite-des-problemes.jpg>. Acesso em: 1 jul. 2018.

21
Acerca da imagem e dos conceitos sobre classes de problemas P, NP e NP-completo,
assinale a alternativa correta:
a) Se os problemas da classe P são resolvíveis em tempo polinomial, os problemas
da classe NP são resolvíveis em tempo não polinomial.
b) Se os problemas da classe P são resolvíveis em tempo polinomial, então eles
também são verificáveis em tempo polinomial, que é a classe NP.
c) Se os problemas da classe P são resolvíveis em tempo polinomial, então os
problemas da classe NP-completo também o são.
d) Se os problemas da classe P são resolvíveis em tempo polinomial, então os
problemas da classe NP também o são, porém da classe NP-completo não.
e) Se os problemas da classe NP são resolvíveis em tempo não polinomial, então os
problemas da classe NP-completo são resolvíveis em tempo polinomial também.

Neste Caderno, você aprendeu que mais importante do que tentar desenvolver um
algoritmo que resolva um determinado problema é examinar se esse problema tem
solução por um algoritmo ou não, e se houver solução, se ela é computacionalmente
viável.
Um problema com característica de problema NP ou NP-completo ainda não tem
algoritmo que o resolva em tempo polinomial, então você deve procurar abordagens
alternativas, que envolvem técnicas de otimização por algoritmos heurísticos, métodos
de divisão e conquista, resolução por recursividade, backtracking, entre outros.

22
Esses problemas frequentemente podem ser adaptados para se tornarem da classe P,
por meio de uma restrição no conjunto solução, uma flexibilização em relação às
exigências, ou mesmo um ajuste no conjunto de entrada. Feito isso, o problema tem
chances de ser resolvido em tempo polinomial.

Algoritmos de aproximação: algoritmos destinados a problemas de otimização, que


possuem um conjunto de soluções aceitáveis; esses algoritmos não garantem a melhor
solução para determinado problema, pois, em geral, a verificação da melhor solução
seria em um tempo muito grande, impraticável.

Classe P: classificação de problemas cujo algoritmo para solução é executado em tempo


polinomial.

Classe NP: classificação de problemas cujo algoritmo para verificação da solução pode
ser executado em tempo polinomial, porém ele necessita de uma solução pré-fornecida,
o desafio está justamente em obter a solução, pois ela normalmente não é encontrada
em tempo polinomial.

Complexidade do problema: avaliação do quão difícil é resolver determinado problema,


considerando para tanto que há problemas para os quais não há solução.

23
Intratáveis: problemas para os quais não existem algoritmos eficientes capazes de
resolvê-los.

Verificáveis: problemas em que é possível verificar, em tempo polinomial, se uma


suposta solução para o problema é, de fato, uma solução.

Questão 1
Alternativa correta: E

Questão 2
Resposta: como é descrito no enunciado, o algoritmo resolve, para dada entrada, que é
um grafo com peso, não orientado, simples, conexo e com n vértices, o problema de se
encontrar o caminho mais curto, em que esse caminho mais curto é a solução. O
algoritmo resolve em tempo polinomial porque n2 é polinomial em função de n.

Questão 3
Alternativa correta: A

24
Questão 4
Alternativa correta: D

Questão 5
Alternativa correta: B

CORMEN, T. H. et al. Algoritmos: teoria e prática. Rio de Janeiro: Elsevier, 2002.

DIJKSTRA, E. W. et al. A discipline of programming. Englewood Cliffs: Prentice Hall,


1976.

FORBELLONE, A. L.; EBERSPACHER, H. F. Lógica de programação: a construção de


algoritmos estrutura de dados. 3. ed. São Paulo: Pearson – Prentice Hall, 2008.

GAREY, M. R.; JOHNSON, D. S. Computers and intractability: a guide to NP-


completeness. New York: W. H. Freeman & Co, 1979.

GERSTING, J. L. Fundamentos matemáticos para a Ciência da Computação: um


tratamento moderno de matemática discreta, 5. ed. Rio de Janeiro: LTC, 2004.

OLIVEIRA, S. L. G. Uma visão global sobre conteúdos e livros de referências de duas


disciplinas de algoritmos. Revista de Sistemas de Informação da FSMA, n. 9, p. 3-15,
2012.

TERADA, R. Desenvolvimento de algoritmos e estruturas de dados. São Paulo: Makron,


1991.

TOSCANI, L. V.; VELOSO, P. Complexidade de algoritmos. São Paulo: Bookman, 2012.

25
26

Você também pode gostar