O documento discute o problema da clique máxima em grafos, que é encontrar a clique (subgrafo completo) com o maior número possível de vértices. Explica que o problema é importante em otimização combinatória e tem aplicações em telecomunicações, bioinformática e química computacional. Também apresenta algoritmos de força bruta e aproximado para resolver o problema.
2. O que é uma Clique?
•Uma clique de um grafo G é um subgrafo
completo de G.
3. O que é uma Clique Máxima?
•Uma clique máxima é uma clique com a maior
quantidade de vértices possível.
4. O Problema da Clique Máxima
•O problema da Clique Máxima é encontrar, a
partir de um grafo G, a clique de maior tamanho.
•O tamanho (número de vértices) da maior clique
de G é chamado número de clique, ω(G).
7. Aplicações
•Química Computacional
▫Emparelhamento de moléculas
Hidrocarbonetos conhecidos como alcanos tem
fórmula química CpH2p+2, onde C representa
moléculas de carbono e H de hidrogênio.
Os vértices que incidem apenas uma arestra são os
átomos de Hidrogênio.
8. Exemplo prático
•Suponha que, em um laboratório farmacêutico,
seja necessário dimensionar o depósito de
substâncias composto por alguns refrigeradores,
tendo em mãos uma lista de pares de substâncias
que não podem ser armazenadas em um mesmo
refrigerador. Assim, o clique máximo do grafo
formado por tais incompatibilidades é um
limitante inferior para a quantidade de
refrigeradores necessários para armazenar todas as
substâncias.
9. Algoritmo Força Bruta
•Pseudo Código
clique_maxima_exato(Grafo g):
todosConjuntos <- todasCombinacoes(g.Vertices)
maxClique <- {}
para cada conjunto s de todos Conjuntos
se (formaClique(s) && (s.tamanho > maxClique.tamanho)
maxClique <- s
retorna maxClique
10. Algoritmo Força Bruta
•Pseudo Código + Análise (n = |V|)
clique_maxima_exato(Grafo g):
todosConjuntos <- todasCombinacoes(g.Vertices)
maxClique <- {}
para cada conjunto s de todos Conjuntos
se (formaClique(s) && (s.tamanho > maxClique.tamanho)
maxClique <- s
retorna maxClique
11. Algoritmo Força Bruta
•Pseudo Código + Análise
clique_maxima_exato(Grafo g):
todosConjuntos <- todasCombinacoes(g.Vertices)
O(2N)
maxClique <- {}
para cada conjunto s de todos Conjuntos
se (formaClique(s) && (s.tamanho > maxClique.tamanho)
maxClique <- s
retorna maxClique
12. Algoritmo Força Bruta
•Pseudo Código + Análise
clique_maxima_exato(Grafo g):
todosConjuntos <- todasCombinacoes(g.Vertices)
O(2N)
maxClique <- {}
para cada conjunto s de todos Conjuntos
O(2N)
se (formaClique(s) && (s.tamanho > maxClique.tamanho)
maxClique <- s
retorna maxClique
13. Algoritmo Força Bruta
•Pseudo Código + Análise
clique_maxima_exato(Grafo g):
todosConjuntos <- todasCombinacoes(g.Vertices)
maxClique <- {}
para cada conjunto s de todos Conjuntos
se (formaClique(s) && (s.tamanho > maxClique.tamanho)
maxClique <- s
retorna maxClique
O(2N)
O(2N)
O(N²)
14. Algoritmo Força Bruta
•Pseudo Código + Análise
clique_maxima_exato(Grafo g):
todosConjuntos <- todasCombinacoes(g.Vertices)
maxClique <- {}
para cada conjunto s de todos Conjuntos
se (formaClique(s) && (s.tamanho > maxClique.tamanho)
maxClique <- s
retorna maxClique
Total : O(2^n *n^2)
O(2N)
O(2N)
O(N²)
16. Algoritmo Aproximado
•Pseudo Código + Análise (n = |V|)
clique_maxima_aproximada(Grafo g):
conjuntoOrdenadoGrau <- ordenaVertice(V)
maxClique <- conjuntoOrdenadoGrau(1)
para cada vertice vi de i=2 até N
se (formaClique(vi, maxClique))
maxClique = maxClique U vi
retorna maxClique
Total : O(n³)
O(nlogn)
O(n)
O(n²)