Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Esercizi Algoritmi 4 parte, Esercizi di Progettazione e analisi di algoritmi

4 parte degli esercizi di algoritmica, anno 2019

Tipologia: Esercizi

2018/2019

Caricato il 02/12/2019

TonyLodos
TonyLodos 🇮🇹

5

(4)

11 documenti

1 / 6

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Progettazione di Algoritmi Anno Accademico 2018–2019
Esercizi
Ugo Vaccaro
Esercizi su Grafi: Parte Prima
N.B. Si ricorda che ogni algoritmo v`a accompagnato da una argomentazione sul perch`e calcola
correttamente l’output e da un’analisi della sua complessit`a di tempo. Inoltre, si possono usare algo-
ritmi visti a lezione (come BFS, DFS, etc.) senza necessariamente riportare il relativo pseudocodice,
purch`e lo si menzioni esplicitamente. In generale, di ogni algoritmo `e preferibile presentare il relativo
pseudocodice. Tuttavia, anche una sola descrizione a parole dell’idea dell’algoritmo (purch`e precisa
e corretta) verr`a accettata all’esame.
1. Esercizio: Progettare ed analizzare un algoritmo che, prendendo in input un grafo non orientato
G= (V, E ), determina se Gcontiene o meno cicli. La complessit`a dell’algoritmo deve essere
O(|V|), indipendentemente da |E|.
2. Esercizio: Dato un grafo non diretto G= (V, E ), e tre vertici u, v, w V, descrivere ed
analizzare un algoritmo che decide se esiste un cammino in Gche parte da ued arriva a v,
passando per w.
3. Esercizio: Dato il grafo Grappresentato in figura
r s a u
v w z x
eseguire su di esso l’algoritmo BFS(G, s), indicando ad ogni passo l’arco considerato dall’algoritmo,
e calcolando sia l’albero BFS risultante che i valori d[c] per ogni nodo cdel grafo.
4. Esercizio: Progettare ed anaizzare un algoritmo per il seguente problema:
Input: Un grafo non diretto G= (V , E).
Output: Si se esiste un arco eEche si pu`o rimuovere da G, in modo tale che G=
(V, E {e}) sia ancora connesso, No”, altrimenti.
1
pf3
pf4
pf5

Anteprima parziale del testo

Scarica Esercizi Algoritmi 4 parte e più Esercizi in PDF di Progettazione e analisi di algoritmi solo su Docsity!

Progettazione di Algoritmi Anno Accademico 2018–

Esercizi

Ugo Vaccaro

Esercizi su Grafi: Parte Prima

N.B. Si ricorda che ogni algoritmo va accompagnato da una argomentazione sul perche calcola correttamente l’output e da un’analisi della sua complessita di tempo. Inoltre, si possono usare algo- ritmi visti a lezione (come BFS, DFS, etc.) senza necessariamente riportare il relativo pseudocodice, purche lo si menzioni esplicitamente. In generale, di ogni algoritmo e preferibile presentare il relativo pseudocodice. Tuttavia, anche una sola descrizione a parole dell’idea dell’algoritmo (purche precisa e corretta) verr`a accettata all’esame.

  1. Esercizio: Progettare ed analizzare un algoritmo che, prendendo in input un grafo non orientato G = (V, E), determina se G contiene o meno cicli. La complessit`a dell’algoritmo deve essere O(|V |), indipendentemente da |E|.
  1. Esercizio: Dato un grafo non diretto G = (V, E), e tre vertici u, v, w ∈ V , descrivere ed analizzare un algoritmo che decide se esiste un cammino in G che parte da u ed arriva a v, passando per w.
  1. Esercizio: Dato il grafo G rappresentato in figura

r s a u

v w z x

eseguire su di esso l’algoritmo BFS(G, s), indicando ad ogni passo l’arco considerato dall’algoritmo, e calcolando sia l’albero BFS risultante che i valori d[c] per ogni nodo c del grafo.

  1. Esercizio: Progettare ed anaizzare un algoritmo per il seguente problema: Input: Un grafo non diretto G = (V, E). Output: “Si” se esiste un arco e ∈ E che si pu`o rimuovere da G, in modo tale che G′^ = (V, E − {e}) sia ancora connesso, “No”, altrimenti.
  1. Esercizio: Dato il grafo G rappresentato in figura

r s a u

v w z x

eseguire su di esso l’algoritmo DFS(G, s), indicando ad ogni passo l’arco considerato dall’algoritmo, e calcolando l’albero DFS risultante.

  1. Esercizio:

Dato il grafo rappresentato in figura, eseguire su di esso l’algoritmo per il calcolo delle compo- nenti fortementi connesse, spiegando passo passo le computazioni fatte.

a (^) b c (^) d

e (^) f g^ h

  1. Esercizio: Dato un grafo G = (V, E) non diretto, il suo diametro D(G) e definito come la distanza tra i due vertici di G massimalmente distanti, se Ge connesso, `e definito come ∞ altrimenti. Formalmente:

D(G) =

∞ se G non `e connesso maxu,v∈V d(u, v) altrimenti

dove d(u, v) e la distanza tra i due vertici u e v. Analogamente, l’eccentricita di un vertice u `e definita come

e(u) =

∞ se G non `e connesso maxv∈V d(u, v) altrimenti

mentre il raggio R(G) di G `e definito come R(G) = minu∈V e(u). Si dia un algoritmo che, dato in input un grafo G = (V, E) non diretto, calcoli D(G) e R(G).

  1. Esercizio: Data la rappresentazione mediante liste di adiacenza di un grafo diretto G = (V, E), scrivere un algoritmo che determini il numero di archi uscenti da ogni vertice ed un separato algoritmo per determinare il numero di archi entranti in ogni vertice.
  1. Esercizio: Dato un grafo non diretto G = (V, E), con V = { 1 ,... , n} ed un sottoinsieme S ⊆ V , S e detto un Vertex Cover per G se per ogni {i, j} ∈ E vale {i, j} ∩ S 6 = ∅. Si descriva un algoritmo per il seguente problema: Input: G = (V, E) rappresentato mediante matrice di adiacenza, sottoinsieme S ⊆ V Output: “SI”, se Se un Vertex Cover “NO”, altrimenti. Si risolva l’esercizio anche sotto l’ipotesi che di G sia rappresentato mediante liste di adiacenze.
  1. Esercizio: Descrivere un algoritmo per il seguente problema:

Input: un grafo diretto G = (V, E) rappresentato mediante liste di adiacenza, due nodi v, w ∈ V. Output: Il numero di nodi raggiungibili da v che si trovano alla stessa distanza sia da v che da w.

  1. Esercizio: Si descriva l’algoritmo per il calcolo dell’ordinamento topologico di un DAG, argo- mentando la correttezza e valutandone la complessit`a di tempo Giustificare con precisione le relative affermazioni effettuate.
  1. Esercizio: Dato il grafo rappresentato in figura

m n o p

q (^) r s

t u^ v^ w

x y^ z

determinarne un ordinamento topologico, applicando passo passo l’algoritmo visto a lezione.

Esercizi su Code a Priorit´a

  1. Esercizio: Sia dato un Max-Heap rappresentato da un array A[1... n]. Si scriva un procedura (in pseudocodice, per favore) che, in tempo O(log n), avendo in input A ed un indice i, 1 ≤ i ≤ n, cancelli l’elemento A[i] dallo heap. L’array in output dovr´a ancora essere un Max-Heap. Si illustri la esecuzione dell’algoritmo sul seguente heap, con i = 2 (L’algoritmo pu´o usare, al suo interno, chiamata a procedure note viste a lezione, purch´e se ne spieghi chiaramente l’utilizzo e la funzione. Come suggerimento, si proceda in modo analogo alla cancellazione dell’elemento nella radice dello Heap, cos`ı come visto a lezione). 1 2 3 4 5 6 7 8 9 10 23 18 19 16 15 10 9 7 6 2
  1. Esercizio: Si dia la rappresentazione mediante albero del Min-Heap:

A = [1, 4 , 5 , 9 , 8 , 7 , 6 , 10 , 11 , 15 , 12 , 13]. Si ridisegni sia l’albero che il vettore corrispondente dopo l’esecuzione delle seguenti operazioni: (a) Heap-Extract-Min(A), seguita da (b) Heap-Insert(A, 0)

  1. Esercizio: Si assuma che n numeri diversi tra di loro siano memorizzati in un Min-Heap. Si dia un algoritmo che in tempo O(1) trovi il terzo elemento pi´u piccolo di A. Sotto l’ipotesi che i sia costante, si dica come l’i-esimo elemento pi´u piccolo di A possa essere trovato in tempo O(1).
  1. Esercizio: Dato un array di n numeri A[1... n], si presenti un algoritmo che, avendo in input l’array A, ritorni True se A rappresenta un Min-Heap, ritorni il pi´u piccolo indice i su cui la propriet´a dello heap ´e violata, altrimenti. Si valuti la complessit´a dell’algoritmo proposto.
  1. Esercizio: Si consideri la struttura dati Max-Heap e le seguenti affermazioni. Si indichino con un Si le affermazioni che sono vere, e con un No quelle false (qui n denota il numero di nodi dell’albero).

(a) La costruzione di un Max-Heap con n nodi richiede Ω(n log n) nel caso peggiore; Risposta: (b) E possibile determinare l’elemento di valore massimo in un´ Max-Heap in tempo Θ(1); Risposta: (c) E possibile determinare l’elemento di valore minimo in un´ Max-Heap in tempo O(log n); Risposta: (d) L’altezza di un Max-Heap ´e Θ(n) nel caso peggiore; Risposta: