














Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Os melhores documentos à venda: Trabalhos de alunos formados
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Comunidade
Peça ajuda à comunidade e tire suas dúvidas relacionadas ao estudo
Descubra as melhores universidades em seu país de acordo com os usuários da Docsity
Guias grátis
Baixe gratuitamente nossos guias de estudo, métodos para diminuir a ansiedade, dicas de TCC preparadas pelos professores da Docsity
Excelente material sobre grafos uma introdução à prática
Tipologia: Manuais, Projetos, Pesquisas
1 / 22
Esta página não é visível na pré-visualização
Não perca as partes importantes!
Grafos:
Introdução e Prática
Segunda edição
revista e ampliada
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
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
R 1 R 2
R 3
+ -
R 4
R 1 R 2
R 3
+ -
R 4
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
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.
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.
??
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:
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!
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
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
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 ...).
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.
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.
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”.
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
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:
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.
de calcular os restos (etapas 3 e 6).
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.
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].
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.
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.