You are on page 1of 5

Problemas P:

-há algoritmo polinomial para solução.


-São problemas de decisão

Problemas NP completo:
-não há algoritmo polinomial

Problemas NP difícil
-são problemas de otimização, ou seja, além de determinar se existe, deve-se
determinar o maior ou menor.

O número de vértices com grau impar em um grafo é par

uma árvore é um grafo:


-conexo
-aciclico
-possui n-1 arestas

o somatório dos graus do vertice em um grafo é 2m(duas vezes o numero de arestas)


o número máximo de arestas em um grafo é (n(n-1))/2
Em todo grafo há um número par de vértices com grau impar

Problema do carteiro chinês


Problema do caxeiro viajante

G = <V,E>
|V| = n : ordem do grafo
|E| = m : comprimento do grafo

Grau de um vértice: número de arestas no vértice


Sequencia de graus: um grafo pode ser representa do pela sequencia de graus de seus
vértices,
porém uma sequencia de graus pode gerar grafos distintos ou isormofos.

Grafos podem ser dirigidos ou não dirigidos(digrafos)


em grafos dirigidos as arestas são chamadas de arcos.

vértices ou nós
arestas ou arcos.

Em grafos dirigidos as arestas apresentam um sentido

xi: vértice i do grafo


aij: aresta aij do grafo

número máximo de arestas permitida em um garfos simples: n(n-1)/2

Como um problema é modelado em grafos?


-especificar o tipo de grafo(conexo ou desconexo, bipartido, dirigido ou não
dirigido, dimples ou não)
-especificar o que é vértice
-especificar o que é aresta
-especificar que classe de problema está presente(caminho, coloração, fluxo em
rede, ...)

multigrafos: um ou mais pares de vértices apresentam mais de uma aresta entre si.
a arestas nesse caso são ditas arestas paralelas.
grafos simples: não contém laços de arestas paralelas.
pseudografo: grafo que contém pelo menos um laço.

grafo reflexivo: pseudografo onde todos os vértices possuem um laço.

hipergrafo: grafo onde as restas relacionados mais de dois vértices

grafo rotulado: um grafo pode ser rotulado tanto em vértices como em arestas, ou em
ambos.
no caso da rotulação: os rotulos servem para identificar os elementos do grafo.
portanto os rotulos servem como uma forma de armazenar informações no grafo.
O que são rótulos: são informações associadas aos vértices ou arestas dos grafos.

grafo ponderado: tem um valor(peso) associado a seus vértices ou arestas.


quando nada for dito entende-se que um grafo é ponderado nas areastas.

grafo direcionado, orientado ou digrafo: o sentido do relacionamento entre os


vértices importa

ordem de um grafo: cardinalidade do conjunto dos vértices do grafo


tamanho de um grafo: cardinalidade do conjunto de arestas.

como transforma um grafo não direcionado em um grafo direcionado:


-basta decompor cada areas em dois arcos, um em cada sentido.

adjacência(ou vizinhança) em grafos.


-adjacência entre vértices só existe em grafos não orientados.

Coloração em grafos
-coloração de grafos consite em colorir um grafo de forma vértices adajacentes
tenham cores distintas.
-atribuir uma cor para cada vértice
-bem, colorir um grafo é fácil, é só ir atribuindo cores distintas para cada
vértice.
-O problema consiste um colorir um grafo utilizando o menor número de cores
possível

-Coloração própria: todos os vértices adjacentes possuem cores distintas.

-Número Cromático: menor número de cores utilizado para coloração própria de um


grafo.

Nosso Problema
-coloração própria utilizando o menor número de cores possível
-número cromático

número cromático: menor número de cores necessário para realizar a coloração


própria de um grafo.

grau de saturação de um vértice: número de cores distintas assoaciadas

encontrar o número cromático para coloração prórpria de um grafo é um problema NP-


difícil

procedimento matrizAdjParaListaAdj(M[n][n])
vetor[n]

para i = 1 até n faça


vetor[i] = nova Lista
fim_para

para i = 1 até n-1 faça


para j = i+1 até n faça
se M[i][j] == 1 então
vetor[i].add(j)
vetor[j].add(i)
fim_se
fim_para
fim_para

retorna vetor;
fim_procedimento

procedimento listaAdjParaMatrizAdj(vetor[n])
M[n][n]

para i = 1 até n faça


para cada v E vetor[i] faça
M[i][v] = 1
M[v][i] = 1
fim_para
fim_para
fim_procedimento

procedimento WP(G<V,E>)
ordenaPorGrau(V)

para i = 1 até |V| faça


color[i] = -1
fim_para

nc = 0;
para cada v E V faça
encontrou = false
c = 1
enquanto c <= |V| e !encontrou faça
disponivel = true
para cada w E adj(v) e disponivel faça
se color[w] == c então
disponivel = false
fim_se
fim_para

se disponivel então
encontrou = true
senão
c = c + 1
fim_se
fim_enquanto

se encontrou então
color[v] = c
se c > nc então
nc = c
fim_para
fim_se

fim_para

retorna nc
fim_procedimento

procedimento listColoring(G<V,E>)
cores = {1, 5, 11, 16, 29}

ordenaPorGrau(V)

para i = 1 até |V| faça


color[i] = -1
fim_para

nc = 0;
para cada v E V faça
encontrou = false
c = cores[0]
enquanto c <= |cores| e !encontrou faça
disponivel = true

para cada w E adj(v) e disponivel faça


se color[w] == c então
disponivel = false
fim_se
fim_para

se disponivel então
encontrou = true
senão
c = c + 1
fim_se
fim_enquanto

se encontrou então
color[v] = c
se c > nc então
nc = c
fim_para
fim_se

fim_para

retorna nc
fim_procedimento

You might also like