• Non ci sono risultati.

Algoritmi e Strutture Dati

N/A
N/A
Protected

Academic year: 2021

Condividi "Algoritmi e Strutture Dati"

Copied!
2
0
0

Testo completo

(1)

Algoritmi e Strutture Dati

16 Giugno 2003

• Tempo disponibile 180 minuti (è ammesso ritirarsi entro 90 minuti)

• Sono ammessi al più 3 scritti consegnati per A.A.

• Non è possibile consultare appunti, libri o persone, né uscire dall’aula

• Le soluzioni degli esercizi devono:

• Spiegare a parole l’algoritmo usato (anche con eventuali disegni)

• commentare l’eventuale procedura Pascal (dettagliando il significato delle variabili)

• giustificare la correttezza e tutti i passaggi matematici

• dimostrare la complessità (con equazioni di ricorrenza se necessario)

• Nella valutazione dello scritto ogni esercizio conta 6 punti (e quindi si raggiunge 18 con 3 esercizi risolti correttamente e 30 con 5 esercizi risolti correttamente)

1. Si valuti l’ordine di grandezza della complessità T(n) della seguente funzione Pascal:

function PIPPO(n: integer): integer;

var i, j: integer;

begin

for j := 2 to n div 4 do i := j;

if n ≤ 10 then PIPPO := 2 else if n > 313 then

PIPPO := 5 * PIPPO(i) + n*i else

PIPPO := 7 * PIPPO(n–2) + 5*i end;

2. Data una lista L di interi, la si vuole riordinare in modo che tutti gli elementi dispari precedano, nello stesso ordine che avevano inizialmente in L, tutti gli elementi pari (p.e., se in ingresso L = 3, 7, 8, 1, 4, allora si ottiene in uscita L = 3, 7, 1, 8, 4). Si scriva una procedura Pascal di complessità ottima utilizzando gli operatori per le liste visti a lezione.

(2)

3. Siano dati un intero k ed un albero binario i cui nodi contengono interi positivi. Si vuole aggiungere un figlio destro, che contenga un intero arbitrario, ad ogni foglia per la quale la somma degli interi contenuti nei nodi del percorso dalla radice alla foglia sia uguale a k. Si scriva una procedura Pascal ricorsiva di complessità ottima assumendo l’albero realizzato con puntatori.

4. Modificando una visita DFS, si scriva una funzione Pascal di complessità ottima per verificare se un grafo orientato è aciclico oppure no. La si esegua (a mano) sul grafo G = (N, A ), dove N = {1, 2, 3, 4}, A = {(1,4), (2,1), (2,4), (3,1), (3,4)}, dopo aver mostrato la memorizzazione di G con vettori di adiacenza.

5. Dati un insieme M di n “mazzette” ed un insieme P di n “politici” appartenenti al

“Partito Popolare dei Lavoratori” (PPL) oppure al “Partito Cristiano Democratico” (PCD), si vogliono assegnare tutte le mazzette a tutti i politici in modo che il PPL riceva complessivamente il doppio del PCD. Si progetti un algoritmo non deterministico di complessità polinomiale.

6. Si progettino un algoritmo euristico di tipo greedy ed uno di ricerca locale per risolvere il problema della BISEZIONE in forma di ottimizzazione: “Dato un grafo non orientato G = (N, A) di n nodi, con n pari, trovare una partizione di N in due sottoinsiemi N0 ed N1 di n/2 nodi ciascuno tale che il numero di archi con un estremo in N0 e l’altro estremo in N1 sia minimo.”

Riferimenti

Documenti correlati

Applicando il metodo di Fourier-Motzkin dire se il seguente sistema lineare ammette un’unica soluzione ovvero ammette infinite soluzioni ovvero non ammette

Date 2 matrici booleane M,N tali che M sia una matrice nxm ed N sia una matrice mxt, definiamo prodotto booleano MxN la matrice booleana ottenuta calcolando il prodotto righe

From Harris and Ross [1955]: Schematic diagram of the railway network of the Western Soviet Union and Eastern European countries, with a maximum flow of value 163,000 tons from

From Harris and Ross [1955]: Schematic diagram of the railway network of the Western Soviet Union and Eastern European countries, with a maximum flow of value 163,000 tons from

• Problemi polinomiali non deterministici = problemi risolvibili in tempo polinomiale da un algoritmo non deterministico, ma per i quali non è ancora stata trovata una.

• Problemi polinomiali non deterministici = problemi risolvibili in tempo polinomiale da un algoritmo non deterministico, ma per i quali non è ancora stata trovata una.

Scrivere la funzione ricorsiva printGreaterKeys(u, a) che, data la radice u di un BST, un valore a di chiave, stampa in ordine tutte le chiavi dell’albero maggiori della chiave

Si scriva una procedura Pascal, basata sulla ricerca binaria, per individuare in tempo O(log n) l’unico intero dell’intervallo 1..n+1 che non compare in V.... Si scriva