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) = 2T(n/2) + O(1)?

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

22n è in O(2ⁿ)?

  1. ANo, perché 22n cresce più lentamente di 2ⁿ
  2. BSì, perché sono entrambi esponenziali
  3. CSì, perché i fattori costanti nell'esponente si ignorano sempre nell'O grande
  4. DNo, perché 22n = 4ⁿ e 4ⁿ / 2ⁿ = 2ⁿ cresce senza limite
3.Strutture datiMedia

Quanta memoria utilizza una matrice di adiacenza per un grafo con V vertici?

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

Un array dinamico raddoppia quando è pieno. Perché molte implementazioni lo riducono solo quando è pieno per un quarto, e non per metà?

  1. APer evitare ridimensionamenti ripetuti quando push e pop si alternano vicino alla soglia
  2. BPer mantenere l'array ordinato
  3. CPerché dimezzare a metà farebbe perdere elementi
  4. DPerché l'allocatore di memoria può liberare memoria solo a quarti di blocco
5.Teoria dei grafiMedia
ABCDEFCircuito eulerianoCammino euleriano, nessun circuitonessuna delle due

Il grafo connesso ha un circuito euleriano, un cammino euleriano che non è un circuito, oppure nessuno dei due? Clicca la tua risposta.

|V| = 6|E| = 9
  1. 1Circuito euleriano
  2. 2Cammino euleriano, nessun circuito
  3. 3nessuna delle due
6.Teoria dei grafiDifficile
3812131531522ABCDEFG

Usa l’algoritmo di Dijkstra per trovare la lunghezza d(F) del cammino minimo da A a F nel grafo pesato.

partenza: Aarrivo: F
d(F) =

3Soluzioni

1.Algoritmi e complessità

Risposta: B · O(n)

Perché è questa la risposta

Per il teorema dell'esperto (master theorem) nlog₂ 2 = n domina il lavoro costante, quindi T(n) = Θ(n), come quando si trova il massimo dividendo a metà.

Risposta

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

Risposta: D · No, perché 22n = 4ⁿ e 4ⁿ / 2ⁿ = 2ⁿ cresce senza limite

Perché è questa la risposta

Una costante sommata all'esponente dà un fattore costante, ma una costante che moltiplica l'esponente cambia la base e il tasso di crescita.

Risposta

D · No, perché 22n = 4ⁿ e 4ⁿ / 2ⁿ = 2ⁿ cresce senza limite
3.Strutture dati

Risposta: B · O(V²)

Perché è questa la risposta

Una matrice di adiacenza memorizza V × V elementi ed è efficiente per grafi densi; le liste di adiacenza usano O(V + E), meglio per grafi sparsi.

Risposta

B · O(V²)
4.Strutture dati

Risposta: A · Per evitare ridimensionamenti ripetuti quando push e pop si alternano vicino alla soglia

Perché è questa la risposta

Ridurre a metà potrebbe provocare un ridimensionamento a ogni operazione in una sequenza del genere; il margine tra 1/4 e pieno mantiene il costo ammortizzato O(1).

Risposta

A · Per evitare ridimensionamenti ripetuti quando push e pop si alternano vicino alla soglia
5.Teoria dei grafi

Risposta: Cammino euleriano, nessun circuito

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.

Gradi

deg(A) = 2, deg(B) = 4, deg(C) = 3, deg(D) = 3, deg(E) = 4, deg(F) = 2

Vertici dispari

C, D → 2
Cammino euleriano, nessun circuito

Risposta

Cammino euleriano, nessun circuito

Il cammino euleriano parte da un vertice dispari e termina nell’altro.

6.Teoria dei grafi

Risposta: d(F) = 15

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

Ogni riga: il vertice fissato, la sua distanza definitiva e i vertici adiacenti la cui distanza migliora.

A (0): B: 3, C: 8
B (3): D: 16, G: 18
C (8): G: 10
G (10): E: 12
E (12): F: 15
F (15)
D (16)

Cammino minimo

A → C → G → E → F
d(F) = 15

Risposta

d(F) = 15

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