Resumo para Prova de Algoritmos em Grafos (Baseado no material da aula01.pdf e referências: Cormen et al. e Szwarcfiter) 1. Conceitos Básicos de Grafos Definição Formal: Um grafo πΊ = (π, πΈ) é composto por: vértices (nós). Ex: cidades em um mapa. πΈ: Conjunto de arestas (conexões entre vértices). Ex: estradas π: Conjunto de entre cidades. Grafo não direcionado: Arestas não têm direção (ex: amizades em redes sociais). Grafo direcionado (digrafo): Arestas têm direção (ex: rotas de voo com sentido único). Terminologia Importante: Grau de um vértice (π(π£)): Número de arestas conectadas a ele. Vértice isolado: Grau zero. Vértice universal: Grau π − 1 (conectado a todos os outros). Grafo regular: Todos os vértices têm o mesmo grau. Caminho: Sequência de vértices conectados por arestas sem repetir vértices. Ciclo: Caminho que começa e termina no mesmo vértice. Conexidade: Grafo conexo: Existe caminho entre qualquer par de vértices. Componente conexa: Subgrafo conexo maximal (maior possível). Exemplos Práticos: Número de ErdΕs: Mede a distância de colaboração entre pesquisadores. Cada pesquisador é um vértice, e uma aresta indica coautoria. O número de ErdΕs é o menor caminho entre um pesquisador e Paul ErdΕs. 2. Representação de Grafos Matriz de Adjacência: Matriz π × π onde π΄[π][π] = 1 se existe aresta entre π e π. Vantagem: Verificar conexão em π(1). Desvantagem: Consome π(π2) espaço. Lista de Adjacência: Array de listas, onde cada posição π armazena os vizinhos de π. Vantagem: Espaço eficiente (π(π + π)). Desvantagem: Verificar conexão pode levar π(π). (Referência: Cormen, Cap. 22; Szwarcfiter, Cap. 1) 3. Algoritmos Fundamentais Percursos em Grafos Busca em Largura (BFS): Explora vértices nível por nível (usando fila). Aplicações: Encontrar caminho mais curto em grafos não ponderados. Exemplo: Encontrar a menor distância entre duas pessoas em uma rede social. Busca em Profundidade (DFS): Explora até o "fim" de um caminho antes de retroceder (usando pilha/recursão). Aplicações: Detectar ciclos, ordenação topológica. (Referência: Cormen, Cap. 22; Szwarcfiter, Cap. 3) Caminhos Mínimos Algoritmo de Dijkstra: Encontra o caminho mais curto em grafos com pesos . negativos não Usa uma fila de prioridade para selecionar o vértice mais próximo. Exemplo: Rota mais rápida no Google Maps. Algoritmo de Bellman-Ford: Funciona com pesos negativos (mas detecta ciclos negativos). Aplicação: Roteamento em redes com custos variáveis. Algoritmo de Floyd-Warshall: Calcula caminhos mínimos entre todos os pares de vértices. Usa programação dinâmica. (Referência: Cormen, Cap. 24; Szwarcfiter, Cap. 4) Árvore Geradora Mínima (AGM) Algoritmo de Kruskal: Seleciona arestas de menor peso, evitando ciclos (usando estrutura Union-Find). Passo a passo: 1. Ordenar arestas por peso. 2. Adicionar arestas à AGM, garantindo que não formem ciclos. Algoritmo de Prim: Constrói a AGM incrementalmente, partindo de um vértice inicial. Usa uma fila de prioridade para selecionar a aresta de menor peso. (Referência: Cormen, Cap. 23; Szwarcfiter, Cap. 6) 4. Tópicos Avançados Fluxo em Redes: Algoritmo de Ford-Fulkerson: Encontra o fluxo máximo em uma rede (ex: tráfego em redes de computadores). Usa caminhos aumentantes para aumentar o fluxo gradualmente. Método de Edmonds-Karp: Implementação eficiente do Ford-Fulkerson usando BFS. (Referência: Cormen, Cap. 26; Szwarcfiter, Cap. 7) 5. Dicas para Estudo 1. Entenda a Representação: Pratique converter problemas do mundo real em grafos (ex: redes sociais, mapas). 2. Desenhe Grafos: Visualize grafos com papel e lápis para fixar conceitos como ciclos e conexidade. 3. Implemente Algoritmos: Escreva pseudocódigo ou use Python para simular BFS, DFS, Dijkstra. 4. Foque em Aplicações: Relacione cada algoritmo a um caso prático (ex: Kruskal para redes de fibra óptica). 6. Conceitos que Merecem Atenção Extra Grafo Bipartido: Divisão de vértices em dois conjuntos onde arestas só conectam vértices de conjuntos diferentes. Exemplo: Plataforma de streaming (usuários x filmes; arestas indicam preferências). Clique vs. Conjunto Independente: Clique: Grupo onde todos estão conectados (ex: grupo de amigos mútuos). Conjunto independente: Grupo sem conexões internas (ex: pessoas que não se conhecem). Complemento de um Grafo: Inverte as conexões: se havia aresta, não há, e vice-versa. 7. Referências Cruzadas Teoria Computacional de Grafos (Szwarcfiter): Cap. 1-3: Definições e representações. Cap. 4-6: Algoritmos de caminhos e AGM. Algoritmos: Teoria e Prática (Cormen): Cap. 22-24: BFS, DFS, Dijkstra. Cap. 26: Fluxo em redes. Questões para Estudo de Algoritmos em Grafos (Respostas e Referências ao Final) Nível Fácil O que é um grafo conexo? Dê um exemplo prático. 2. Qual a diferença entre grafo direcionado e não direcionado? 3. Explique o que é uma árvore geradora mínima (AGM). 4. Como a busca em largura (BFS) funciona? Descreva brevemente. 5. Defina "grau de um vértice". 6. O que é um ciclo em um grafo? 7. Para que serve o algoritmo de Dijkstra? 8. O que é uma matriz de adjacência? 9. Qual a complexidade do BFS em lista de adjacência? 10. O que é um grafo bipartido? Dê um exemplo. 1. Nível Médio Mostre que em uma árvore, o número de arestas é π − 1. 12. Como o algoritmo de Kruskal garante a construção de uma AGM? 13. Por que o algoritmo de Dijkstra não funciona com pesos negativos? 14. Descreva um caso em que o algoritmo de Bellman-Ford é mais adequado que o Dijkstra. 15. Explique a relação entre componentes conexas e a fórmula π = π − π . 16. Como detectar ciclos em um grafo usando DFS? 17. Qual a diferença entre clique e conjunto independente? 18. Por que um grafo e seu complemento não podem ser ambos desconexos? 19. Mostre que um grafo π-regular bipartido tem β£π΄β£ = β£π΅β£. 11. 20. Por que a busca em profundidade (DFS) é útil para ordenação topológica? Nível Difícil Prove que todo grafo conexo possui pelo menos uma árvore geradora. 22. Demonstre que a remoção de uma ponte aumenta o número de componentes conexas em 1. 23. Modifique o BFS para verificar se um grafo é bipartido. Justifique a complexidade π(π + π). 24. Mostre que um grafo com grau mínimo 2 contém um ciclo. 25. Prove que πΊ é uma floresta se e somente se π = π − π. 26. Construa um algoritmo π(π) para ordenar vértices por grau usando Counting Sort. 27. Explique como o algoritmo de Ford-Fulkerson calcula o fluxo máximo em uma rede. 28. Mostre que dois caminhos de comprimento máximo em um grafo conexo compartilham um vértice. 29. Prove que a ordem inversa do DFS em um DAG é uma ordenação topológica. 30. Demonstre que π΄π em matriz de adjacência indica caminhos de comprimento π. 21. Gabarito e Referências Nível Fácil 1. Resposta: Um grafo é conexo se existe um caminho entre qualquer par de vértices. Exemplo: redes de transporte entre cidades conectadas. : Cormen, Cap. 22. Referência 2. Resposta: Grafo direcionado tem arestas com direção (ex: rotas aéreas), enquanto o não direcionado não (ex: amizades). : Szwarcfiter, Cap. 1. Referência 3. Resposta: AGM é uma subárvore que conecta todos os vértices com o menor custo total. Referência: Cormen, Cap. 23. 4. Resposta: BFS explora vértices nível por nível usando fila. Ex: encontrar distâncias mínimas. : Cormen, Cap. 22. Referência 5. Resposta: Grau é o número de arestas incidentes a um vértice. Referência: Szwarcfiter, Cap. 1. 6. Resposta: Ciclo é um caminho que começa e termina no mesmo vértice sem repetir arestas. Referência: Cormen, Cap. 22. 7. Resposta: Encontrar caminhos mínimos em grafos com pesos não negativos. Referência: Cormen, Cap. 24. 8. Resposta: Matriz π × π onde π΄[π][π] = 1 indica aresta entre π e π. Referência: Szwarcfiter, Cap. 2. 9. Resposta: π(π + π), pois cada vértice e aresta são visitados uma vez. Referência: Cormen, Cap. 22. 10. Resposta: Grafo cujos vértices são divididos em dois conjuntos sem arestas internas. Ex: relacionamento alunos-professores. Referência: Szwarcfiter, Cap. 1. Nível Médio 11. Resposta: Por indução: base π = 1, arestas = 0. Adicione um vértice: nova aresta mantém π = π − 1. : Szwarcfiter, Cap. 3. Referência 12. Resposta: Kruskal seleciona arestas de menor peso sem formar ciclos, garantindo AGM. Referência: Cormen, Cap. 23. 13. Resposta: Dijkstra assume que o caminho mais curto já encontrado é definitivo, o que falha com pesos negativos. : Cormen, Cap. 24. Referência 14. Resposta: Bellman-Ford detecta ciclos negativos, útil em redes financeiras com custos variáveis. Referência: Cormen, Cap. 24. 15. Resposta: Floresta com π árvores tem π = π − π. Referência: Szwarcfiter, Cap. 3. 16. Resposta: DFS marca vértices como visitados; se encontrar um vértice já visitado (exceto pai), há ciclo. : Cormen, Cap. 22. Referência 17. Resposta: Clique é um subgrafo completo; conjunto independente não tem arestas internas. Referência: Szwarcfiter, Cap. 1. 18. Resposta: Se πΊ é desconexo, πΊ‾ tem pelo menos um componente conexo completo. : Exercício 8 da Lista1. Referência 19. Resposta: Em grafo π-regular bipartido, πβ£π΄β£ = πβ£π΅β£ ⇒ β£π΄β£ = β£π΅β£. Referência: Exercício 11 da Lista1. 20. Resposta: DFS ordena vértices pelo tempo de término, útil para dependências em DAGs. Referência: Cormen, Cap. 22. Nível Difícil 21. Resposta: Todo grafo conexo tem subgrafo minimal conexo (árvore), obtido removendo arestas cíclicas. : Szwarcfiter, Cap. 3. Referência 22. Resposta: Ponte é única aresta entre dois componentes; sua remoção divide o grafo. Referência: Exercício 4 da Lista1. 23. Resposta: Use BFS colorindo vértices alternadamente. Complexidade mantida pois visita cada vértice/aresta uma vez. : Exercício 9 da Lista2. Referência Resposta: Se grau mínimo ≥ 2, caminho mais longo forma ciclo. Referência: Exercício 14 da Lista1. 25. Resposta: Floresta é união de árvores; π = π − π. Referência: Exercício 15 da Lista1. 26. Resposta: Use Counting Sort com graus limitados (0 a π − 1), 24. ordenando em π(π). : Exercício 6 da Lista1. Referência 27. Resposta: Ford-Fulkerson aumenta fluxo via caminhos aumentantes até saturação. Referência: Cormen, Cap. 26. 28. Resposta: Se dois caminhos máximos não se intersectam, um terceiro caminho mais longo existiria. : Exercício 7 da Lista1. Referência 29. Resposta: Em DAG, o último vértice finalizado no DFS é uma fonte válida na ordenação topológica. Referência: Exercício 5 da Lista2. 30. Resposta: Por indução: π΄π [π][π] conta caminhos de comprimento π entre π e π. Referência: Exercício 7 da Lista2.
0
You can add this document to your study collection(s)
Sign in Available only to authorized usersYou can add this document to your saved list
Sign in Available only to authorized users(For complaints, use another form )