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

Qual è la soluzione della ricorrenza T(n) = T(n − 1) + O(1)?

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

Quali due cose bisogna dimostrare per provare che un problema decisionale X è NP-completo?

  1. AX si riduce a un problema in P, e X è in NP
  2. BX non ha un algoritmo polinomiale, e X è decidibile
  3. CX è in NP, e un problema NP-completo noto si riduce a X in tempo polinomiale
  4. DX è in P, e X si riduce a SAT
3.Strutture datiMedia

Un trie (albero dei prefissi) è particolarmente efficiente per:

  1. AMemorizzare matrici
  2. BRicerche per prefisso, come il completamento automatico
  3. CTrovare cammini minimi
  4. DOrdinare numeri
4.Strutture datiDifficile

Un segment tree (albero dei segmenti) è tipicamente usato per:

  1. AImplementare uno stack
  2. BOrdinare stringhe alfabeticamente memorizzando ogni prefisso in un nodo separato dell'albero
  3. CRispondere a interrogazioni su intervalli (come somme su intervalli) e aggiornamenti in O(log n)
  4. DMemorizzare gli archi di un grafo
5.Teoria dei grafiMedia

Un albero ha 3 vertici di grado 3, 4 vertici di grado 4, e tutti gli altri suoi vertici sono foglie (grado 1). Quante foglie L ha?

3 × deg 34 × deg 4
L =
6.Teoria dei grafiDifficile
56161311183410ABCDEFG

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

|V| = 7|E| = 10
W =

3Soluzioni

1.Algoritmi e complessità

Risposta: A · O(n)

Perché è questa la risposta

Ci sono n livelli, ciascuno con lavoro costante, come nella somma ricorsiva di un array.

Risposta

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

Risposta: C · X è in NP, e un problema NP-completo noto si riduce a X in tempo polinomiale

Perché è questa la risposta

L'appartenenza a NP mostra che X non è più difficile di NP; la riduzione da un problema NP-completo noto mostra che X è almeno difficile quanto tutto NP.

Risposta

C · X è in NP, e un problema NP-completo noto si riduce a X in tempo polinomiale
3.Strutture dati

Risposta: B · Ricerche per prefisso, come il completamento automatico

Perché è questa la risposta

I trie memorizzano le stringhe carattere per carattere lungo i percorsi, quindi ricerche e interrogazioni per prefisso richiedono un tempo proporzionale alla lunghezza della chiave.

Risposta

B · Ricerche per prefisso, come il completamento automatico
4.Strutture dati

Risposta: C · Rispondere a interrogazioni su intervalli (come somme su intervalli) e aggiornamenti in O(log n)

Perché è questa la risposta

Un segment tree memorizza valori aggregati per intervalli, supportando interrogazioni su intervalli e aggiornamenti puntuali in tempo O(log n).

Risposta

C · Rispondere a interrogazioni su intervalli (come somme su intervalli) e aggiornamenti in O(log n)
5.Teoria dei grafi

Risposta: L = 13

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.

Lemma delle strette di mano per un albero

L + 25 = 2(L + 7) − 2
L = 13

Risposta

L = 13

Scorciatoia: L = 2 + Σ (d − 2) sui vertici di grado d ≥ 3.

6.Teoria dei grafi

Risposta: W = 29

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

EF (1): prendi
GC (3): prendi
GD (4): prendi
AB (5): prendi
AC (6): prendi
GB (8): salta, chiude un ciclo
GE (10): prendi

Peso totale

W = 1 + 3 + 4 + 5 + 6 + 10 = 29

Risposta

W = 29

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