Estrutura de dados do gráfico e Algorithms (Exemplo)

⚡ Resumo Inteligente

Uma estrutura de dados em grafo é uma coleção não linear de vértices e arestas, onde cada aresta conecta um par de vértices. Os grafos modelam redes do mundo real, como mapas, conexões sociais e páginas da web, e suportam muitos algoritmos poderosos.

  • 📐 Estrutura: Um grafo G = (V, E) associa um conjunto de vértices (nós) a um conjunto de arestas (ligações) entre eles.
  • 🔤 Terminologia: Os termos-chave incluem vértice, aresta, grau, grau de entrada, grau de saída, auto-laço e adjacência.
  • 🗂️ Representação: Os grafos são armazenados usando uma matriz de adjacência ou uma lista de adjacência, cada uma com diferentes compensações de espaço.
  • 🧭 tipos: Os grafos são classificados de acordo com sua estrutura em: direcionados, não direcionados, ponderados, cíclicos, acíclicos, completos, bipartidos e outros.
  • 🌐 Aplicações: Google Mapas de rotas, redes sociais, classificação na web e dependência de recursos, tudo isso depende de grafos.

Estrutura de dados do gráfico e Algorithms

O que é um gráfico na estrutura de dados?

Um grafo é uma estrutura de dados não linear que consiste em vértices e arestas, onde os vértices contêm as informações ou dados, e as arestas funcionam como uma ligação entre um par de vértices.

É utilizado para resolver problemas do mundo real, como encontrar a melhor rota para um destino e o roteamento para telecomunicações e redes sociais. Os usuários são considerados nós no grafo, e os fios são as arestas que os conectam.

Se as arestas são representadas como E e os vértices são representados como V, então o grafo G pode ser escrito como o conjunto de vértices e arestas, como G (V, E).

Exemplo de gráfico em estrutura de dados

Aqui está um exemplo simples de uma estrutura de dados em forma de grafo:

Exemplo de gráfico em estrutura de dados

Trata-se de um grafo simples não direcionado (um tipo de grafo). O conjunto de vértices é: {A, B, C, D, E, F}. Dois vértices formam uma aresta. Por exemplo, A e B estão conectados por uma aresta. No entanto, A e F não estão conectados por nenhuma aresta.

Terminologias gráficas em estrutura de dados

A seguir, apresentamos alguns termos importantes usados ​​na estrutura de dados de grafos:

INVERNODescrição
VérticeCada elemento de dados é chamado de vértice ou nó. Na imagem acima, A, B, C, D e E são os vértices.
Borda (arco)As ligações entre dois nós ou vértices são chamadas de arestas (arcos). Elas têm duas extremidades e são representadas como (vérticeInicial, vérticeFinal).
Borda não direcionadaÉ uma borda bidirecional.
Borda direcionadaÉ uma borda unidirecional.
Borda ponderadaUma aresta com um valor associado.
GrauEm um grafo, o número de arestas conectadas a um vértice é chamado de grau.
Grau de graduaçãoO número total de arestas de entrada conectadas a um vértice.
OutdegreeO número total de arestas de saída conectadas a um vértice.
Circuito automáticoUma aresta é chamada de auto-loop se suas duas extremidades coincidem.
AdjacênciaDiz-se que dois vértices são adjacentes se uma aresta os conecta.

Tipos de gráficos na estrutura de dados

Aqui está a lista dos mais comuns tipos de gráficos na estrutura de dados:

  • Gráfico direcionado
  • Gráfico não direcionado
  • Gráfico ponderado
  • Gráfico bidirecional
  • Gráfico Infinito
  • Gráfico Nulo
  • Gráfico Trivial
  • Multigráfico
  • Gráfico Completo
  • Gráfico Conectado
  • Gráfico Cíclico
  • Gráfico Acíclico Direcionado (DAG)
  • Gráfico de Ciclo
  • Gráfico Bipartido
  • Gráfico de Euler
  • Gráfico de Hamilton

Como representar um grafo em uma estrutura de dados?

Um grafo é geralmente armazenado na memória usando uma de duas representações. A escolha afeta a quantidade de memória que o grafo utiliza e a velocidade de execução das operações comuns.

  • Matriz de adjacência: Uma matriz bidimensional V × V onde a célula [i][j] é 1 (ou o peso da aresta) se existir uma aresta entre o vértice i e o vértice j, e 0 caso contrário. Permite a busca de arestas em O(1), mas usa espaço O(V²), tornando-a ideal para grafos densos.
  • Lista de adjacências: Uma matriz de listas onde cada vértice armazena uma lista de seus vértices vizinhos. Ela usa espaço O(V + E) e é eficiente para grafos esparsos, razão pela qual a maioria dos grafos do mundo real a utiliza.

Você pode ler mais sobre isso em Lista de adjacência e representação matricial de um grafo tutorial.

Aplicações da estrutura de dados gráfica

Um grafo tem muitas aplicações. Existem muitos algoritmos que utilizam grafos. Aqui estão algumas das aplicações de grafos:

  • Google Os mapas utilizam gráficos para encontrar a intersecção de duas estradas e calcular a distância entre dois locais. Por exemplo, Dijkstra, para encontrar a menor distância entre a localização de origem e a de destino.
  • O Facebook usa grafos para encontrar os amigos em comum dos usuários. Seu algoritmo considera cada usuário como um nó de um grafo.
  • Para a alocação de recursos, utiliza-se um DAG (Grafo Acíclico Direcionado). Ele verifica a dependência entre os recursos.
  • O Google Os mecanismos de busca utilizam gráficos para criar o ranking dos sites.
  • Um mapaping O dispositivo utiliza a estrutura de dados em forma de grafo.
  • A router e seu protocolo usam o grafo para aprender o caminho até o destino.

Perguntas Frequentes

Redes neurais gráficas aprendem com dados estruturados em grafos para detecção de fraudes, recomendações e descoberta de medicamentos. Grafos de conhecimento dão suporte à inteligência artificial em processos de resposta a perguntas, e frameworks de aprendizado profundo modelam cada computação como um grafo de operações.

Sim. Assistentes de IA como o GitHub Copilot podem gerar implementações de BFS, DFS, Dijkstra e ordenação topológica a partir de uma descrição simples. Mesmo assim, você deve testar casos extremos, como nós desconectados, ciclos e grafos vazios, antes de usar o código.

Uma árvore é um tipo especial de grafo que é conexo e não possui ciclos, com exatamente um caminho entre quaisquer dois nós. Um grafo é mais geral: ele pode conter ciclos, partes desconectadas e arestas direcionadas ou ponderadas.

Os dois principais métodos de busca são a Busca em Largura (BFS), que explora nível por nível usando uma fila, e a Busca em Profundidade (DFS), que explora o mais profundamente possível usando uma pilha ou recursão antes de retornar ao nível anterior.tracrei.

Resuma esta postagem com: