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

Un algoritmo greedy (goloso):

  1. AUsa solo la ricorsione
  2. BFornisce sempre la soluzione ottima
  3. CProva ogni soluzione possibile
  4. DCompie la scelta localmente migliore a ogni passo
2.Algoritmi e complessitàDifficile

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

  1. AX è in P, e X si riduce a SAT
  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 si riduce a un problema in P, e X è in NP
3.Strutture datiMedia

Come si inserisce un nuovo elemento in un heap binario?

  1. ALo si inserisce nella posizione ordinata spostando di un posto a destra tutti gli elementi più grandi
  2. BLo si pone alla fine dell'array e lo si fa risalire finché viola la proprietà di heap
  3. CLo si pone nella radice e lo si fa scendere
  4. DSi ricostruisce da zero l'intero heap
4.Strutture datiDifficile

Un nodo AVL è sbilanciato perché il sottoalbero destro del suo figlio sinistro è diventato troppo alto (caso sinistra-destra). Quale correzione si applica?

  1. AUna singola rotazione a destra sul nodo
  2. BUna singola rotazione a sinistra sul nodo
  3. CUna rotazione a destra sul figlio sinistro, poi una rotazione a sinistra sul nodo
  4. DUna rotazione a sinistra sul figlio sinistro, poi una rotazione a destra sul nodo
5.Teoria dei grafiMedia
ABCDECircuito 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| = 5|E| = 6
  1. 1Circuito euleriano
  2. 2Cammino euleriano, nessun circuito
  3. 3nessuna delle due
6.Teoria dei grafiDifficile
11101511681514ABCDEF

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

partenza: Aarrivo: D
d(D) =

3Soluzioni

1.Algoritmi e complessità

Risposta: D · Compie la scelta localmente migliore a ogni passo

Perché è questa la risposta

Gli algoritmi greedy sono veloci e ottimi per alcuni problemi (ad es. Dijkstra, codifica di Huffman) ma non in generale (ad es. il problema del resto con alcuni sistemi di monete).

Risposta

D · Compie la scelta localmente migliore a ogni passo
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 · Lo si pone alla fine dell'array e lo si fa risalire finché viola la proprietà di heap

Perché è questa la risposta

Aggiungere alla fine mantiene l'albero completo; gli scambi con il genitore ripristinano l'ordine in O(log n) passi.

Risposta

B · Lo si pone alla fine dell'array e lo si fa risalire finché viola la proprietà di heap
4.Strutture dati

Risposta: D · Una rotazione a sinistra sul figlio sinistro, poi una rotazione a destra sul nodo

Perché è questa la risposta

La prima rotazione trasforma il caso sinistra-destra in un caso sinistra-sinistra, che viene poi corretto da una rotazione a destra sul nodo sbilanciato.

Risposta

D · Una rotazione a sinistra sul figlio sinistro, poi una rotazione a destra sul nodo
5.Teoria dei grafi

Risposta: Circuito euleriano

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) = 2, deg(D) = 2, deg(E) = 2

Vertici dispari

0
Circuito euleriano

Risposta

Circuito euleriano
6.Teoria dei grafi

Risposta: d(D) = 16

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: 1, C: 1
B (1): D: 16, E: 15
C (1): E: 12
E (12): F: 27
D (16): F: 24
F (24)

Cammino minimo

A → B → D
d(D) = 16

Risposta

d(D) = 16

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