Grafos e Árvores Flashcards

(45 cards)

1
Q

O que é uma árvore geradora de um grafo? E uma árvore geradora mínima?

A

Uma árvore geradora um subgrafo conexo e acíclico de um grafo não-direcionado. Árvore geradora mínima é uma árvore geradora que minimiza o peso total de suas arestas.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

O que é um emparelhamento em um grafo? O que é um emparelhamento perfeito? No contexto do problema do Casamento Estável, podemos dizer que um emparelhamento perfeito é sinônimo de emparelhamento estável?

A

Um emparelhamento é um conjunto de arestas de um grafo em que nenhum vértice aparece mais de uma vez no conjunto. Um emparalhamento perfeito é um emparelhamento que contém todos os vértices do grafo. Não é sinônimo de emparelhamento estável (que tem a ver com a ordem de preferência).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

No contexto do problema do Casamento Estável, quais são as 3 condições para um par (h, m) ser considerado instável em um emparelhamento perfeito M?

A

1 - (h, m) não pode pertencer a M
2 - h deve preferir m à m’ designada pelo emparelhamento.
3 - m deve preferir h ao h’ designado pelo emparelhamento.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Quando podemos dizer que um grafo é uma árvore?

A

Quando o grafo é conectado e não possui ciclos.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Qual condição um grafo precisa ter para ser considerado conectado? E fortemente conectado?

A

Um grafo é conectado se e somente se, para qualquer par de vértices u e v, existe um caminho entre u e v. Ele será fortemente conectado se for um grafo direcionado e, para qualquer par de vértices u e v, existir um caminho entre u e v e entre v e u.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Quantas arestas possui uma árvore com n vértices?

A

N - 1 arestas.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

De maneira resumida, como funciona o algoritmo BFS? Explique em termos de camadas.

A

O algoritmo BFS começa na raiz. Na primeira iteração, ele explora a primeira camada (ou seja, todos os vértices diretamente conectados à raiz). Na segunda, ele explora a segunda camada (ou seja, todos os vértices conectados aos vértices conectados à raiz) e assim por diante até nenhum vértice novo ser encontrado.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Defina camadas no contexto do algoritmo BFS.

A

A primeira camada são o os elementos diretamente conectados à raiz. Se temos as camadas 1, 2, …, j, a camada j+1 será composta por todos os elementos que estão conectados a j e não aparecem em nenhuma camada anterior.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Entre BFS e DFS, qual é melhor para encontrar a menor rota até um ponto? Por quê?

A

BFS. Na sua definição, BFS funciona explorando primeiro os elementos a uma distância 1 da raiz, seguido pela distância 2, 3 e assim por diante. Desta forma, em uma etapa n, o BFS descobre todos os pontos alcançáveis em n passos, encontrando assim a menor distância.

DFS, por outro lado, escolhe um caminho e segue ele até o final. Isso quer dizer que um vértice conectado tanto à raiz quanto à camada n pode ser encontrado primeiro explorando o caminho mais longo e não o mais curto.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Como funciona a representação de grafos por matrizes de adjacência? E por listas de adjacência? Cite vantagens e desvantagens de se usar um ao invés do outro.

A

Em uma matriz de adjacência, o grafo é representado como uma matriz n x n sendo n o número de vértices. Se existir uma conexão entre dois vértices i, j, m[i][j] será igual a 1, caso contrário, será um valor padrão.

Em uma lista de adjacência, o grafo é representado como uma lista com n listas representando os vértices. Cada uma dessas n listas representa os elementos conectados diretamente a n.

A matriz de adjacência tem como principal desvantagem o uso de memória na ordem de n². Sua maior vantagem é a identificação mais rápida se um vértice (u, v) existe em um grafo. A lista de adjacência, por outro lado, usa memória na ordem de m + n e por isso funciona melhor para listas esparsas.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

O que é um grafo bipartido ? Qual a condição que um grafo precisa atender para ser considerado bipartido. Dê um exemplo de aplicação desse conceito.

A

Um grafo bipartido é um grafo que pode ser dividido em 2 conjuntos a e b de forma que não exista nenhuma aresta entre elementos do mesmo conjunto. Um grafo é bipartido se e somente se ele não possui ciclos com um número ímpar de vértices.

Uma aplicação desse conceito é o problema do Casamento Estável que pode ser modelado como um grafo bipartido em que um grupo representa os escolhedores e o outro os escolhidos.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

De que forma podemos usar o algoritmo de BFS para identificar se um grafo conexo é bipartido ou não?

A

Para identificar se um grafo é bipartido, podemos usar o algoritmo BFS para construir uma árvore de busca em largura. O grafo será bipartido se e somente se não possuir nenhuma aresta entre vértices da mesma camada.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Em qual situação, num grafo BFS, podemos ter uma aresta conectando vértices cuja diferença de nível é maior que 1? Que nome damos a essa aresta?

A

Para termos arestas conectando vértices em camadas cuja diferença é maior que 1, é necessário que o grafo seja direcionado e a aresta parta de um vértice em uma camada inferior e aponte para uma camada superior. A esse tipo de aresta, damos o nome de back edge.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Quais são as 4 principais classificações para arestas em um grafo após a execução de um algoritmo como BFS/DFS?

A
  • Tree Edge: Aresta que está presente no grafo e na árvore correspondente
  • Cross Edge: Aresta que está presente apenas no grafo e conecta dois elementos sem relação direta na árvore correspondente
  • Back Edge: Aresta que está presente apenas no grafo e conecta uma aresta em um nível inferior a uma aresta em um nível superior
  • Forward Edge: Aresta que está presente apenas no grafo e conecta uma aresta em um nível superior a uma aresta em um nível inferior.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Quais tipos de arestas podem ser encontrados em um grafo BFS? Justifique.

A

Tree Edge (por definição) e Cross Edge. Se o grafo for direcionado, pode ser encontrado também back edge.

Forward edge não pode existir em uma árvore BFS porque ela parte de uma camada superior e aponta para uma camada inferior. Visto que o BFS explora em camadas, se essa aresta existir no grafo, será incluída como uma tree edge.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Quais tipos de arestas podem ser encontrados em um grafo DFS? Justifique.

A

Tree Edge (por definição) e back Edge. Se o grafo for direcionado, pode ser encontrado também forward edge e cross edge.

Em um grafo não direcionado, todas as arestas são descobertas pelo último elemento a ser visitado. Por isso, uma aresta entre dois vértices dependentes será ou uma Tree Edge (se for explorada pelo vértice na camada superior) ou uma Back Edge (se for explorada pelo vértice na camada inferior).

Da mesma forma, uma potencial cross Edge seria incluída ou como uma tree edge (se os vértices pertencessem a árvores diferentes) ou uma back edge (se possuírem algum descendente em comum).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Como identificar back edges em um grafo DFS?

A

Mantenha uma lista L com todos os vértices que estão sendo explorados mas ainda não foram finalizados. Ao explorar uma aresta nova, ela será uma back edge se e somente se ela conectar dois vértices que ainda não foram finalizados.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Como identificar back edges em um grafo BFS?

A

Ao explorar uma aresta nova, ela será uma back edge se e somente se ela conectar um vértice que não foi finalizado a um vértice que já foi.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Como identificar forward edges em um grafo DFS?

A

Mantenha em cada vértice uma variável contendo o tempo em que a exploração começou e o tempo no qual a exploração terminou. Uma aresta é uma forward edge se e somente se a exploração do vértice de origem começou antes da exploração do vértice de destino.

20
Q

Como identificar cross edges em um grafo DFS?

A

Mantenha em cada vértice uma variável contendo o tempo em que a exploração começou e o tempo no qual a exploração terminou. Uma aresta é uma forward edge se e somente se a exploração do vértice de origem começou depois da exploração do vértice de destino.

21
Q

Como identificar cross edges em um grafo BFS?

A

Mantenha uma lista L com todos os vértices que estão sendo explorados mas ainda não foram finalizados. Ao explorar uma aresta nova, ela será uma cross se e somente se ela conectar dois vértices que ainda não foram finalizados.

22
Q

Como identificar um ciclo em um grafo a partir dos tipos de suas arestas, do tipo do grafo e do algoritmo usado?

A

Independente do algoritmo ou do grafo utilizado, uma back edge sempre indica um ciclo. No caso de um BFS em um grafo não direcionado, uma Cross Edge também indica um ciclo.

23
Q

Qual propriedade relaciona as arestas de um grafo G que conectam dois pontos x e y com os níveis no qual esses pontos aparecerão dentro da árvore BFS formada a partir de G ? Que conclusão podemos tirar sobre as arestas que estão no grafo mas não estão na árvore?

A

Se (x,y) é uma aresta em um grafo G, x e y aparecerão na árvore BFS ou no mesmo nível ou em níveis consecutivos. A consequência que podemos tirar é que as arestas presentes em G que não estão na árvore conectam sempre vértices que estão ou no mesmo nível ou em níveis consecutivos.

24
Q

Qual é a complexidade do algoritmo BFS em função de seus vértices e arestas?

25
O que podemos afirmar sobre as arestas presentes em um grafo que não estão presentes na respectiva árvore DFS ?
As arestas que estão presentes no grafo conectarão sempre elementos que são descendentes diretos na árvore BFS.
26
O que significa dizer que dois vértices u e v são mutuamente alcançáveis em um grafo G?
Significa que o grafo G é direcionado e existe um caminho entre u e v e um caminho entre v e u.
27
Explique, de forma simples, o funcionamento de um algoritmo capaz de detectar se um grafo G é fortemente conectado com complexidade de tempo igual ou inferior a O(V + E).
- Escolha um nó aleatório s ∈ G. - Rode BFS ou DFS no nó s. - Reverta a direção das arestas de G (ou, em outras palavras, calcule a reversa/transposta do grafo G). - Execute o mesmo algoritmo no grafo G revertido. - Retorne verdadeiro se e somente se todos os vértices foram alcançados por ambos os algoritmos
28
O que é um componente fortemente conectado em um grafo G?
Em um grafo (direcionado) G, um componente fortemente conectado é um componente de tamanho maximal de vértices mutuamente alcançáveis.
29
O que é um DAG?
DAG (directed acyclical graph) é um grafo direcionado que não possui ciclos.
30
Como podemos identificar se um grafo direcionado é G é acíclico a partir de sua respectiva árvore DFS? Por que isso ocorre?
Um grafo G é acíclico se e somente se não existir nenhuma árvore DFS formada a partir de G com arestas do tipo back (ou seja, arestas que saem de um nível inferior e alcançam um nível superior em uma árvore).
31
O que a ordenação topológica de um grafo?
É uma ordenação dos vértices do grafo como v1, v2, ..., vn de modo que toda aresta entre vértices (vi, vj) possua i < j.
32
Cite duas aplicações para ordenação topológica.
Ordenação topológica é um conceito muito útil para representar grafos que representam relações de precedência na vida real. Exemplos: - Relação entre matérias e seus pré-requisitos em uma faculdade - Relação entre bibliotecas e suas dependências em um projeto - Organização de tarefas em um projeto profissional: indicar que uma tarefa x precisa ser completada antes de uma y ser iniciada.
33
Qual é a relação entre ordenação topológica e o conceito de um DAG?
G é um DAG se e somente se G possui uma ordenação topológica.
34
Qual é a relação entre o conceito de um DAG e o conceito de Componentes Fortemente Conectados (SCC)? Por que essa relação é verdadeira?
Os componentes fortemente conectados em um grafo direcionado formam, de maneira coletiva, um DAG. É fácil notar que essa relação é verdadeira pela definição de DAG (grafo direcionado sem ciclos) e componente fortemente conectado (ciclo maximal). Se os SCC não formam um DAG, isso quer dizer que existe um ciclo. Um ciclo implica que seus vértices são mutuamente alcançáveis, o que os tornaria um SCC.
35
Explique, de forma simples, o funcionamento de um algoritmo baseado em DFS capaz de obter a ordenação topológica de um DAG.
- Construa um algoritmo BFS que mantém, em cada aresta, seu tempo de descoberta e de finalização. - Execute esse em um grafo até todas arestas terem sido ordenadas. - A ordenação topológica será dada pela ordenação decrescente das arestas em termos de tempo de finalização.
36
Cite dois exemplos de razões pela qual arestas com peso negativo aumentam a complexidade do problema do menor caminho.
- Arestas com peso negativo inviabilizam a estratégia de algoritmos como o de Dijkstra de identificar sempre os vértices mais próximos da origem a cada iteração. - A presença de ciclos negativos em um algoritmo que não limita quantas vezes a mesma aresta pode fazer parte do resultado pode tornar o resultado indeterminado.
37
O que é o diâmetro de um grafo?
É a maior distância mínima entre um part de vértices presentes no grafo.
38
Por que, em uma árvore BFS de um grafo não-direcionado, podemos afirmar que não existem arestas entre vértices cuja diferença de nível é maior que 1?
O funcionamento do algoritmo BFS implica que todos os vértices conectados a um vértice no nível anterior são explorados antes de um próximo nível ser iniciado. Por consequência, se existisse uma aresta entre dois vértices vi e vj, i < j, j-i > 1, essa aresta seria explorada na camada i+1.
39
O que é o ciclo mínimo de um grafo direcionado? E de um grafo não-direcionado?
O ciclo mínimo de um grafo direcionado são duas arestas que conectam (a, b) e (b,a). No caso de um grafo não-direcionado, são três arestas que conectam (a,b), (b,c) e (c,a).
40
Como usar DFS para obter a ordem topológica de um grafo?
Execute uma versão ligeiramente modificada do DFS que mantém, além dos vértices explorados, os momentos nos quais os vértices são descobertos e finalizados. Retorne os vértices em ordem decrescente de tempo de finalização.
41
Defina os seguintes termos no contexto de grafos: - Caminho - Corte - Cutset
- Caminho: Sequência de arestas que conectam uma sequência de nós - Corte: Partição de nós em duas componentes não vazias complementares. - Cutset: Conjunto de todas as arestas com exatamente um vértice em cada lado do corte.
42
Defina os seguintes termos no contexto de grafos: - Ciclo Fundamental - Cutset Fundamental
- Ciclo Fundamental: Em uma árvore geradora que não contém uma aresta E que liga dois vértices V e W existe um caminho entre os vértices V e W que não passa por E. Ao adicionarmos E, então, criamos um ciclo conhecido como ciclo fundamental. - Cutset fundamental: Em uma árvore geradora que contém uma aresta E que liga dois vértices V e W, o único caminho de V para W é pela aresta E. Ao removermos E, então, criamos um cutset conhecido como cutset fundamental.
43
O que podemos afirmar sobre a intersecção entre ciclos e cutsets?
Um ciclo e um cutset vão sempre se intersectar em um número par de vértices.
44
Considere um grafo G com uma árvore geradora mínima G'. Que tipo de mudanças podemos fazer em G de modo que as arestas de G' ainda formem uma árvore geradora mínima?
Mudanças que não afetam a ordem relativa das arestas em G.
45
O que é a regra vermelha e a regra azul? Em qual contexto elas se aplicam?
Regra vermelha e regra azul são regras usadas para identificar arestas que pertencem (ou não) à solução do problema da árvore geradora mínima de um grafo. Regra vermelha: - Selecione um ciclo C no grafo sem nenhuma aresta vermelha. - Colora de vermelho a aresta de maior custo. Ela não fará parte da árvore geradora mínima. Regra azul: - Selecione um cutset C num grafo que não inclua nenhuma aresta azul. - Colora de azul a aresta de menor custo. Ela fará parte da árvore geradora mínima.