Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Grafos: introdução e prática, Manuais, Projetos, Pesquisas de Aplicações de Ciências da Computação

Excelente material sobre grafos uma introdução à prática

Tipologia: Manuais, Projetos, Pesquisas

2025

Compartilhado em 30/06/2025

dgmloureiro
dgmloureiro 🇧🇷

2 documentos

1 / 22

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Grafos:
introdução e prática
Grafos: introdução e prática
boaventura jurkiewicz
Grafos: introdução e prática
A teoria dos grafos é um ramo da Matemática de desenvolvimento relativamente
recente, que tem crescido de forma explosiva. Para isso, tem contribuído a sua larga
aplicação na modelagem de problemas de distribuição, tráfego e organização de
processos, além de outros problemas essenciais, característicos da segunda metade do
século XX e do início do século XXI.
O livro técnico-científi co feito ad-hoc, em todo o mundo, foi sempre a porta de
entrada para os cursos universitários de vel de graduação. Com a teoria dos
grafos não foi diferente: um grande número de autores preparou seus textos de
forma a permitir o uso nesse nível, em muitos casos com a adição de capítulos mais
sofi sticados que permitiriam ao estudante ir adiante.
Esta obra é, também, destinada a alunos de graduão: os autores puderam observar
a existência de uma demanda reprimida por um livro que permitisse, exatamente, a
introdução e alguma prática com os conceitos da teoria e suas aplicações.
O uso de grafos traz novos recursos a diversas especialidades de engenharia e, ainda,
a administração, ciências sociais, economia e biologia, além das licenciaturas em
matemática, física e química.
Os autores procuraram apresentar um texto útil à formação nessas diferentes
especialidades, dentro das possibilidades trazidas por sua experiência profi ssional.
A contrapartida que esperam, em termos de conhecimento, é exatamente das
possíveis omissões por acaso observáveis.
j rkiewicz
2ª edição revista e ampliada
b
o
a
v
e
n
t
u
r
a
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16

Pré-visualização parcial do texto

Baixe Grafos: introdução e prática e outras Manuais, Projetos, Pesquisas em PDF para Aplicações de Ciências da Computação, somente na Docsity!

Grafos:

introdução e prática

j r k i e w i c z

2ª edição revista e ampliada

b o a v e n t u r a

Paulo Oswaldo Boaventura Netto

Samuel Jurkiewicz

Professores da Área de Pesquisa Operacional

Programa de Engenharia de Produção

COPPE/UFRJ

Grafos:

Introdução e Prática

Segunda edição

revista e ampliada

Introdução, prefácio, conteúdo ix

  • Capítulo 1: Primeiras ideias Conteúdo
    • 1.1 Um rápido histórico
    • 1.2 Um ponto muito importante: o modelo
    • 1.3 Os modelos de grafo
    • 1.4 Matemática discreta, computação e algoritmos
  • Capítulo 2: Conceitos básicos de grafos
    • 2.1 Rotulação e representação de grafos
    • 2.2 Alguns conceitos importantes
    • 2.3 Alguns grafos especiais
    • 2.4 Conexidade
    • 2.5 Conectividade
    • Exercícios
  • Capítulo 3: Problemas de caminhos
    • 3.1 Problemas de caminho mínimo
    • 3.2 Algorítmos para achar caminhos mínimos
    • 3.3 Uma aplicação a problemas de localização
      1. 4 Problemas de caminho máximo
    • Exercícios
  • Capítulo 4: Problemas de interligação
    • 4.1 Árvores e arborescências
    • 4.2 Árvores e interligação
    • 4.3 O problema da árvore parcial de custo mínimo
    • 4.4 Algoritmos gulosos
    • 4.5 A questão da complexidade
    • 4.6 Outros problemas de interligação
    • Exercícios
  • Capítulo 5: Subconjuntos especiais
    • 5.1 Subconjuntos independentes
      • por programação linear inteira 5.2 Expressão de problemas de subconjuntos de grafos
    • 5.3 Conjuntos dominantes
    • 5.4 Acoplamentos
    • 5.5 Acoplamentos em grafos bipartidos
    • 5.6 O problema de alocação linear – o algorítmo húngaro
    • 5,7 O problema do transporte
    • 5.8 Transporte com baldeação
    • Exercícios
  • Capítulo 6: Problemas de coloração x Grafos: introdução e prática
    • 6.1 Coloração de vértices
    • 6.2 Coloração de arestas
    • Exercícios
  • Capítulo 7: Fluxos em grafos
    • 7.1 Introdução
    • 7.2 Um exemplo simples
    • 7.3 De quais fluxos estaremos falando?
    • 7.4 Um pouco de formalização
    • 7.5 O problema do fluxo máximo como um PLI
    • 7.6 O problema do fluxo máximo
    • 7.7 O teorema de Ford e Fulkerson
    • 7.8 Grafo de aumento de fluxo, ou grafo de folgas
    • 7.9 Fluxos com custo
    • 7.10 Problemas práticos associados ao problema de fluxo com custo
    • Exercícios
  • Capítulo 8: Ciclos e aplicações
    • 8.1 Problemas eulerianos em grafos não orientados
    • 8.2 O problema do carteiro chinês
    • 8.3 Problemas eulerianos em grafos orientados
    • 8.4 Exemplos completos
    • 8.5 Problemas hamiltonianos
    • 8.6 O problema do caixeiro-viajante
    • Exercícios
  • Capítulo 9: Grafos planares
    • 9.1 Definições e resultados simples
    • 9.2 Teorema de Kuratowski
    • 9.3 Dualidade
    • 9.4 O problema das 4 cores
    • Exercícios
  • Referências
  • Índice remissivo

2 Capítulo 1 : Primeiras ideias

1.1.1 O problema de Euler

O primeiro registro conhecido de um problema relacionado com o que hoje em dia se chama a teoria dos grafos ,

remonta a 1736. Nesse ano Euler, grande matemático e geômetra, visitou a cidade de Königsberg, na então Prússia

Oriental (atualmente ela se chama Kaliningrad e fica em uma pequena porção da Rússia, entre a Polônia e a

Lituânia). A cidade, na época, era o local de moradia de diversos intelectuais conhecidos e se pode imaginar que

Euler tenha se sentido atraído pelo ambiente, que deveria ser movimentado pelo fato de Königsberg pertencer à

poderosa Liga Hanseática de comércio marítimo.

O fato é que ele, ao lá chegar, tomou conhecimento de um problema que estava sendo discutido entre a intelligentsia

da cidade e que, embora parecesse simples, não tinha sido ainda resolvido. No Pregel, rio que corta a cidade, havia

duas ilhas que, na época, eram ligadas entre si por uma ponte. As duas ilhas se ligavam ainda às margens por mais

seis pontes ao todo, como aparece no desenho da época. O problema consistia em encontrar o percurso para um

passeio que partisse de uma das margens e, atravessando uma única vez cada uma das sete pontes, retornasse à

margem de partida.

Euler observou que o número de passagens de uma margem para uma ilha, ou entre duas ilhas, era sempre ímpar (veja no esquema ao lado, onde cada ponte é representada por uma linha e cada margem, ou ilha, por um ponto) : isso indica que se pode passar, mas em algum momento não se conseguirá retornar. Ele provou que, para que o passeio desejado pelos intelectuais de Königsberg fosse possível, cada massa de terra deveria se ligar à outra por um número par de pontes.

Este esquema é uma representação gráfica do que, hoje em

dia, se chama um modelo de grafo.

Suponha que a ponte entre as duas ilhas não existisse: no

esquema, a linha ( i1,i2 ). Em compensação, imagine que

houvesse uma ponte diretamente de uma margem para a

outra, ou seja ( m1,m2 ).

Observe que tudo o que mostramos

corresponde ao velho problema que

aparece de vez em quando em jornais,

revistas de charadas etc., que é o de achar

como percorrer todas as linhas de uma

dada figura, sem tirar o lápis do papel.

Exercício: Verifique, neste caso, se existe algum passeio que atravesse cada ponte uma única vez e volte ao ponto de partida.

m

m

i1 i

m

m

i1 i

Grafos: introdução e prática 3

Euler foi o pesquisador mais produtivo que jamais existiu (com mais de 70

espessos volumes de trabalhos!). O problema das pontes não passou, para

ele, de um pequeno desafio intelectual, sem muita importância : não o

estudou mais a fundo, nem procurou desenvolvê-lo, achar aplicações para

ele, ver aonde poderia levar.

Para a teoria dos grafos, isso não foi bom : a solução do problema das

pontes se perdeu no meio da sua enorme produção e, por mais de 100 anos,

ninguém pensou em algo parecido.

1.1.2 O problema de Kirchhoff

Apenas em 1847, Kirchhoff publicou resultados sobre circuitos elétricos, nos quais utilizava modelos de grafos : essa pesquisa produziu alguns resultados ainda hoje importantes para a teoria, além do interesse para o estudo da eletricidade.

Para dar uma idéia dos problemas que aparecem, mostramos ao lado o esquema de um circuito elétrico conhecido como ponte de Wheatstone , usado para medir resistência elétrica : no aparelho que o contém, as resistências R 1 , R 2 e R 3 podem ser modificadas à vontade e a resistência R 4 é a que vai ser medida. O círculo com a seta é um instrumento de medida (galvanômetro) e na parte de baixo do esquema há um símbolo que representa uma fonte de energia. Todo técnico de televisão, por exemplo, possui um medidor desse tipo.

Um modelo de grafo pode ser construído para representar este circuito e as propriedades dele podem ser estudadas, inclusive com recursos teóricos desenvolvidos pelo próprio Kirchhoff.

1.1.3 O problema de Cayley

Em 1857, Cayley se interessou pela enumeração dos isômeros dos

hidrocarbonetos alifáticos, que são compostos de carbono e hidrogênio

com cadeias abertas. Para recordar um pouco de química, diremos que

dois compostos diferentes são isômeros quando possuem a mesma

composição percentual (e, portanto, a mesma fórmula condensada ).

Por exemplo, os esquemas ao lado correspondem aos três isômeros do

pentano (C 5 H 12 ), representados apenas pelas ligações entre seus átomos

de carbono, sabendo-se que o carbono tem valência 4 (ou seja, um

átomo de carbono pode se ligar a um máximo de 4 outros átomos).

Verifique que em cada esquema há 12 posições vazias que irão receber

os átomos de hidrogênio.

Cayley desenvolveu uma técnica para determinar o número de diferentes

isômeros desses hidrocarbonetos: por exemplo, para o tridecano C 13 H 28 ,

ele é de 802.

1.1.4 O problema de Guthrie

Por essa época, um estudante inglês de matemática – Guthrie – descobriu, por meio de um irmão que trabalhava

com mapas, um problema relacionado com a prática da cartografia. O irmão lhe disse que todo cartógrafo, ao

Aqui temos, de fato,

um intervalo de 111

anos.

Felizmente o trabalho

de Euler foi

encontrado mais tarde!

R 1 R 2

R 3

+ -

R 4

R 1 R 2

R 3

+ -

R 4

Grafos: introdução e prática 5

Então vamos procurar simplificar.

Imagine que um amigo tenha convidado você para um churrasco de aniversário num sítio distante.

Junto com o convite veio um mapa:

O mapa não é nada preciso, mas todo mundo compareceu ao churrasco: o esquema cumpriu o seu papel.

Se você fosse um taxista e o seu cliente lhe desse um endereço que você não conhecesse, você precisaria de um

guia de ruas, em que as ruas aparecessem de maneira mais precisa, inclusive com a mão e a contramão.

Agora, pense em um carpinteiro que vai colocar uma prateleira em uma estante. Ele terá de cortar a madeira de modo

que a prateleira caiba no espaço a ela destinado: se ela for grande demais não entra, se for pequena demais vai ficar

folgada e não poderá ser afixada às paredes da estante. Então o ideal é que a prateleira seja cortada de acordo com

a largura da estante.

estrada principal

ônibus km 14

3 km

loja

sítio

estrada principal

ônibus km 14

3 km

loja

sítio

6 Capítulo 1 : Primeiras ideias

Mas qual é a largura da estante? Podemos medi-la “a olho” e dizer ao carpinteiro que é, por exemplo, de “uns 80

centímetros”. Ele vai torcer o nariz, é claro.

Podemos colocar a estante sobre uma mesa especial, com calibradores óticos de precisão ou coisa semelhante, para dizer ao final que a largura é de 77,648 centímetros. Isto quer dizer que teremos de levar a estante, por exemplo, a um laboratório especializado como os do Instituto Nacional de Metrologia.

Nada de sugerir isso ao carpinteiro, ele vai achar que fugimos do hospício. Ele vai, simplesmente, tirar da sua maleta uma trena de carpinteiro (aquela que vai se desdobrando em pedaços) e tomar a medida de que precisa: por exemplo, 77,6 centímetros. E vai dar certo, a prateleira vai se encaixar direitinho.

Agora, vamos pensar um pouco: o que ele fez?

Ele usou um instrumento de medida de comprimento – a trena – que tem graduações em centímetros e em

milímetros: a trena nos permite, portanto, obter uma útil simplificação da realidade que é a medida “real” da largura da

estante.

Esta “largura real” não nos interessa, na verdade, e nem há como conhecê-la. Apenas, se no lugar da estante

tivéssemos uma montagem mecânica – como um motor de automóvel, por exemplo – a medida talvez tivesse de ser

tomada com mais precisão, por exemplo até o centésimo de milímetro. A mesma diferença de precisão existe, por

exemplo, ao se medir meio litro de leite na cozinha, ou um mililitro de um medicamento injetável.

O problema, no entanto, continuaria a ser o mesmo: estaríamos trabalhando com uma simplificação da realidade.

A uma simplificação da realidade, construída com um objetivo, chamamos modelo.

Em grande parte das nossas atividades, estaremos lidando com modelos, sem nos darmos conta disso.

Por outro lado, praticamente todas as ciências trabalham com modelos. Um instrumento de medida por

comparação – como a trena – cria um modelo da grandeza que ele mede (no nosso exemplo, o

comprimento da prateleira).

Um mapa rodoviário , como o que vemos abaixo, é

um modelo de uma região sobre a qual algum tipo de

conhecimento nos interessa: podemos usá-lo, por

exemplo, ao programar uma viagem de fim de

semana. Ele é, naturalmente, uma simplificação da

realidade que é a região verdadeira.

Ele mostra diversas cidades, das quais A é a maior, sua

área urbana abrangendo a vizinha F. Há diversas rodovias e

se pode ver quais são as mais importantes.

Vamos imaginar que ele faça parte de um guia turístico.

Ele conterá as distâncias entre as interseções das estradas,

o que vai nos permitir calcular as distâncias que iremos

percorrer para ir a um dado local, diretamente ou passando

antes em tal e tal lugar.

??

8 Capítulo 1 : Primeiras ideias

  • Contendo tudo que nos interessa, será que ele fica muito complicado? (No caso do guia turístico com mapa, é claro que, se levarmos em conta dados em demasia, vamos acabar nos confundindo).
  • O modelo é feito, ou usado, por nós , para servir a nossos interesses : será que, ao usá-lo, iremos prejudicar alguém? ( Questão ética! )
  • É possível resolver o modelo?

Aqui temos uma nova dúvida: o que é resolver um modelo?

Pelo que já vimos, a trena nos informa imediatamente a largura da estante , com a precisão de que necessitamos.

O sociograma deixa claras as relações afetivas entre os alunos da turma.

Já o modelo de viagem começa a ficar mais complicado e exige cuidado, ou ele se tornará de pouca utilidade por ser

difícil de resolver. E nele encontramos uma questão importante, que é a de precisarmos ter clareza sobre o que

estamos querendo!

Por outro lado, se o marido gostar de praia e a mulher dele de montanha, a construção do modelo exigirá uma

negociação , ou o modelo dele irá acabar atropelando os desejos dela (ou vice-versa). Observe como este ponto se

aproxima das questões éticas!

A resolução de um modelo passa por todas estas questões.

Falta-nos apenas colocar (no ar) duas dúvidas importantes, a serem esclarecidas mais adiante:

  • Um dado modelo tem solução?
  • Mesmo tendo solução, será que conseguiremos achá-la?

Vamos pensar no problema de um casal que deseja comprar móveis para seu quarto. Eles, com todos os cuidados

que conseguiram imaginar, fizeram uma planta assim:

Na hora de escolher os móveis, acharam um guarda-roupa antigo que se encaixava perfeitamente no estilo do

restante da mobília, fizeram todos os cálculos, acertaram um esquema de pagamento e – na mesma hora –

compraram tudo.

Eles só se esqueceram de verificar se o guarda-roupa era desmontável ... afinal, hoje em dia, todos o são!!! Mas

aquela beleza de antiguidade tinha 2.20 metros de altura e ... não passava na porta!

Resolver um modelo é obter respostas para o problema a ele associado.

janela 2.00 x 1.

estante

0.40 x 0.

cama

porta 2.10 x 0.

0.70 x 0.40 (^) 1.

armário

janela 2.00 x 1.

estante

0.40 x 0.

cama

porta 2.10 x 0.

0.70 x 0.40 (^) 1.

armário

Grafos: introdução e prática 9

Resultado: grande despesa adicional, para desmontar e montar de novo um armário que não tinha sido feito para

isso.

O modelo deles não tinha solução (ou, pelo menos, uma solução dentro dos parâmetros de custo por eles

estabelecidos).

Já um modelo que certamente tem uma solução, é o das loterias (claro, o número sorteado vai ser um daqueles) –

mas qual é essa solução?

Se fizermos um negócio, podemos ganhar dinheiro ou não: há muitos fatores que influem nisso, inclusive a sorte. O

mundo não é exato, há muitas incertezas e todos sabemos disso.

Uma loteria é um modelo dessas incertezas, que tem ao menos a certeza de ter uma solução (embora ninguém saiba

qual vai ser) mas, como temos ao menos esta certeza, jogamos nela. Pode ser uma rifa baratinha de quermesse, que

custa 1 real e tem 30 números – ou pode ser a mega-sena, que tem um total de C60,6 = 50.0 63. 86 0 combinações

possíveis e que pode custar muito caro, se quisermos ter uma chance apenas razoável de acertar alguma

coisa.

Aliás, este enorme número nos aponta uma dificuldade muito comum em alguns dos problemas que

encontraremos.

Imagine, por exemplo, que os alunos daquela turma do sociograma adorem uma fofoquinha. Para simplificar, suponhamos que, em um fim de semana, a Amélia ouviu dizer que ... (esta é imperdível!). Ela nem vai pensar se gosta ou não de alguém na turma, vai logo telefonar para algum colega para contar tudo. E, é claro, esta atitude vai se repetir, porque cada um que ouvir a notícia vai tratar de passá-la adiante.

Por exemplo, a Amélia pode contar ao Sérgio, que depois vai contar ao Adalberto, que fala com o César, que ... e depois de algum tempo, todos estarão sabendo.

Nossa pergunta é a seguinte: de quantas maneiras diferentes a fofoca da Amélia pode se propagar na turma, cada aluno falando com apenas um colega e sem contar as repetições do tipo: “já sei, o Fulano (ou a Fulana) me contou”?

Há apenas 9 alunos na turma.

Você imaginaria que há 40.320 maneiras diferentes disso acontecer?

Um exemplo de maior impacto, ainda, é o da lenda do jogo de xadrez, segundo a qual o seu inventor cobrou do rei da

Pérsia, por sua invenção, um grão de trigo pela primeira casa do tabuleiro, dois pela segunda, quatro pela terceira ... e

a conta total chegou a 18.446.744.073.709.551.615 grãos, muito mais do que todas as colheitas do país no século

seguinte. O rei, é claro, não pagou.

Podemos também estar interessados em resultados qualitativos. Será que os alunos só vão falar com os colegas de

quem gostam? E aí, contando para Amélia toda turma vai saber a fofoca, ou apenas a panelinha dela? Isso depende

da estrutura do sociograma. (Volte ao sociograma e verifique que César não estará nunca por dentro de nenhuma

fofoca ...).

Grafos: introdução e prática 11

A matemática é uma ciência? Uma linguagem? (Não vamos entrar nessa discussão). Diremos que ela é uma

disciplina teórica.

Para que vai nos servir a matemática?

Ela nos permite fazer sem gastar (ou seja, no papel ou no computador). É claro que vai haver um esforço,

principalmente mental, gasto na obtenção da solução de um problema – além do gasto de energia do computador

que, convenhamos, hoje em dia é mínimo. A ciência experimental é diferente: uma experiência (sobretudo de física)

pode exigir, além desse esforço, uma aparelhagem muitas vezes dispendiosa.

Pense no LHC, um caríssimo acelerador de partículas dentro de um túnel circular de 27 quilômetros! (No entanto,

custou “apenas” o preço de um único grande porta-avões!)

A matemática também vai nos permitir abstrair. Ou seja, com ela poderemos estudar uma situação do mundo real, a

partir de um modelo, sem que tenhamos que nos preocupar com a sua origem: de onde aquilo veio não interessa,

enquanto a matemática estiver sendo usada.

Se as informações estão completas e corretas ou não, é problema da construção do modelo (ou modelagem ).

Quais as vantagens da abstração?

Por um lado, esta despreocupação com a origem do problema: para os exemplos acima, iremos descrever uma única teoria capaz de lidar com todos os problemas (Aí está a vantagem das teorias!)

Além disso, toda operação tem uma operação inversa , isto é, nossas ações podem ser "desfeitas" sem custo.

Como lidar com isso, no que aqui nos interessa?

Vamos definir formalmente algo do que já falamos, chamado grafo.

Todos sabem o que é um conjunto : uma coleção de objetos bem definidos e distintos um do outro.

Um grafo é um objeto matemático (ou uma estrutura matemática ) formado por dois conjuntos.

O primeiro deles, que chamaremos de V , é o conjunto de vértices.

O outro é um conjunto de relações entre vértices. Diremos que ele é o conjunto de arestas e o representaremos por E.

Se dois vértices v e w de V estiverem relacionados, diremos que entre eles existe uma aresta pertencente a E, que chamaremos ( v,w ) ou simplesmente vw. O nome “aresta”, você já conhece: faz parte da Geometria, ao se tratar de polígonos e de poliedros.

Resumindo: para se conhecer um grafo precisamos saber o que são os vértices e " qual está ligado com qual ".

Isto apela, naturalmente, para uma visão gráfica da estrutura, que pode ser aproveitada na sua representação por esquemas.

A: – Lá vão eles começar a teorizar ...

B: – Até aqui eu estava entendendo,

mas já viu que agora vai ficar teórico...

A: ... para que serve essa teoria toda?

12 Capítulo 1 : Primeiras ideias

No entanto, é preciso ter cuidado com esses esquemas: eles podem enganar nosso raciocínio, se não prestarmos atenção ao que estivermos fazendo.

Então poderemos denominar um dado grafo como G = (V,E). É claro que podemos usar outras letras, com ou sem

índices, dependendo de nossas necessidades (por exemplo, se tivermos 3 grafos poderemos chamá-los G 1 , G 2 e G 3 ,

ou então G, H e I).

Podemos criar um esquema gráfico, associando cada vértice a um ponto e cada relação a uma linha Observe os

esquemas apresentados no ítem 1.1.

Agora, podemos dizer que esses esquemas representam grafos. Representam , porque se trata de uma idéia

abstrata.

No problema das pontes , cada massa de terra (margem ou ilha) é um vértice e cada ponte é uma aresta.

No problema dos circuitos elétricos , cada ponto de conexão é um vértice e cada componente é uma aresta.

No problema das fórmulas químicas , cada átomo é um vértice e cada ligação entre dois átomos é uma aresta.

No problema do relacionamento dos alunos , cada aluno é um vértice e cada ... (Um momento! Aqui há algo de

diferente!).

De fato, se associarmos uma aresta à relação “a gosta de b”, não estaremos descrevendo corretamente o que

ocorre. No modelo (veja a figura abaixo), essa relação “gostar de” é representada por uma seta: isto porque “a gosta

de b” não é o mesmo que “b gosta de a”. Veja esta situação: Jorge é casado com Maria; Jorge e Maria se gostam

(um gosta do outro). Jorge gosta de Flávia, sua mãe: e Maria, será que gosta da sogra? Frequentemente isso não

acontece ...

Dizemos que a relação “gostar de” não é simétrica. A relação “ser irmão de”, por exemplo, é simétrica: se “a é irmão

de b”, é claro que “b é irmão de a”.

Então a estrutura a ser usada não é

exatamente a mesma dos outros casos:

vamos definir algo chamado grafo orientado ,

onde a relação que nos interessa será

indicada por uma seta, que vai mostrar em que

sentido ela se aplica. Um elemento desse

conjunto de relações se chama um arco. Na

figura, aparecem algumas setas duplas: elas

correspondem a dois arcos opostos.

No problema de relacionamento dos alunos, portanto, cada aluno corresponderá a um vértice e cada relação “gostar

de” a um arco. Para indicar a diferença, chamaremos o outro tipo de estrutura (que usa arestas) de grafo não

orientado.

Aqui é importante voltar e olhar para o grafo que representa o problema de Euler, no início do capítulo. Podemos

observar que existem pares de vértices unidos por 2 arestas, correspondentes às massas de terra unidas por 2

pontes.

Eduardo

Cristina

João

Ana

Carlos

Sérgio

Amélia

César

Adalberto

14 Capítulo 1 : Primeiras ideias

Então podemos ver que algoritmos não são novidade.

Foi, no entanto, a partir da Segunda Guerra Mundial que eles assumiram importância capital. O motivo disso foi a

espantosa evolução dos computadores: alguns problemas até então inacessíveis puderam ser abordados com

sucesso, desde que pudessem ser resolvidos por um algoritmo.

Com isso, a Matemática Discreta (Combinatória, Grafos etc.), que trabalha com conjuntos enumeráveis (em

contraste com a Matemática do contínuo), experimentou um grande avanço. Por seu lado, ela também pode oferecer

contribuições importantes à Ciência da Computação. E a simbiose entre a Matemática Discreta e a Computação

encontra sua expressão na ciência da construção e análise de algoritmos, a Algorítmica.

Ao longo deste livro veremos que grafos e algoritmos são inseparáveis. Muitas das soluções para os problemas serão

expressas não por um número, mas por um método e pelo correspondente algoritmo.

1.4.2 Algoritmos

Falamos acima de algoritmos. E vamos dar logo uma definição formal:

Um algoritmo é um procedimento, aplicado em etapas repetitivas e com eventuais

desvios lógicos.

Observação: Alguma controvérsia é sempre gerada em torno da definição de algoritmo; alguns autores exigem que o

algoritmo chegue sempre a um final oferecendo uma saída (resposta). Assim “comece do número 1 e a cada etapa

some 1 unidade” não seria um algoritmo, pois não pararíamos nunca.

Outra controvérsia é quanto à finalidade. Note que na definição não pedimos que ele faça alguma tarefa de que

necessitamos. Mas, no nosso caso, estaremos sempre usando algoritmos com uma finalidade precisa. Nesse caso,

devemos verificar a sua correção, isto é, se o algoritmo efetivamente faz o que desejamos. Vamos ver alguns

exemplos:

Algoritmo de divisão inteira com resto

Você reconhece, no quadro ao lado, uma conta de dividir. Pode conferir, está certa e é uma divisão com resto, coisa do primeiro grau. Que tal procurarmos descrever o que fazemos, ao efetuar essa divisão? Para começar, vamos usar a linguagem que aprendemos junto com ela..

1. Começo: 3 é menor que 31; “abaixamos” o 4; 34 é maior que 31, então fazemos a 2. Divisão: 34 / 31 = 1 3. Depois: 1 x 1 = 1, “para” 4 dá 3, 1 x 3 = 3, “para” 3 dá 0 e aí “abaixamos” 0. 4. Depois: 30 é menor que 31, então escrevemos 0 no quociente e “abaixamos” 2. 5. Divisão: 302 / 31 = 9; 6. Depois: 9 x 1 = 9, “para” 12 dá 3 “e vai” 1; 9 x 3 = 27 “e” o 1 “que foi”, dá 28, “para” 30 dá 2. O resto é 23.

Observação: É importante notar que as divisões parciais que fizemos são inteiras. Daí a necessidade

de calcular os restos (etapas 3 e 6).

Grafos: introdução e prática 15

Observe que fomos deliberadamente coloquiais. Não especificamos as razões para que o algoritmo funcione (isso foi

visto no primeiro grau ...). Essa é uma das vantagens dessas técnicas: depois que provarmos seu funcionamento,

elas podem ser programadas para execução automática.

Agora, em uma linguagem mais sofisticada (formalizada):

1. Comparar primeiras casas do dividendo com o divisor: guardar o primeiro resultado maior ou igual que o divisor; [ ( dividendo parcial ) 3 < 31; 34 > 31; ] 2. Dividir o dividendo parcial pelo divisor; [34 / 31 = 1; ] Enviar o resultado para o quociente parcial; 3. Multiplicar o quociente parcial pelo divisor; subtrair do dividendo parcial (as operações “para” equivalem ao cálculo de restos ); [1 x 1 = 1, “para 4, 3; 1 x 3 = 3, “para” 3, 0 ] 4. Se houver uma casa não utilizada no dividendo: Tomar a primeira casa do dividendo ainda não usada; acrescentar ao final do dividendo parcial; [“baixa” 0, novo dividendo parcial = 30] Caso contrário , quociente final  quociente parcial; resto  dividendo parcial; Fim****. 5. Se o dividendo parcial for menor que o divisor: enviar 0 para o quociente parcial; [era 1, passa a ser 10] ir para o passo 4 ; [30 < 31, logo “baixa” 2, novo dividendo parcial = 302, e cai no ... ] Caso contrário , voltar ao passo 2. [302 / 31 = 9; então passo 3: 9 x 1 = 9, “para” 12, 3; 9 x 3 = 27 “e” 1, 28, “para” 30, 2].

  1. Enviar 9 para o quociente parcial e 23 para o dividendo parcial. Ir para 4.

Observe que os textos entre colchetes, [ ... ] são comentários : não fazem parte do processo. Os diversos passos

e alternativas apresentados, à exceção do fim , terminam sempre com um ponto-e-vírgula, ( ; ). E lembre que as

divisões parciais, como dito acima, são inteiras (com resto).

O que acabamos de ver é exatamente um procedimento , aplicado em etapas repetitivas e com eventuais desvios

lógicos. Logo, trata-se de um algoritmo.

Ele também é um processo de resolução, uma vez que oferece uma saída, um resultado que era exatamente o que

desejávamos – o resultado da divisão.

Desvio lógico é um apelido para o “se” que encontramos duas vezes na

descrição do processo. Note que ele abre caminho para duas opções, conforme

a cláusula (condição) que ele contém seja satisfeita ou não.

Ao lado de cada etapa, incluímos (em comentário) a etapa correspondente da primeira descrição. Observe que enviar

significa, no caso do quociente parcial, acrescentar um novo algarismo ao final dele.

Todo algoritmo contém comandos. Aqui eles correspondem às palavras em negrito itálico e podem ser diretivas

( comparar , dividir etc.) ou condições ( se , enquanto ).

Nem todo algoritmo é exclusivamente numérico, isto é, abstrato. No nosso exemplo do caixa eletrônico, o algoritmo

que nos permite interagir com a máquina lida com nomes, números, ações físicas ("passar cartão"), acesso remoto

(para ver se você tem mesmo dinheiro) e consequências lógicas abstratas (subtrair a retirada feita do seu saldo). Por

outro lado, se dissermos à cozinheira que, ao fazer seu bolo, ela está utilizando um algoritmo, é muito provável que

ela nos olhe com cara de ponto de interrogação. Onde estariam os números? Nas quantidades usadas, como

dissemos antes.