Você está na página 1de 45

Meta-heurísticas em

Otimização Combinatória
Tema 2
Introdução à Complexidade
de Algoritmos e Problemas

Profª Laura Bahiense


(laura@pep.ufrj.br)
Introdução informal
à complexidade de algoritmos

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 2/45 de Algoritmos e Problemas
Otimização Combinatória
Escopo – complexidade de algoritmos
Problema

Instância

Tamanho de uma Instância

Algoritmo

Consumo de Tempo de um Algoritmo

Consumo de Tempo Assintótico

Notações Ο, Ω e Θ

Algoritmos polinomiais e exponenciais

Complexidades de Melhor e Pior Caso

Complexidade de um Algoritmo
Meta-heurísticas em Tema 2: Introdução à Complexidade
Profª Laura Bahiense 3/45 de Algoritmos e Problemas
Otimização Combinatória
Problemas
Um problema pode ser definido com uma questão geral que deve ser
respondida

Ou, mais formalmente, pode ser definido por:


 Uma descrição geral de todos os seus parâmetros
 Um enunciado sobre que propriedades a resposta ou solução deve satisfazer

Em geral, um problema possui vários parâmetros associados. Exemplos:


 Coloração: Dado um grafo G (V,E ) com n vértices e m arestas e um número
natural k, encontrar uma coloração própria de G utilizando k cores ou constatar
que tal coloração não existe
 Quadrado perfeito: Dado um número natural n, encontrar um número natural x
tal que x2=n ou constatar que tal x não existe
 Ciclo Hamiltoniano: Dado um grafo G (V,E ) com n vértices e m arestas, encontrar
um ciclo hamiltoniano ou constatar que tal ciclo não existe
 Clique: Dado um grafo G (V,E ) com n vértices e m arestas e um número natural k,
encontrar uma clique de G com k vértices ou constatar que tal clique não existe

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 4/45 de Algoritmos e Problemas
Otimização Combinatória
Instância de um problema
Uma instância de um problema é obtida quando se determinam valores
específicos para os seus parâmetros.

Exemplo: Dado o grafo G(V,E) abaixo, contendo 7 vértices e 9 arestas, ele


possui uma coloração própria utilizando no máximo 3 cores?

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 5/45 de Algoritmos e Problemas
Otimização Combinatória
Tamanho de uma instância
O tamanho de uma instância de um problema é a quantidade de dados
necessária para descrever (totalmente) a instância, ou seja, o espaço necessário
para descrever a instância

Em geral, o tamanho de uma instância é descrito por um único número


natural, mas às vezes, é mais conveniente usar um par, ou até mesmo um
terno, de números naturais
 Exemplo: o tamanho de uma instância do problema de coloração é o par
(n,m), onde n é o número de vértices e m é o número de arestas do grafo
G(V,E)

A instância anterior (abaixo) possui tamanho (7,9):

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 6/45 de Algoritmos e Problemas
Otimização Combinatória
Algoritmos para a resolução de problemas
Um algoritmo é uma seqüência finita de instruções bem definidas e não
ambíguas

Dizemos que um algoritmo resolve um problema quando, ao receber a


descrição de qualquer instância do problema, devolve uma solução para a
instância (que, nesse caso, é dita positiva) ou informa que a instância não tem
solução (neste caso ela é dita negativa)

instância Solução positiva

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 7/45 de Algoritmos e Problemas
Otimização Combinatória
Consumo de tempo de um algoritmo
Para cada instância do problema, o algoritmo consome uma quantidade de
tempo diferente

Suponha que o algoritmo consuma T(I) unidades de tempo para processar a


instância I. A relação entre T(I) e o tamanho de I nos dá uma medida da
eficiência do algoritmo

Em geral, medimos o consumo de tempo de um algoritmo pelo número de


operações elementares que ele executa ao processar uma instância

Exemplos de operações elementares: soma, subtração, multiplicação, divisão,


comparação entre dois números inteiros, atribuição de valor a uma variável

Não é necessário contar todas as operações elementares, apenas as mais


relevantes

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 8/45 de Algoritmos e Problemas
Otimização Combinatória
Consumo de tempo de um algoritmo:
ilustração
Função de Avaliação do Tempo:

n T(n)

Tamanho Tempo de
da entrada execução

Um algoritmo opera a partir de uma entrada,


para produzir uma saída,
dentro de um tempo que se deseja avaliar.

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 9/45 de Algoritmos e Problemas
Otimização Combinatória
Consumo de tempo de um algoritmo:
conceitos de melhor caso e pior caso
Em geral, um problema tem muitas instâncias diferentes de um mesmo
tamanho. Isto exige a introdução dos conceitos de “pior caso” e “melhor caso”

Dado um algoritmo A para o problema e um número natural n,


seja T*(n) o máximo de T(I) para todas as instâncias I de tamanho n do
problema. Então:
T* mede o consumo de tempo de A no pior caso

Analogamente, seja T*(n) o mínimo de T(I) para todas as instância I de


tamanho n do problema. Então:
T* mede o consumo de tempo de A no melhor caso

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 10/45 de Algoritmos e Problemas
Otimização Combinatória
Consumo de tempo assintótico
Seja A um algoritmo para um certo problema P. Em termos de minutos,
segundos ou horas, a quantidade de tempo que A consome para processar
uma dada instância I de P depende:
 da máquina usada para executar A
 da linguagem de programação utilizada
 dos detalhes de implementação

Para exprimir o consumo de tempo do algoritmo de uma maneira


independente desses fatores, é preciso introduzir um modo “grosseiro” de
comparar as funções matemáticas que exprimem a dependência entre o
consumo de tempo de um algoritmo e o tamanho de sua entrada (instância)
Essa comparação grosseira só leva em conta a “velocidade de crescimento”
das funções, portanto ela despreza:
 fatores multiplicativos: a função 2n2, p.ex., cresce tão rápido quanto 10n2
 valores pequenos do argumento: a função n2 cresce mais rápido que 100n,
embora n2seja menor que 100n quando n é pequeno

Essa maneira de comparar funções é chamada de assintótica. Há três tipos de


comparação assintótica: “≤” , “≥” , “=” .
Meta-heurísticas em Tema 2: Introdução à Complexidade
Profª Laura Bahiense 11/45 de Algoritmos e Problemas
Otimização Combinatória
Notação Ο (“≤”)

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 12/45 de Algoritmos e Problemas
Otimização Combinatória
Notação Ο (“≤”):
exemplos

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 13/45 de Algoritmos e Problemas
Otimização Combinatória
Notação Ω (“≥”)

T(n) ≥ ƒ(n), para todo n ≥ n0

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 14/45 de Algoritmos e Problemas
Otimização Combinatória
Notação Θ (“=”)

ƒ(n) ≤ T(n) ≤ k ƒ(n) , para todo n ≥ n0

Retornando ao consumo de tempo de um algoritmo...

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 15/45 de Algoritmos e Problemas
Otimização Combinatória
Consumo de tempo assintótico de um algoritmo:
melhor caso e pior caso
Seja A um algoritmo para um problema cujas instâncias possuem tamanho n.
Se a função que mede o consumo de tempo de A no pior caso está em Ο(n2),
podemos dizer que:
A consome Ο(n2) unidades de tempo no pior caso
ou
A consome tempo Ο(n2) no pior caso

Analogamente, se a função que mede o consumo de tempo de A no melhor


caso está em Ω(n2), podemos dizer que:
A consome Ω(n2) unidades de tempo no melhor caso
ou
A consome tempo Ω(n2) no melhor caso

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 16/45 de Algoritmos e Problemas
Otimização Combinatória
Algoritmos lineares
Um algoritmo A é dito linear quando ele consome tempo Θ(n) no pior caso

Em outras palavras:
 Quando o tamanho da entrada dobra, o algoritmo consome o dobro do
tempo
 Quando o tamanho da entrada é multiplicado por uma constante k, o
consumo de tempo do algoritmo também é multiplicado por k

Algoritmos lineares são considerados muito rápidos

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 17/45 de Algoritmos e Problemas
Otimização Combinatória
Algoritmos “n lg n”
Um algoritmo A é dito “n lg n” quando ele consome tempo Θ(n lg n) no pior
caso

Em outras palavras:
 Quando o tamanho da entrada dobra, o consumo dobra e é acrescido de
2n
 Quando o tamanho da entrada é multiplicado por uma constante k, o
consumo de tempo do algoritmo é multiplicado por k e acrescido de um
pouco mais que k n

Algoritmos n lg n são considerados rápidos

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 18/45 de Algoritmos e Problemas
Otimização Combinatória
Algoritmos quadráticos
Um algoritmo A é dito quadrático quando ele consome tempo Θ(n2) no pior
caso

Em outras palavras:
 Quando o tamanho da entrada dobra, o algoritmo consome o quádruplo
do tempo
 Quando o tamanho da entrada é multiplicado por uma constante k, o
consumo de tempo do algoritmo é multiplicado por k2

Algoritmos quadráticos ainda são considerados “rápidos”

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 19/45 de Algoritmos e Problemas
Otimização Combinatória
Algoritmos polinomiais
Um algoritmo A é dito polinomial quando ele consome tempo Θ(nk) no pior
caso, onde k é um número natural

Exemplos:
 Ο(n), Ο(n lg n), Ο(n2), Ο(n100)

Não-exemplos:
 Ω(2n), Ω(10n)

Algoritmos polinomiais são considerados “rápidos” (quando k não é muito


grande...)

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 20/45 de Algoritmos e Problemas
Otimização Combinatória
Algoritmos exponenciais
Um algoritmo A é dito exponencial quando ele consome tempo Θ(an) no pior
caso, onde a é um número real maior do que 1

Portanto, é exponencial qualquer algoritmo que consome Ω(1.1n) unidades de


tempo

Interpretação:
 Quando o tamanho da entrada (n) dobra, o consumo de tempo do
algoritmo é elevado ao quadrado
 Quando o tamanho da entrada (n) é multiplicado por 10, o consumo de
tempo do algoritmo é elevado à décima potência

Algoritmos exponenciais não são polinomiais e não são rápidos!

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 21/45 de Algoritmos e Problemas
Otimização Combinatória
Algoritmos polinomiais e exponenciais:
resumo

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 22/45 de Algoritmos e Problemas
Otimização Combinatória
Complexidades de melhor e de pior caso
A complexidade de melhor caso de um algoritmo A é o valor mínimo dentre
todas as complexidades assintóticas de A, para entradas suficientemente
grandes

Em outras palavras: é um limite inferior do número de passos para a


computação de uma entrada (instância) mais desfavorável

A complexidade de pior caso de um algoritmo A é o valor máximo dentre


todas as complexidades assintóticas de A, para entradas suficientemente
grandes

Em outras palavras: é um limite superior do número de passos para a


computação de uma entrada (instância) mais desfavorável

Obs.: o pior caso pode corresponder a um número de passos muito maior do


que os casos mais freqüentes (exemplo: algoritmo Simplex)

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 23/45 de Algoritmos e Problemas
Otimização Combinatória
A complexidade de um algoritmo
A complexidade de um algoritmo é definida, informalmente, como um limite
superior do número de passos necessários para a computação de uma entrada
(instância) mais desfavorável

Portanto, estamos nos referindo ao consumo de tempo no pior caso, ou seja,


ao consumo de tempo para as instâncias mais difíceis do problema

A complexidade de algoritmos foi abordada até aqui de maneira bastante


informal. Um estudo mais técnico e aprofundado é objeto de um curso
específico sobre Complexidade de Algoritmos e foge ao escopo deste curso

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 24/45 de Algoritmos e Problemas
Otimização Combinatória
Introdução informal
à complexidade de problemas

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 25/45 de Algoritmos e Problemas
Otimização Combinatória
Escopo – complexidade de problemas
Complexidade de um Problema

Problemas de Decisão e Problemas de Otimização

Problemas Tratáveis, Intratáveis e Insolúveis

A Classe de Problemas P

Certificados e Algoritmos Verificadores

A Classe de Problemas NP

Problemas NP-Completos e NP-Difíceis

A questão: P = NP ?

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 26/45 de Algoritmos e Problemas
Otimização Combinatória
A complexidade de um problema
A complexidade de um problema é definida como o consumo de tempo do
melhor algoritmo possível para o problema

E o melhor algoritmo conhecido no momento não é, necessariamente, o


melhor algoritmo possível

E estamos nos referindo ao consumo de tempo no pior caso, ou seja, ao


consumo de tempo para as instâncias mais difíceis do problema

A complexidade de problemas será abordada aqui de maneira bem informal.


Um estudo mais técnico e aprofundado é objeto de um curso específico sobre
Complexidade de Problemas e foge ao escopo deste curso

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 27/45 de Algoritmos e Problemas
Otimização Combinatória
Problemas de decisão
Um problema de decisão é aquele cuja solução admite uma e apenas uma
dentre as seguintes duas respostas: SIM ou NÃO

Por convenção, dizemos que uma instância é positiva quando ela possui
solução SIM e negativa quando possui solução NÃO

Versão de decisão dos problemas exemplificados anteriormente:

 Coloração: Dado um grafo G (V,E ) com n vértices e m arestas e um número natural


k, G admite uma coloração própria utilizando k cores ?

 Quadrado perfeito: Dado um número natural n, existe um número natural x tal


que x2=n ?

 Ciclo Hamiltoniano: Dado um grafo G (V,E ) com n vértices e m arestas, G possui


um ciclo hamiltoniano ?

 Clique: Dado um grafo G (V,E ) com n vértices e m arestas e um número natural k,


G possui uma clique de com k vértices ?
Meta-heurísticas em Tema 2: Introdução à Complexidade
Profª Laura Bahiense 28/45 de Algoritmos e Problemas
Otimização Combinatória
Problemas de otimização
Um problema de otimização é aquele cuja solução satisfaz um critério de otimização
(máximo ou mínimo) pré-definido

Quando as soluções do problema só podem assumir valores discretos, dizemos que se


trata de um problema de otimização combinatória

Versão de otimização dos problemas exemplificados anteriormente:

 Coloração: Dado um grafo G (V,E ) com n vértices e m arestas, qual é o menor número k de
cores que precisamos utilizar para colorir G de maneira própria ?

 Ciclo Hamiltoniano: Dado um grafo G (V,E ) com n vértices e m arestas valoradas, qual é o
ciclo hamiltoniano de G de menor peso ?

 Clique: Dado um grafo G (V,E ) com n vértices e m arestas, qual é a maior clique de G ?

Ordem de dificuldade: Decisão ‹ Otimização

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 29/45 de Algoritmos e Problemas
Otimização Combinatória
Problemas tratáveis, intratáveis e insolúveis
Dizemos que um problema é polinomial quando existe um algoritmo
polinomial que o resolve

Problemas polinomiais são considerados tratáveis


 Exemplos: quadrado perfeito, caminho mais curto, árvore geradora mínima

Um problema é dito não polinomial quando nenhum algoritmo polinomial


resolve o problema

Problemas não polinomiais são considerados intratáveis


 Supõe-se que os seguintes problemas sejam não polinomiais: ciclo hamiltoniano,
clique máxima, dentre outros

Problemas insolúveis ou indecidíveis, são aqueles para os quais não existe


algoritmo algum
 Exemplos: equação diofantina, problema da parada

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 30/45 de Algoritmos e Problemas
Otimização Combinatória
Equação diofantina
Em 1900, no Segundo Congresso Internacional de Matemática, realizado em
Paris, David Hilbert propôs uma lista de problemas, cuja solução desafiaria as
futuras gerações de matemáticos

O décimo problema da lista de Hilbert era de enunciado bastante simples:


“descreva um algoritmo que determina se uma dada equação diofantina do tipo
P(a1,...,an) = 0, onde P é um polinômio com coeficientes inteiros, tem uma solução
dentro do conjunto dos inteiros”

Trazendo para nossa linguagem usual na Computação ficaria: “escreva um


programa que tem por entrada uma equação diofantina, e que dá por saída um
sim ou um não, conforme a equação tenha ou não soluções inteiras”. O
programa não precisa encontrar a solução da equação, somente dizer se tal
solução existe ou não

No entando, foram necessários cerca de setenta anos para se chegar à conclusão


de que o décimo problema de Hilbert é algoritmicamente insolúvel. Depois de
intensos esforços, isto foi provado por Yuri Matiyasevich, um matemático russo
de apenas 22 à época
Meta-heurísticas em Tema 2: Introdução à Complexidade
Profª Laura Bahiense 31/45 de Algoritmos e Problemas
Otimização Combinatória
Problema da parada

O Problema da Parada (The Halting Problem) é um problema de


decisão clássico da Ciência da Computação que consiste, basicamente,
em determinar se um dado programa sempre vai parar (ou seja,
terminar sua execução) para uma dada entrada arbitrária

Alan Turing provou, em 1936, que é impossível resolver (decidir) o


problema da parada generalizado para qualquer par programa
- entrada

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 32/45 de Algoritmos e Problemas
Otimização Combinatória
A Classe P de problemas
A Classe P de problemas é o conjunto de todos os problemas de decisão
polinomiais

Problemas que pertencem à Classe P :


 Quadrado perfeito
 Caminho mais curto
 Árvore geradora mínima
 Fluxo máximo
 Equação do segundo grau
 Máximo divisor comum
 ...

O status da maioria dos problemas de decisão é, ainda, desconhecido, ou seja,


não sabemos se o problema está em P ou fora de P

Antes de entrar na classe dos problemas NP, precisamos introduzir dois


conceitos...

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 33/45 de Algoritmos e Problemas
Otimização Combinatória
Certificados e algoritmos verificadores
Um algoritmo verificador para um problema de decisão recebe dois objetos:
 Uma instância do problema

 Um certificado (uma cadeia de caracteres)

A ideia é que o certificado seja uma “prova” de que a instância é positiva,


quando este for o caso

Ao receber a instância e o certificado, o algoritmo verificador pode responder


SIM ou NÃO

Quando o algoritmo verificador responde SIM, dizemos que ele aceitou o


certificado

Observação importante: o conceito de verificador é assimétrico: ele cuida


apenas das instâncias positivas do problema!

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 34/45 de Algoritmos e Problemas
Otimização Combinatória
Algoritmos verificadores polinomiais
Um algoritmo verificador para um problema de decisão é polinomial quando
ele satisfaz as seguintes condições:

 Para cada instância positiva do problema, existe um certificado que o


verificador aceita em um tempo limitado por uma função polinomial no
tamanho da instância

 Para cada instância negativa do problema, não existe certificado que o


verificador aceite

A limitação polinomial do consumo de tempo faz com que o tamanho de um


certificado aceitável também seja limitado por um polinômio no tamanho da
instância. Ou seja, os certificados aceitáveis ou razoáveis devem ser “curtos”

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 35/45 de Algoritmos e Problemas
Otimização Combinatória
Certificados e algoritmos verificadores:
exemplos
Equação do segundo grau:
 Instância : (a, b, c)
 Certificado : um número inteiro x tal que ax2 + bx + c = 0
 Algoritmo verificador : ao receber a, b, c e x o verificador calcula ax2 + bx + c
e compara o resultado com 0

Ciclo hamiltoniano:
 Instância : grafo G(V, E)
 Certificado : sequência de vértices de um ciclo hamiltoniano em G
 Algoritmo verificador : ao receber a sequência de vértices, o verificador a
aceita se ela de fato representar um ciclo hamiltoniano, o que é fácil de
verificar em tempo polinomial no tamanho do grafo

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 36/45 de Algoritmos e Problemas
Otimização Combinatória
A Classe NP de problemas
A Classe NP de problemas é o conjunto de todos os problemas de decisão para
os quais existem algoritmos verificadores polinomiais

Podemos dizer, de maneira informal, que um problema de decisão está em


NP quando ele possui um “certificado curto”

Com isso, podemos dizer que a classe NP corresponde à classe dos


problemas “razoáveis”

Não é difícil mostrar que a classe NP inclui a classe P, ou seja, que todo
problema polinomial de decisão está em NP

Problemas que pertencem à classe NP :


 Ciclo hamiltoniano, clique, conjunto independente, isomorfismo de subgrafos

Importante: NP não significa não-polinomial e sim não-determinístico


polinomial
Meta-heurísticas em Tema 2: Introdução à Complexidade
Profª Laura Bahiense 37/45 de Algoritmos e Problemas
Otimização Combinatória
Redução entre problemas
Como, no caso geral, é difícil decidir quando um dado problema está em P,
é muito interessante estudar a complexidade relativa entre os problemas da
classe NP

Dados dois problemas X e Y em NP, a ideia é poder afirmar algo do tipo:


“X é tão difícil quanto Y”. Para isso precisamos definir o conceito de
redução entre problemas de decisão

Um problema de decisão Y é redutível a um problema de decisão X quando


existe um algoritmo que transforma qualquer instância J de Y em uma
instância I de X de forma que J é positiva se e somente se I é positiva. Neste
caso denotamos Y α X

Obviamente, estamos interessados apenas em reduções polinomiais, ou


seja, reduções onde o algoritmo de redução é polinomial. Neste caso
denotamos a redução por Y α P X

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 38/45 de Algoritmos e Problemas
Otimização Combinatória
Redução entre problemas:
resultado importante

Para quaisquer dois problemas X e Y em NP,


quando X está em P e existe uma redução polinomial de Y a X
então Y também está em P

De fato, dada uma instância J de Y, basta reduzir J a uma instância I de X e,


em seguida, submeter I a um algoritmo polinomial que resolva X :

Algoritmo Solução
instância tempo Instância Solução tempo
polinomial polinomial polinomial T de Y
J de Y I de X S de X
para X

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 39/45 de Algoritmos e Problemas
Otimização Combinatória
Problemas NP-Completos
Um problema de decisão X é completo em NP ou NP-Completo quando X está em
NP e qualquer outro problema em NP pode ser polinomialmente reduzido a X

Interpretação: se X é NP-Completo então todos os demais problemas em NP não


são mais difíceis do que X

A existência de problemas completos em NP é um fato muito importante na


Teoria da Complexidade:

Se for encontrado um algoritmo polinomial


para resolver um único problema NP-Completo
então todos os propblemas de NP
poderão ser resolvidos em tempo polinomial
(P = NP )

Consequência: os problemas NP-Completos são os mais difíceis de NP

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 40/45 de Algoritmos e Problemas
Otimização Combinatória
A classe NP-C de problemas
A Classe NP-C é o conjunto de todos os problemas de decisão NP-Completos em
NP

Logo, por o que foi visto no slide anterior, NP-C é a classe dos problemas
mais difíceis de NP

Exemplos de problemas em NP-C : ciclo hamiltoniano, maior clique, maior


conjunto independente

Para uma lista bem completa de problemas NP-C , ver o livro de Garey &
Johnson, “Computers and Intractability: A Guide to the Theory of NP-
Completeness”, 1979

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 41/45 de Algoritmos e Problemas
Otimização Combinatória
Problemas NP-Difíceis
NP-Difícil é uma classe de problemas que são, informalmente, “pelo menos
tão difíceis quanto os problemas mais difíceis em NP “

Na prática: se um problema de otimização H tem uma versão de decisão que


é um problema NP-Completo, então H é um problema NP-Difícil

Exemplos de problemas NP-Difícieis :


 Caixeiro viajante
 Roteamento de veículos
 Coloração e Coloração Equilibrada em Grafos
 Clique máxima e Conjunto Independente Máximo
 Mochila inteira
 Empacotamento
 Atribuição de Frequências
 Escalonamento
 Projeto de redes ...

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 42/45 de Algoritmos e Problemas
Otimização Combinatória
A questão: P = NP ?
Como já observado anteriormente, P é parte de NP

O bom senso sugere que P é apenas uma pequena parte de NP (P ≠ NP )

Existem, porém, muitos pesquisadores que acreditam que P = NP

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 43/45 de Algoritmos e Problemas
Otimização Combinatória
A questão: P = NP ?
Como já observado anteriormente, P é parte de NP

O bom senso sugere que P é apenas uma pequena parte de NP (P ≠ NP )

Existem, porém, muitos pesquisadores que acreditam que P = NP

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 44/45 de Algoritmos e Problemas
Otimização Combinatória
Sugestão de Estudo
1. Computers and Intractability: A Guide to the Theory of NP-Completeness.
Garey, Michael R. and Johnson, David S. (1979). Freeman

2. Algoritmos e Heurísticas. Ruy E. Campello e Nelson Maculan. (1994 ) EDUFF

Meta-heurísticas em Tema 2: Introdução à Complexidade


Profª Laura Bahiense 45/45 de Algoritmos e Problemas
Otimização Combinatória

Você também pode gostar