Estruturas de Dados e Algoritmos: pacote de revisão

Formulários, as principais etapas dos métodos de cada tópico e 6 exercícios, com soluções completas no final.

Novos exercíciosVoltar à disciplina

Na janela de impressão, escolha “Salvar como PDF” para guardar uma cópia no seu dispositivo.

1Fórmulas e métodos

Teoria dos grafos

Lema do aperto de mãos
Σ deg(v) = 2|E|
Grafos completos
|E(Kn)| = n(n − 1)/2, |E(Km,n)| = m·n
Grafo regular
|E| = n·k/2
Árvore e floresta
|E| = n − 1, |E| = n − c
Folhas de uma árvore
L = 2 + Σ (deg(v) − 2) over deg(v) ≥ 3
Euler
circuito: todos os graus pares; caminho: exatamente 2 graus ímpares
Circuitos hamiltonianos em Kn
(n − 1)!/2
Atualização de Dijkstra
d(v) = min(d(v), d(u) + w(u, v))
Passeios de comprimento L
(Mᴸ)ij

Método

  1. Anote o grau de cada vértice; a soma dos graus é igual ao dobro do número de arestas.
  2. Em questões de Euler, verifique se o grafo é conexo e conte os vértices de grau ímpar.
  3. Para árvores, use n − 1 arestas e o lema do aperto de mãos.
  4. Em Dijkstra, mantenha uma tabela de distâncias provisórias e fixe a cada rodada o vértice não fixado de menor distância.
  5. Para uma árvore geradora mínima, ordene as arestas por peso e pule toda aresta que feche um ciclo (Kruskal), ou faça crescer uma árvore a partir de um vértice inicial (Prim).

2Exercícios

1.Algoritmos e complexidadeMédia

Qual é o tempo de execução do radix sort LSD para n inteiros com d dígitos na base k?

  1. AO(d(n + k))
  2. BO(n²)
  3. CO(dn log k)
  4. DO(n log n)
2.Algoritmos e complexidadeDifícil

Usando o teorema mestre, T(n) = 8T(n/2) + O(n²) tem como solução:

  1. AΘ(n log n)
  2. BΘ(n³)
  3. CΘ(n²)
  4. DΘ(n² log n)
3.Estruturas de dadosMédia

Por que percorrer um array costuma ser muito mais rápido na prática do que percorrer uma lista encadeada do mesmo tamanho?

  1. AArrays usam menos instruções para comparar valores
  2. BPercorrer um array é O(1) no total, enquanto percorrer uma lista encadeada é O(n)
  3. COs elementos do array são contíguos, então aproveitam bem o cache da CPU
  4. DListas encadeadas sempre armazenam os elementos em disco
4.Estruturas de dadosDifícil

Para uma tabela hash funcionar corretamente, que regra o hash e a igualdade devem seguir?

  1. AOs valores hash devem ser números primos
  2. BChaves iguais devem ter valores hash iguais
  3. CChaves diferentes devem ter valores hash diferentes
  4. DValores hash iguais implicam chaves iguais
5.Teoria dos grafosMédia

Quantos circuitos hamiltonianos diferentes H tem o grafo completo K8? Circuitos que diferem apenas no vértice inicial ou no sentido contam como o mesmo.

K8
H =
6.Teoria dos grafosDifícil
ABCDE

Quantos passeios de comprimento 2 vão de E a C? Um passeio pode repetir vértices e arestas. Chame o número de N.

M = matriz de adjacênciaL = 2
N =

3Soluções

1.Algoritmos e complexidade

Resposta: A · O(d(n + k))

Porque é esta a resposta

Cada uma das d passadas é um counting sort de custo O(n + k), então, para d e k fixos, o total é linear em n.

Resposta

A · O(d(n + k))
2.Algoritmos e complexidade

Resposta: B · Θ(n³)

Porque é esta a resposta

log₂ 8 = 3, e n² cresce mais devagar que n³, então as folhas dominam: Θ(n³).

Resposta

B · Θ(n³)
3.Estruturas de dados

Resposta: C · Os elementos do array são contíguos, então aproveitam bem o cache da CPU

Porque é esta a resposta

A memória contígua dá boa localidade de referência, enquanto os nós encadeados podem estar espalhados e causar muitos cache misses.

Resposta

C · Os elementos do array são contíguos, então aproveitam bem o cache da CPU
4.Estruturas de dados

Resposta: B · Chaves iguais devem ter valores hash iguais

Porque é esta a resposta

Se duas chaves iguais tivessem hashes diferentes, iriam para buckets diferentes e as buscas falhariam; chaves diferentes ainda podem compartilhar um hash.

Resposta

B · Chaves iguais devem ter valores hash iguais
5.Teoria dos grafos

Resposta: H = 2520

Euler, Hamilton e árvores: um grafo conexo tem um circuito euleriano (cada aresta uma vez, de volta ao início) quando todo vértice tem grau par, e um caminho euleriano que não é circuito quando exatamente dois vértices têm grau ímpar; o caminho vai então de um vértice ímpar ao outro. Um circuito hamiltoniano visita cada vértice uma vez; Kn tem (n − 1)!/2 deles. Uma árvore com n vértices tem n − 1 arestas, e um grafo conexo com m arestas mantém uma árvore geradora depois de remover m − n + 1 arestas.

Contar

H = (8 − 1)!/2 = 5040/2 = 2520

Resposta

H = 2520
6.Teoria dos grafos

Resposta: N = 1

Graus: o grau de um vértice é o número de arestas que o tocam. Cada aresta tem duas pontas, então os graus somam o dobro do número de arestas: Σ deg(v) = 2|E| (o lema do aperto de mãos). Portanto o número de vértices de grau ímpar é par. Kn tem n(n − 1)/2 arestas, um grafo k-regular com n vértices tem nk/2, e uma árvore com n vértices tem n − 1 arestas.

Matriz de adjacência

A: 0 1 1 0 0
B: 1 0 1 1 1
C: 1 1 0 0 1
D: 0 1 0 0 1
E: 0 1 1 1 0

Vizinhos comuns

(M²)EC = 0·1 + 1·1 + 1·0 + 1·0 + 0·1 = 1

Resposta

N = 1

ExamProblems · examproblems.com/courses/data-structures-and-algorithms