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

Quanto spazio di stack usa una semplice funzione fattoriale ricorsiva fact(n) = n × fact(n − 1)?

  1. AO(log n)
  2. BO(n²)
  3. CO(n)
  4. DO(1)
2.Algoritmi e complessitàDifficile

Un problema è NP-completo se:

  1. AÈ al di fuori di NP ma più difficile di tutti i problemi NP, come il problema della fermata
  2. BÈ impossibile da risolvere
  3. CÈ risolvibile in tempo polinomiale
  4. DAppartiene a NP e ogni problema NP si riduce a esso in tempo polinomiale
3.Strutture datiMedia

Un albero binario ha radice 1 con figlio sinistro 2 e figlio destro 3; il nodo 2 ha figli 4 (sinistro) e 5 (destro). Qual è la visita in preordine?

  1. A1 2 3 4 5
  2. B4 5 2 3 1
  3. C1 2 4 5 3
  4. D4 2 5 1 3
4.Strutture datiDifficile

Qual è il vantaggio principale di una skip list rispetto a una lista concatenata ordinata?

  1. ARicerca garantita in O(1) perché ogni nodo memorizza un puntatore a tutti gli altri nodi
  2. BRicerca attesa in O(log n) grazie a più livelli di puntatori in avanti
  3. CNon usa memoria aggiuntiva
  4. DMemorizza le chiavi senza ordine
5.Teoria dei grafiMedia

Un grafo connesso ha 9 vertici e 11 lati. Quanti lati k vanno tolti per ottenere un albero di copertura?

|V| = 9|E| = 11
k =
6.Teoria dei grafiDifficile
978171652018ABCDEF

Trova il peso totale W di un albero di copertura minimo del grafo pesato.

|V| = 6|E| = 8
W =

3Soluzioni

1.Algoritmi e complessità

Risposta: C · O(n)

Perché è questa la risposta

La ricorsione arriva a n chiamate di profondità prima di qualsiasi ritorno, e ogni chiamata richiede un record di attivazione (stack frame), quindi usa O(n) spazio.

Risposta

C · O(n)
2.Algoritmi e complessità

Risposta: D · Appartiene a NP e ogni problema NP si riduce a esso in tempo polinomiale

Perché è questa la risposta

I problemi NP-completi sono i più difficili in NP; un algoritmo polinomiale per uno di essi ne darebbe uno per tutto NP.

Risposta

D · Appartiene a NP e ogni problema NP si riduce a esso in tempo polinomiale
3.Strutture dati

Risposta: C · 1 2 4 5 3

Perché è questa la risposta

La visita in preordine visita 1, poi il suo sottoalbero sinistro (2, 4, 5), poi 3; le altre opzioni sono la visita in ordine, in postordine e per livelli.

Risposta

C · 1 2 4 5 3
4.Strutture dati

Risposta: B · Ricerca attesa in O(log n) grazie a più livelli di puntatori in avanti

Perché è questa la risposta

I livelli casuali permettono alle ricerche di saltare molti nodi, ottenendo un tempo atteso O(log n) per ricerca, inserimento e cancellazione.

Risposta

B · Ricerca attesa in O(log n) grazie a più livelli di puntatori in avanti
5.Teoria dei grafi

Risposta: k = 3

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.

Lati di un albero di copertura

9 − 1 = 8

Lati da togliere

k = 11 − 8 = 3

Risposta

k = 3
6.Teoria dei grafi

Risposta: W = 56

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.

Algoritmo di Kruskal

DE (5): prendi
AC (7): prendi
BC (8): prendi
AB (9): salta, chiude un ciclo
CE (16): prendi
BD (17): salta, chiude un ciclo
BE (18): salta, chiude un ciclo
DF (20): prendi

Peso totale

W = 5 + 7 + 8 + 16 + 20 = 56

Risposta

W = 56

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