Algoritmi e strutture dati: pacchetto last-minute

Formulari, i passaggi chiave del metodo per ogni argomento e 6 esercizi, con le soluzioni complete in fondo.

Nuovi eserciziTorna al corso

Nella finestra di stampa scegli “Salva come PDF” per conservarne una copia sul tuo dispositivo.

1Formule e metodi

Teoria dei grafi

Lemma delle strette di mano
Σ deg(v) = 2|E|
Grafi completi
|E(Kn)| = n(n − 1)/2, |E(Km,n)| = m·n
Grafo regolare
|E| = n·k/2
Albero e foresta
|E| = n − 1, |E| = n − c
Foglie di un albero
L = 2 + Σ (deg(v) − 2) over deg(v) ≥ 3
Eulero
circuito: tutti i gradi pari; cammino: esattamente 2 gradi dispari
Cicli hamiltoniani in Kn
(n − 1)!/2
Aggiornamento di Dijkstra
d(v) = min(d(v), d(u) + w(u, v))
Cammini di lunghezza L
(Mᴸ)ij

Metodo

  1. Scrivi il grado di ogni vertice; la somma dei gradi è il doppio del numero di lati.
  2. Nelle domande su Eulero, verifica che il grafo sia connesso e conta i vertici di grado dispari.
  3. Per gli alberi, usa n − 1 lati e il lemma delle strette di mano.
  4. Per Dijkstra, tieni una tabella delle distanze provvisorie e a ogni passo fissa il vertice non ancora fissato con la distanza minima.
  5. Per un albero di copertura minimo, ordina i lati per peso e salta ogni lato che chiude un ciclo (Kruskal), oppure fai crescere un solo albero a partire da un vertice iniziale (Prim).

2Esercizi

1.Algoritmi e complessitàMedia

È corretto dire che un algoritmo O(n²) è anche O(n³)?

  1. ANo, perché l'O grande deve indicare sempre l'esatto tasso di crescita della funzione
  2. BSì, ma solo se n è minore di 100
  3. CSì, perché l'O grande è un limite superiore e n² non cresce più velocemente di n³
  4. DNo, perché per n grande n³ è minore di n²
2.Algoritmi e complessitàDifficile

Qual è la complessità temporale della costruzione di un heap binario da n elementi non ordinati con il metodo bottom-up?

  1. AO(log n)
  2. BO(n²)
  3. CO(n)
  4. DO(n log n)
3.Strutture datiMedia

Quanta memoria usa una lista di adiacenza per un grafo con V vertici ed E archi?

  1. AO(V + E)
  2. BO(V²)
  3. CO(V × E)
  4. DO(E²)
4.Strutture datiDifficile

Perché i B-alberi (B-tree) sono usati nei database e nei file system?

  1. ANon richiedono ribilanciamento
  2. BIl loro elevato fattore di ramificazione mantiene l'albero poco profondo, riducendo le lente letture da disco
  3. CMemorizzano i dati in modo non ordinato
  4. DUsano meno memoria di qualsiasi array, quindi l'intero indice sta sempre nella memoria centrale
5.Teoria dei grafiMedia

Quanti cicli hamiltoniani diversi H ha il grafo completo K5? I cicli che differiscono solo per il vertice iniziale o per il verso contano come lo stesso.

K5
H =
6.Teoria dei grafiDifficile
49313106811ABCDEF

L’algoritmo di Dijkstra parte da A. Clicca il vertice che viene fissato (reso permanente) al passo 4; A stesso è il passo 1.

partenza: Apasso 4
  1. 1A
  2. 2B
  3. 3C
  4. 4D
  5. 5E
  6. 6F

3Soluzioni

1.Algoritmi e complessità

Risposta: C · Sì, perché l'O grande è un limite superiore e n² non cresce più velocemente di n³

Perché è questa la risposta

L'O grande è un limite superiore, quindi l'affermazione è vera ma non stretta; Θ(n²) indica il tasso di crescita esatto.

Risposta

C · Sì, perché l'O grande è un limite superiore e n² non cresce più velocemente di n³
2.Algoritmi e complessità

Risposta: C · O(n)

Perché è questa la risposta

Sommando i costi di discesa (sift-down) su tutti i livelli si ottiene una serie convergente, quindi heapify viene eseguito in tempo lineare.

Risposta

C · O(n)
3.Strutture dati

Risposta: A · O(V + E)

Perché è questa la risposta

Ogni vertice ha una lista e ogni arco compare una volta (orientato) o due volte (non orientato), per un totale di O(V + E).

Risposta

A · O(V + E)
4.Strutture dati

Risposta: B · Il loro elevato fattore di ramificazione mantiene l'albero poco profondo, riducendo le lente letture da disco

Perché è questa la risposta

I B-alberi memorizzano molte chiavi per nodo, quindi l'altezza è ridotta e servono poche letture di blocchi per ogni ricerca; i B+-alberi collegano inoltre le foglie per le scansioni per intervallo.

Risposta

B · Il loro elevato fattore di ramificazione mantiene l'albero poco profondo, riducendo le lente letture da disco
5.Teoria dei grafi

Risposta: H = 12

Eulero, Hamilton e alberi: un grafo connesso ha un circuito euleriano (ogni lato una volta, di nuovo al punto di partenza) quando ogni vertice ha grado pari, e un cammino euleriano che non è un circuito quando esattamente due vertici hanno grado dispari; il cammino va allora da un vertice dispari all’altro. Un ciclo hamiltoniano visita ogni vertice una volta; Kn ne ha (n − 1)!/2. Un albero con n vertici ha n − 1 lati, e un grafo connesso con m lati mantiene un albero di copertura dopo aver tolto m − n + 1 lati.

Conta

H = (5 − 1)!/2 = 24/2 = 12

Risposta

H = 12
6.Teoria dei grafi

Risposta: E

Cammini minimi e alberi di copertura: l’algoritmo di Dijkstra fissa un vertice per passo: il vertice non fissato con la distanza provvisoria minima. La sua distanza è allora definitiva, e ogni vertice adiacente v riceve d(v) = min(d(v), d(u) + w(u, v)). L’algoritmo di Kruskal costruisce un albero di copertura minimo prendendo i lati dal più leggero al più pesante e saltando ogni lato che chiuderebbe un ciclo; l’algoritmo di Prim fa crescere un solo albero da un vertice iniziale aggiungendo sempre il lato più leggero che ne esce. Un albero di copertura di n vertici ha n − 1 lati.

Dijkstra passo per passo

1. A (0): B: 4, C: 9
2. B (4): C: 7, D: 17, E: 15
3. C (7)
4. E (15): F: 23
5. D (17)
6. F (23)

passo 4

E

Risposta

E

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