Recursos especiais neste artigo:
Conteúdo sobre boas práticas
Autores: Dante Moreira Zaupa e Patrícia Jaques Maillard
Este artigo apresenta uma introdução à teoria de grafos. Um grafo é um tipo abstrato de dados, assim como listas, pilhas e filas, que permite representar relações binárias entre dois objetos. Em um grafo, os objetos são representados por nodos (também chamados de vértices) e as relações entre dois objetos por uma aresta. Embora o grafo seja um dos mais importantes tipos de dados da computação, a API padrão da JDK (até a presente versão – 7) não apresenta uma implementação disponível para ele. Dessa forma, esse artigo visa apresentar uma visão prática de grafos, mostrando as representações existentes mais utilizadas, e fornecendo ao leitor diretrizes para a escolha da melhor representação para sua aplicação.
Em que situação o tema útil
Grafos são úteis para representar relações entre
diferentes elementos. Um
grafo pode ser empregado, por exemplo, para representar as relações entre
usuários de uma aplicação de rede social, como o Facebook. Nesse caso, os nodos
do grafo representam pessoas, uma ligação entre dois nodos (aresta) significa
uma relação entre elas, que poderia ser classificada em uma ou mais categorias
(ou seja, um amigo, ou um colega, ou um conhecido). Um grafo poderia também ser
empregado para representar uma malha aérea. Os aeroportos são os vértices do
grafo e cada voo é representado por uma aresta, que poderia ter um peso para
sinalizar a distância em quilômetros daquele trecho aéreo. Como abstração, grafos são bastante flexíveis, capazes
de expressar desde relações binárias simples (ou seja, uma ligação que pode
existir ou não, como no caso da existência de uma amizade entre duas pessoas em
uma rede social), quanto relações mais complexas, como, por exemplo, a
distância entre duas paradas para um trecho de linha de ônibus.
Imagine-se em um dia normal. Você resolve fazer uma pausa no trabalho, e vai dar uma olhada no Facebook. Ao lado do seu mural, estão oito solicitações para jogos, dois aniversários, e três “amigos recomendados”. Mas, como assim, “amigos recomendados”? Afinal, como o Facebook recomenda amigos? A resposta é: uma estrutura de dados chamada grafo.
As pessoas que você adicionou são organizadas em uma estrutura chamada grafo. Usando o grafo dos seus círculos sociais e dos seus amigos, o Facebook é capaz de determinar que outros usuários você pode conhecer. Isso porque grafos são estruturas que representam os relacionamentos entre objetos, e esses objetos podem ser tão diversos quanto cidades, times de futebol ou amigos de Facebook, por exemplo. Aliás, grafos descrevem não só amigos de Facebook, mas amigos de qualquer rede social.
Devido à importância dos grafos como estrutura de dados para aplicações computacionais, esse artigo visa apresentar uma breve introdução ao tema. Assim, nas próximas seções iremos mostrar um exemplo de um grafo de rede social, fornecendo maiores explicações de como os grafos podem ser representados tanto por diagramas quanto computacionalmente.
Uma breve história de grafos
O primeiro registro que se tem da ideia de grafos vem do conhecido matemático Leonhard Euler, em seu artigo “The solution of a problem relating to the geometry of position”, publicado em 1736. Esse artigo trata do problema das Pontes de Königsberg, ilustrado na Figura 1, no qual se deve atravessar as 7 pontes da cidade em uma caminhada contínua, passando por cada uma delas apenas uma vez. Talvez o leitor reconheça nesse problema certa semelhança com um problema clássico de xadrez, “A Viagem do Cavaleiro”, cuja solução pode ser vista na Figura 2. Esse problema foi desenvolvido pelos chineses e pelos árabes, e trata de uma situação na qual um cavaleiro deve percorrer todas as casas de um tabuleiro sem repetições. O cavaleiro quer evitar repetições porque ele consegue ver todos os pontos turísticos em uma só visita, e ele não gosta de perder tempo. Esse problema é muito similar ao posterior problema do Caixeiro-viajante, no qual se procura a melhor forma de passar por um número qualquer de cidades, sem passar em alguma mais de uma vez.
Figura 1. Ilustração do problema das Pontes de Königsberg (Fonte: Wikipédia).
O termo “grafo” surgiu pela primeira vez em 1878, em um artigo de James Joseph Sylvester, no qual ele propõe uma estrutura similar aos diagramas Kekulé, usados na química. Um dos primeiros programas a usar grafos foi escrito em 1969, por Heinrich Heesch. Ele publicou um método para resolver o Problema das Quatro Cores, que trata de colorir diferentes setores de um plano com quatro cores diferentes sem que duas áreas vizinhas tenham a mesma cor. Acredite, é mais complicado do que parece.
Figura 2. Uma solução para A Viagem do Cavaleiro em um tabuleiro 8x8 (Fonte: Wikipédia).
Descrição formal
Um grafo é, essencialmente, um diagrama composto por vértices (tipicamente representados por círculos ou retângulos) que podem ou não ser conectados por arestas (representadas por segmentos de retas ou arcos, com ou sem setas). Os vértices podem ser quaisquer entidades que possam estar relacionadas entre si. Nesse artigo, vamos usar grafos para representar relacionamentos de amizades entre usuários, como acontece no Facebook.
...
Confira outros conteúdos:
Programação x Concurso Público
Osvaldo aprendeu programação
DevMedia x Netflix: Onde investir meu...
Black November
Desconto exclusivo para as primeiras 200 matrículas!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 54,90
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 54,90 /mês
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.