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

Il limite inferiore per l'ordinamento basato su confronti nel caso peggiore è:

  1. AΩ(n²)
  2. BΩ(n)
  3. CΩ(log n)
  4. DΩ(n log n)
2.Algoritmi e complessitàDifficile

Perché l'algoritmo di Dijkstra può dare risultati errati quando alcuni pesi degli archi sono negativi?

  1. AEntra in un ciclo infinito a ogni arco negativo
  2. BFunziona solo sui grafi non orientati
  3. CUn vertice viene considerato definitivo quando è estratto, ma un arco negativo successivo potrebbe ancora dargli un cammino più breve
  4. DI numeri negativi non si possono memorizzare in una coda di priorità
3.Strutture datiMedia

Una tabella hash di dimensione 7 usa h(k) = k mod 7 e la scansione lineare. Dopo aver inserito 10, dove viene memorizzato 17?

  1. AAll'indice 3
  2. BAll'indice 0
  3. CAll'indice 6
  4. DAll'indice 4
4.Strutture datiDifficile

Quanto tempo serve per cercare una chiave arbitraria in un min-heap binario di n elementi?

  1. AO(1)
  2. BO(log log n)
  3. CO(log n)
  4. DO(n)
5.Teoria dei grafiMedia

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

2 × deg 34 × deg 5
L =
6.Teoria dei grafiDifficile
15207911310519ABCDEF

L’algoritmo di Prim costruisce un albero di copertura minimo a partire dal vertice D. Clicca il lato che aggiunge come lato numero 2.

partenza: Dk = 2
  1. 1lato AB
  2. 2lato AC
  3. 3lato BC
  4. 4lato BD
  5. 5lato CE
  6. 6lato DE
  7. 7lato DF
  8. 8lato EF
  9. 9lato BE

3Soluzioni

1.Algoritmi e complessità

Risposta: D · Ω(n log n)

Perché è questa la risposta

Qualsiasi ordinamento per confronti richiede almeno log₂(n!) ≈ n log n confronti nel caso peggiore. Il counting sort lo batte perché non effettua confronti.

Risposta

D · Ω(n log n)
2.Algoritmi e complessità

Risposta: C · Un vertice viene considerato definitivo quando è estratto, ma un arco negativo successivo potrebbe ancora dargli un cammino più breve

Perché è questa la risposta

Il passo greedy si basa su pesi non negativi perché le distanze estratte siano definitive; quando i pesi possono essere negativi si usa Bellman–Ford.

Risposta

C · Un vertice viene considerato definitivo quando è estratto, ma un arco negativo successivo potrebbe ancora dargli un cammino più breve
3.Strutture dati

Risposta: D · All'indice 4

Perché è questa la risposta

10 mod 7 = 3 e 17 mod 7 = 3; l'indice 3 è occupato, quindi la scansione lineare prova la posizione successiva, l'indice 4.

Risposta

D · All'indice 4
4.Strutture dati

Risposta: D · O(n)

Perché è questa la risposta

Un heap non fornisce alcuna regola su quale sottoalbero contenga una chiave, quindi nel caso peggiore bisogna controllare tutti i nodi; solo il minimo si trova rapidamente.

Risposta

D · O(n)
5.Teoria dei grafi

Risposta: L = 16

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 + 26 = 2(L + 6) − 2
L = 16

Risposta

L = 16

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

6.Teoria dei grafi

Risposta: lato BC

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 Prim

1. BD (9)
2. BC (7)
3. CE (1)
4. EF (5)
5. AB (15)

lato numero 2

BC

Risposta

lato BC

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