Caio Silva
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note No publishing access yet

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.

      Your account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

      Your team account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

      Explore these features while you wait
      Complete general settings
      Bookmark and like published notes
      Write a few more notes
      Complete general settings
      Write a few more notes
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note No publishing access yet

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.

    Your account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

    Your team account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

    Explore these features while you wait
    Complete general settings
    Bookmark and like published notes
    Write a few more notes
    Complete general settings
    Write a few more notes
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    # Teoria Dos Grafos A teoria dos grafos é uma área da matemática e ciência da computação que estuda as relações entre objetos. Seu primeiro uso registrado data de 1736, associado a Leonhard Euler. # História dos Grafos ## Leonhard Euler (1736) - Problema das Pontes de Königsberg: Primeira formulação do conceito de grafos. ## Gustav Kirchoff (1824–1887) - Aplicou grafos em circuitos elétricos, introduzindo as "árvores matemáticas". ## Arthur Cayley (1821–1895) - Expandiu o uso de grafos para a química, enumerando isômeros de hidrocarbonetos. # O que são Grafos? Um **grafo** é uma estrutura de dados fundamental na ciência da computação e matemática, usada para modelar relações entre um conjunto de objetos. ## Vértices - **Vértices** (também chamados de **nós**): são os objetos individuais do grafo. - Exemplos: Em um grafo de rede social, cada pessoa pode ser um vértice. ## Arestas - **Arestas**: são as conexões entre os vértices. - Podem ser **direcionadas** (indicando uma relação unidirecional) ou **não direcionadas** (indicando uma relação bidirecional). - Exemplos: Em um grafo de rede social, uma aresta pode representar uma amizade ou uma conexão entre duas pessoas. # Definição Formal de um Grafo Um grafo `G` é uma tripla ordenada `(V(G), E(G), ψG)` que consiste em: 1. **Conjunto de Vértices (`V(G)`)**: Um conjunto não vazio de vértices. 2. **Conjunto de Arestas (`E(G)`)**: Um conjunto de arestas. 3. **Função de Incidência (`ψG`)**: Associa cada aresta de `G` a um par não ordenado de vértices (não necessariamente distintos) de `G`. Se `e` é uma aresta e `u` e `v` são vértices tais que `ψG(e) = uv`, diz-se que `e` liga `u` e `v`. Os vértices `u` e `v` são chamados de extremidades de `e`. ## Exemplo 1 - **Grafo `G`**: `(V(G), E(G), ψG)` - **Vértices `V(G)`**: `{v1, v2, v3, v4, v5}` - **Arestas `E(G)`**: `{e1, e2, e3, e4, e5, e6, e7, e8}` - **Função de Incidência `ψG(e)`**: - `ψG(e1) = v1v2` - `ψG(e2) = v2v3` - `ψG(e3) = v3v3` - `ψG(e4) = v3v4` - `ψG(e5) = v2v4` - `ψG(e6) = v4v5` - `ψG(e7) = v2v5` - `ψG(e8) = v2v5` ## Exemplo 2 - **Grafo `H`**: `(V(H), E(H), ψH)` - **Vértices `V(H)`**: `{u, v, w, x, y}` - **Arestas `E(H)`**: `{a, b, c, d, e, f, g, h}` - **Função de Incidência `ψH`**: - `ψH(a) = uv` - `ψH(b) = uu` - `ψH(c) = uw` - `ψH(d) = wx` - `ψH(e) = vx` - `ψH(f) = wx` - `ψH(g) = ux` - `ψH(h) = xy` # Isomorfismo de Grafos O isomorfismo de grafos é um conceito chave na teoria dos grafos, usado para determinar se dois grafos são essencialmente os mesmos, apesar de suas possíveis representações visuais diferentes. ## Definição e Características - **Isomorfismo de Grafos**: Dois grafos `G` e `H` são isomórficos (indicado por `G ≅ H`) se existir uma correspondência biunívoca entre seus vértices que preserve as adjacências. ## Complexidade do Problema - **Desafio Computacional**: Determinar o isomorfismo de grafos é um problema complexo, especialmente para grafos grandes. - **Classe NP**: Está na classe NP, mas não se sabe se é NP-completo ou pertence a P. # Principais Classes e Terminologias de Grafos ## Terminologia Básica - **Nós Terminais**: Conjunto de um ou dois vértices que formam uma aresta. - **Laço (Loop)**: Aresta que tem apenas um nó terminal. - **Arestas Paralelas**: Arestas associadas ao mesmo conjunto de vértices. - **Vértices Adjacentes**: Vértices conectados por uma aresta. - **Arestas Adjacentes**: Duas arestas incidentes em um vértice comum. ## Propriedades dos Vértices - **Vértice Adjacente a Si Próprio**: Vértice que é nó terminal de um laço. - **Vértice Isolado**: Vértice sem nenhuma aresta incidente. - **Grau do Vértice**: Número de arestas incidentes a um vértice (laços contam duas vezes). ## Tipos de Grafos ### Grafo Vazio - **Definição**: Um grafo sem vértices nem arestas. ### Grafo Simples - **Características**: Sem laços nem arestas paralelas. - **Aplicações**: Muitas aplicações podem ser modeladas como grafos simples. ### Grafo Não Direcionado - **Propriedade**: Se um vértice `u` está ligado a `v`, então `v` está ligado a `u`. ### Grafos Direcionados (Dígrafos) - **Arestas Dirigidas**: Arestas associadas a um par ordenado de vértices. ### Grafo Completo - **Notação**: `Kn` para um grafo completo com `n` vértices. - **Propriedade**: Todo vértice é adjacente a todos os outros. ### Grafo Bipartido - **Divisão**: Vértices divididos em dois subconjuntos, com arestas apenas entre vértices de subconjuntos diferentes. ### Grafo Valorado - **Característica**: Cada aresta tem um valor (ou peso) associado. ## Outros Tipos de Grafos - **Grafo Simples** - **Multigrafo** - **Pseudografo** - **Grafo Dirigido** - **Multigrafo Dirigido** ## Subgrafo - **Definição**: Um subconjunto de vértices e arestas de um grafo maior. ## Graus dos Vértices - **Propriedade Fundamental**: A soma dos graus de todos os vértices de um grafo é sempre um número par, pois cada aresta contribui com 2 ao grau total. - **Corolário**: Em qualquer grafo, existe um número par de vértices com grau ímpar. ### Exemplos de Aplicação 1. **Grafo com Vértices de Graus 1, 1, 2, e 3**: - **É possível?** Não, pois o grau total seria 7, um número ímpar. 2. **Grafo com Vértices de Graus 1, 1, 3, e 3**: - **É possível?** Sim, pois o grau total é 8, um número par. 3. **Grafo com 10 Vértices de Graus 1, 1, 2, 2, 2, 3, 4, 4, 4, e 6**: - **É possível?** Não, por duas razões: - **Três vértices de grau ímpar** violam o corolário acima. - **Grau total de 29** é ímpar, o que é impossível para qualquer grafo. ## Grafo Regular - **Definição**: Um grafo é regular se todos os seus vértices têm o mesmo grau. - **Exemplo**: Todos os grafos completos são regulares. ### Grafo Direcionado Regular - **Condição Adicional**: O grau de saída e entrada de cada vértice deve ser igual. # Representação Computacional de Grafos e Complexidade de Algoritmos ## Análise de Complexidade de Algoritmos - **Importância**: Projetar algoritmos eficientes desde o início pode economizar recursos e tempo de execução significativos. - **Comparação de Algoritmos**: Analisar a complexidade de algoritmos diferentes permite escolher a opção mais eficiente. ## Complexidade de Tempo e Espaço - **Tempo de Execução**: Medido pelo número de operações como função do tamanho da entrada `n`. - **Espaço de Memória**: Quantidade de memória usada, um fator importante para algoritmos que trabalham com grandes conjuntos de dados. ## Notações de Complexidade de Tempo - Indica o comportamento do algoritmo em diferentes casos: pior (`O`), melhor (`Ω`), e médio (`Θ`). - Classes de complexidade comuns incluem: `O(1)`, `O(n)`, `O(n log n)`, `O(n^2)`, `O(2^n)`, `O(n!)`. ## Representações de Grafos - **Matriz de Incidência**: Uma matriz `n x m` que relaciona vértices a arestas. Cada coluna tem dois `1`s indicando os vértices que a aresta conecta. - **Matriz de Adjacência**: Uma matriz `n x n` onde cada elemento indica se existe uma aresta entre um par de vértices. ### Matriz de Adjacência para Grafos Não Direcionados - A matriz é simétrica em relação à diagonal principal. ### Matriz de Adjacência para Grafos Direcionados - A matriz reflete a direção das arestas entre os vértices. ## Observações sobre Matriz de Adjacência - **Grafos Simples**: O grau de um vértice é a soma dos elementos em sua linha ou coluna. - **Sem Laços**: Diagonal principal com zeros. - **Simetria**: Em grafos não direcionados, a matriz é simétrica em relação à diagonal. A matriz de adjacência é uma forma prática de representar grafos em computadores, mas para grafos com muitos vértices e poucas arestas (grafos esparsos), outras estruturas de dados como listas de adjacências podem ser mais eficientes em termos de espaço. # Lista de Adjacências e Detecção de Vértice Sink ## Lista de Adjacências - Representa um grafo como um vetor de listas. - Cada lista corresponde a um vértice e contém todos os vértices adjacentes. - Eficiente para grafos esparsos com `O(V + E)` de complexidade de espaço. ## Escolhendo a Representação Apropriada - **Matriz de Incidência**: Adequada quando precisamos manter uma relação entre vértices e arestas. - **Matriz de Adjacência**: Ideal para grafos densos, permite verificar a existência de uma aresta em `O(1)`. - **Lista de Adjacência**: Geralmente preferida, especialmente para grafos esparsos. ## Isomorfismo e Matrizes de Adjacência - Verificar isomorfismo "força-bruta" pode exigir a comparação de várias propriedades estruturais e a permutação de matrizes. ## Determinando um Vértice Sink em um Grafo Dirigido KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK # Tipos de Caminhamentos em Grafos Os grafos podem ser explorados através de diferentes tipos de caminhamentos, que são sequências de vértices e arestas. Aqui estão as definições e características de cada tipo: ## Caminho (Walk) - **Definição**: Uma sequência alternada de vértices e arestas adjacentes. - **Características**: - Pode ter vértices e arestas repetidos. - Possui um vértice inicial e final. - O tamanho é o número de arestas no caminho. ## Caminho Fechado (Closed Walk) - **Definição**: Um caminho que começa e termina no mesmo vértice. - **Características**: - Vértices e arestas podem se repetir. - Se tem pelo menos uma aresta, é chamado de ciclo. ## Trajeto (Path) - **Definição**: Um caminho sem arestas repetidas. - **Características**: - Nenhuma aresta é percorrida mais de uma vez. - Pode ter vértices repetidos (exceto em trajetos simples). ## Trajeto Simples (Simple Path) - **Definição**: Um caminho sem arestas nem vértices repetidos. - **Características**: - Todos os vértices e arestas são distintos. ## Circuito (Circuit) - **Definição**: Um trajeto fechado sem arestas repetidas. - **Características**: - O vértice inicial e final são idênticos. - Pode ter vértices repetidos (exceto em circuitos simples). ## Circuito Simples (Simple Circuit) - **Definição**: Um trajeto fechado onde não há arestas e vértices repetidos, exceto os vértices inicial e final que são idênticos. - **Características**: - Também conhecido como ciclo simples. ## Terminologia de Caminhamentos | Tipo | Aresta Repetida? | Vértice Repetido? | Começa e Termina no Mesmo Vértice? | |---------------------------------|------------------|-------------------|------------------------------------| | Caminho (Walk) | Pode | Pode | Pode | | Caminho Fechado (Closed Walk) | Pode | Pode | Sim | | Trajeto (Path) | Não | Pode | Pode | | Trajeto Simples (Simple Path) | Não | Não | Não | | Circuito (Circuit) | Não | Pode | Sim | | Circuito Simples (Simple Circuit)| Não | Não (exceto extremidades) | Sim | # Conectividade em Grafos ## Conectividade - **Definição**: Um grafo é **conexo** se, para qualquer par de vértices `u` e `v`, existe um caminho de `u` para `v`. - **Formalização**: `G é conexo ⟺ ∀ vértices u, v ∈ V(G), ∃ um caminho de u para v`. ### Fundamentos da Conectividade - **Lema a**: Em um grafo conexo, qualquer par de vértices distintos pode ser conectado por um trajeto simples. - **Lema b**: Se `u` e `v` estão em um circuito e uma aresta é removida, ainda existe um trajeto de `u` para `v`. - **Lema c**: Se `G` é conexo e contém um circuito, uma aresta do circuito pode ser removida sem desconectar `G`. - **Teorema**: Um grafo é bipartido se e somente se não contém nenhum ciclo de tamanho ímpar. ## Circuito Euleriano ### Definições - **Circuito Euleriano**: Um circuito que começa e termina no mesmo vértice, passando exatamente uma vez por cada aresta de `G`. - **Trajeto Euleriano**: Uma sequência que começa em um vértice `u`, termina em um vértice `v`, e passa por cada aresta de `G` exatamente uma vez. ### Teoremas - **Teorema 1**: Se `G` possui um circuito euleriano, então todos os vértices de `G` têm grau par. - **Teorema 2**: Se algum vértice de `G` tem grau ímpar, `G` não possui um circuito euleriano. - **Teorema 3**: Se `G` é conexo, não vazio, e todos os vértices têm grau par, então `G` possui um circuito euleriano. ### Corolário do Trajeto Euleriano - Existe um trajeto euleriano de `u` para `v` em `G` se `G` é conexo e exatamente dois vértices, `u` e `v`, têm grau ímpar, com todos os outros vértices tendo grau par. ### Problema das Pontes de Königsberg - É um exemplo clássico que questiona a existência de um percurso que passe por todas as pontes da cidade exatamente uma vez. Este problema levou à formulação dos conceitos de grafos e circuitos eulerianos. # Algoritmo de Fleury e Determinação de Grafos Eulerianos ## Algoritmo de Fleury para Circuitos Eulerianos **Objetivo**: Encontrar um circuito Euleriano em um grafo Euleriano. **Passos do Algoritmo**: 1. **Iniciar**: Comece em qualquer vértice `v`. 2. **Escolha da Aresta**: - Escolha a próxima aresta para atravessar de modo a não desconectar o grafo. - Se todas as arestas restantes desconectariam o grafo, escolha qualquer uma delas (`bridge`). 3. **Exclusão e Continuação**: - Atravesse para o vértice no final da aresta escolhida. - Exclua a aresta do grafo. - Se houver vértices isolados resultantes da exclusão da aresta, remova-os também. 4. **Repetir**: Repita o processo até que todas as arestas tenham sido usadas. **Garantia**: Esse algoritmo sempre produz um circuito Euleriano se o grafo for Euleriano. ## Determinação de Grafos Eulerianos Um grafo é Euleriano se ele é conexo e cada vértice tem um grau par. **Exemplos para Análise**: - **Grafo Completo K2**: Não é Euleriano, pois possui apenas dois vértices com grau 1. - **Grafo Bipartido Completo K3,3**: - É Euleriano, já que é conexo e todos os vértices têm grau 3 (ímpar, portanto não é Euleriano). - **Grafo Cubo**: - É Euleriano, pois é um grafo regular com todos os vértices de grau 3 (ímpar, portanto não é Euleriano). - **Grafo Octaedro**: - É Euleriano, pois é um grafo regular com todos os vértices de grau 4 (par e conexo). - **Grafo de Petersen**: - Não é Euleriano, pois é um grafo regular com grau 3 para cada vértice (ímpar). -- slide 5 aqui # Circuitos Eulerianos e Hamiltonianos em Grafos ## Circuitos em Grafos - **Circuito Euleriano**: Um circuito que inclui todas as arestas de um grafo conectado exatamente uma vez. - **Circuito Hamiltoniano**: Um circuito que passa exatamente uma vez por cada vértice de um grafo. ## Distinção entre os Circuitos - **Euleriano**: - Inclui todas as arestas exatamente uma vez. - Vértices podem ser repetidos (exceto os vértices inicial e final que são idênticos). - **Hamiltoniano**: - Inclui todos os vértices exatamente uma vez (exceto os vértices inicial e final que são idênticos). - Pode não incluir todas as arestas. - Pode não gerar um circuito Euleriano. ## Condições para Existência - **Circuito Euleriano**: - Um grafo possui um circuito Euleriano se e somente se é conexo e todos os vértices têm grau par. - **Circuito Hamiltoniano**: - Não há uma condição necessária e suficiente conhecida para determinar se um grafo possui um circuito Hamiltoniano. - Teoremas como o de Ore e Dirac fornecem condições suficientes sob certas circunstâncias. ### Teoremas Relevantes - **Teorema de Ore (1960)**: Se `G` é um grafo simples com `n (≥ 3)` vértices, e `deg(u) + deg(v) ≥ n` para cada par não adjacentes de vértices `u` e `v`, então `G` é Hamiltoniano. - **Teorema de Dirac (1952)**: Se `G` é um grafo simples com `n (≥ 3)` vértices, e `deg(v) ≥ n/2` para cada vértice `v`, então `G` é Hamiltoniano. ## Problemas Clássicos Relacionados - **Problema do Carteiro Chinês**: - Também conhecido como problema de roteamento de entrega, pode ser resolvido eficientemente quando o grafo é Euleriano. - **Problema do Caixeiro Viajante**: - Relacionado ao ciclo Hamiltoniano, é NP-Completo e não se conhece um algoritmo eficiente para resolvê-lo. - Existem algoritmos heurísticos e de força bruta para encontrar soluções aproximadas. ## Aplicações Práticas - **Coleta de lixo, entregas e limpeza de ruas**: Problema do Carteiro Chinês. - **Planejamento de rotas e logística**: Problema do Caixeiro Viajante. ## Casos Especiais do Problema do Caixeiro Viajante - **PCV Métrico**: Onde as distâncias satisfazem a desigualdade triangular. - **PCV Euclideano**: Onde as distâncias são euclidianas. - **PCV Assimétrico**: Onde a distância de viagem entre dois vértices depende da direção da viagem. # O Problema do Caminho Mínimo O problema do caminho mínimo consiste em encontrar, em um grafo ponderado, o subgrafo que representa o caminho de peso mínimo entre vértices específicos. Existem variantes do problema que incluem: - **Caminho mínimo de fonte única**: Encontrar o caminho mais curto de um vértice específico para todos os outros vértices no grafo. - **Caminho mínimo entre todos os pares**: Encontrar o caminho mais curto entre cada par de vértices no grafo. ## Algoritmos para o Problema do Caminho Mínimo ### Caminhos Mínimos de Fonte Única #### Algoritmo de Bellman-Ford - Utilizado quando os grafos contêm arestas com pesos negativos. - Capaz de detectar ciclos de peso negativo. #### Algoritmo de Dijkstra - Resolve o problema em grafos onde os pesos das arestas são não negativos. - Funcionamento: - Calcula a menor distância do vértice inicial aos seus vizinhos. - Repete o processo para os vizinhos e seus respectivos vizinhos, atualizando as menores distâncias encontradas. ### Limitações do Algoritmo de Dijkstra - Não funciona corretamente se houver arestas com pesos negativos. - Calcula os caminhos mínimos somente a partir de uma única origem. - Para encontrar caminhos mínimos de todos os vértices para todos os outros, é necessário executar o algoritmo para cada vértice, resultando em uma complexidade total de `O(V * E)` na implementação mais simples, onde `V` é o número de vértices e `E` é o número de arestas. ### Caminho Mínimo de Fonte Única em Grafos Acíclicos Dirigidos - Algoritmos específicos podem ser utilizados para grafos acíclicos, que são mais eficientes, uma vez que esses grafos não têm ciclos e, portanto, não podem ter ciclos de peso negativo. ## Aplicações Práticas - Sistemas de navegação GPS. - Redes de telecomunicação. - Planejamento e roteirização logística. # Árvores ## Definições - **Árvore**: Um grafo conexo e sem ciclos (grafos simples) em que há somente um caminho entre qualquer par de vértices. - **Subárvore**: Um subgrafo conexo e acíclico de uma árvore. - **Floresta**: Um grafo que não contém ciclos, podendo ou não ser conexo. ## Fundamentos - **Teorema**: Seja `G` um grafo com `n` vértices. Então, o seguinte é equivalente: 1. `G` é uma árvore; 2. `G` não contém ciclos e possui `n - 1` arestas; 3. `G` está conectado e tem `n - 1` arestas; 4. `G` está conectado e cada aresta é uma ponte; 5. Quaisquer dois vértices de `G` são conectados por exatamente um caminho; 6. `G` não contém ciclos, mas a adição de qualquer nova aresta cria exatamente um ciclo. - **COROLÁRIO**: Se `G` for uma floresta com `n` vértices e `k` componentes, então `G` terá `n - k` arestas. ## Árvore Geradora - Transformar um grafo `G` conectado em árvore: 1. Escolher um ciclo e remover qualquer uma de suas arestas. O grafo resultante permanece conectado. 2. Repetir este procedimento com os ciclos restantes, continuando até que não haja mais ciclos. - O grafo resultante é uma árvore que conecta todos os vértices de `G`, denominada **árvore geradora** de `G`. - **Floresta Geradora**: Realizar este procedimento em cada componente de `G` se `G` é um grafo com `n` vértices, `m` arestas e `k` componentes. ## Árvore Geradora Mínima (Minimal Spanning Tree) - **Definição**: Uma árvore geradora mínima para um grafo com peso é uma árvore geradora que tem o menor peso total possível dentre todas as possíveis árvores geradoras do grafo. ## Algoritmos para obter a AGM ### Complexidade dos Algoritmos - A complexidade dos algoritmos evoluiu de `O(n^2)` para `O(n)`, com uma implementação datada de 2008. ### Os Mais Básicos - **Algoritmo de Kruskal** e **Algoritmo de Prim** são dois dos algoritmos mais populares e gulosos para determinação de árvores geradoras mínimas. ### Algoritmo de Kruskal - Abordagem gulosa: adiciona à floresta uma aresta de menor peso possível a cada etapa. - Usa uma estrutura de dados de conjuntos disjuntos para manter vários conjuntos disjuntos de elementos, cada um contendo os vértices em uma árvore da floresta atual. # Algoritmo de Prim - Proposto originalmente em 1930 por Vojtěch Jarník, em 1957 por Robert C. Prim, e redescoberto por Edsger Dijkstra em 1959. - Inclui, de forma gulosa, vértices na árvore geradora mínima um a um. - Propriedade: as arestas no conjunto A sempre formam uma árvore única, começando em um vértice raiz arbitrário `r` e aumentando até que a árvore abranja todos os vértices em `V`. - Cada etapa adiciona à árvore `A` uma aresta leve que conecta `A` a um vértice isolado. - Implementação eficiente necessita de uma fila de prioridades classificada pelos pesos das arestas. # Voltando ao Problema do Caixeiro Viajante - Consiste em determinar um ciclo hamiltoniano de custo mínimo em um grafo ponderado, direcionado ou não. - **PCV vs. AGM**: Aplicar o algoritmo de AGM em um grafo completo fornece um limite inferior para a solução do PCV. ## Como encontrar o limite inferior para o PCV? - Qualquer ciclo hamiltoniano em um grafo completo ponderado, ao remover um vértice, torna-se um caminho semi-hamiltoniano e deve ser uma árvore geradora. # Algoritmo de Christofides para o PCV - Heurística para encontrar soluções aproximadas para o PCV, garantindo soluções no máximo 1,5 vezes piores do que a ótima. - Publicado por Nicos Christofides em 1976. ## Etapas do Algoritmo de Christofides 1. Criar uma árvore geradora mínima `T` de `G`. 2. Seja `O` o conjunto de vértices de grau ímpar em `T`. 3. Encontrar um casamento perfeito de peso mínimo `M` no subgrafo induzido pelos vértices de `O`. 4. Combinar as arestas de `T` e `M` para formar um multigrafo `H` em que cada vértice tem grau par. 5. Formar um circuito Euleriano em `H`. 6. Transformar o circuito Euleriano em um circuito Hamiltoniano, ignorando vértices repetidos. # Outras Aplicações ## Rede Ferroviária - Conectar cidades minimizando a quantidade total de trilhos. ## Enumeração de Moléculas Químicas - Estruturas moleculares como árvores. ## Árvores de Busca - Estruturas de dados para busca eficiente. ## Otimização de Sistemas Submersos Off-Shore - Minimizar tubulações conectando poços a plataformas. ## Redes Ópticas - Otimizar a distribuição de sinal através de splitters. ## Distribuição de Sinal em Redes - Minimizar custos de distribuição e decodificação. ## Projeto de Redes - Computadores, comunicações, telefônicas, hidráulicas, elétricas, de petróleo e gás. - Análise de agrupamentos, genética, astronomia (quasars), limites de problemas NP-Difíceis, computação móvel.

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password
    or
    Sign in via Google Sign in via Facebook Sign in via X(Twitter) Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    By signing in, you agree to our terms of service.

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully