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 2parte, Esercizi di Progettazione e analisi di algoritmi

Esercizi di algoritmica parte 2, la seconda parte della complessità computazionale.

Tipologia: Esercizi

2018/2019

Caricato il 02/12/2019

TonyLodos
TonyLodos 🇮🇹

5

(4)

11 documenti

1 / 3

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Progettazione di Algoritmi Anno Accademico 2018–2019
Esercizi sulla Tecnica Divide et Impera.
Ugo Vaccaro
1. Esercizio: Dato un vettore di interi A=A[0] . . . A[n1], progettare un algoritmo basato sulla
tecniva Divide et Impera per calcolare la quantit`a
S=A[0]20+A[1]21+A[2]22+···A[n1]2n1.
Si analizzi la complessit`a di tempo dell’algoritmo proposto, giustificando le affermazioni fatte.
2. Esercizio: Sia A=A[1] . . . A[n] un vettore di numeri, non necessariamente ordinato. Si scriva
un algoritmo basato sulla tecnica Divide et Impera che conti il numero di elementi in Ache sono
0. Si analizzi la complessit`a di tempo dell’algoritmo proposto, giustificando le affermazioni
fatte.
3. Esercizio: Sia A=A[1] . . . A[n] un vettore di numeri, non necessariamente distinti e non
necessariamente ordinati. Si scriva un algoritmo basato sulla tecnica Divide et Impera che,
dato Ae due numeri qualsiasi L < U, calcola quanti valori di Aappartengono all’intervallo
[L, U ]. Si analizzi la complessit`a di tempo dell’algoritmo proposto, giustificando le affermazioni
fatte.
4. Esercizio: Sia A=A[1] . . . A[n] un vettore di numeri, distinti tra di loro ed ordinati in senso
crescente. Si scriva un algoritmo basato sulla tecnica Divide et Impera che, dato Ae un numero
arbitrario x, restituisce l’indice del pi`u piccolo elemento in Ache risulti strettamente maggiore
di x. Se non esiste alcun valore di Ache soddisfa tale vincolo, l’algoritmo deve restituire “non
c’`e”. Si analizzi la complessit`a di tempo dell’algoritmo proposto, giustificando le affermazioni
fatte.
5. Esercizio: Sia A=A[1] . . . A[n] un vettore di numeri, distinti tra di loro ed ordinati in senso
crescente. Si scriva un algoritmo basato sulla tecnica Divide et Impera che, dato Ae due numeri
qualsiasi L < U, calcola quanti valori di Aappartengono all’intervallo [L, U ]. Si analizzi la
complessit`a di tempo dell’algoritmo proposto, giustificando le affermazioni fatte.
6. Esercizio: Sia A=A[1] . . . A[n] un vettore di numeri, ordinati in senso non decrescente. Si
scriva un algoritmo basato sulla tecnica Divide et Impera che per decidere se Acontiene oppure
no elementi duplicati. Si analizzi la complessit`a di tempo dell’algoritmo proposto, giustificando
le affermazioni fatte. L’algoritmo proposto potrebbe funzionare anche nel caso in cui Anon `e
ordinato? Giustificare la risposta.
1
pf3

Anteprima parziale del testo

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

Progettazione di Algoritmi Anno Accademico 2018–

Esercizi sulla Tecnica Divide et Impera.

Ugo Vaccaro

  1. Esercizio: Dato un vettore di interi A = A[0]... A[n − 1], progettare un algoritmo basato sulla tecniva Divide et Impera per calcolare la quantit`a

S = A[0]2^0 + A[1]2^1 + A[2]2^2 + · · · A[n − 1]2n−^1. Si analizzi la complessit`a di tempo dell’algoritmo proposto, giustificando le affermazioni fatte.

  1. Esercizio: Sia A = A[1]... A[n] un vettore di numeri, non necessariamente ordinato. Si scriva un algoritmo basato sulla tecnica Divide et Impera che conti il numero di elementi in A che sono ≥ 0. Si analizzi la complessit`a di tempo dell’algoritmo proposto, giustificando le affermazioni fatte.
  1. Esercizio: Sia A = A[1]... A[n] un vettore di numeri, non necessariamente distinti e non necessariamente ordinati. Si scriva un algoritmo basato sulla tecnica Divide et Impera che, dato A e due numeri qualsiasi L < U , calcola quanti valori di A appartengono all’intervallo [L, U ]. Si analizzi la complessit`a di tempo dell’algoritmo proposto, giustificando le affermazioni fatte.

  1. Esercizio: Sia A = A[1]... A[n] un vettore di numeri, distinti tra di loro ed ordinati in senso crescente. Si scriva un algoritmo basato sulla tecnica Divide et Impera che, dato A e un numero arbitrario x, restituisce l’indice del piu piccolo elemento in A che risulti strettamente maggiore di x. Se non esiste alcun valore di A che soddisfa tale vincolo, l’algoritmo deve restituire “non c’e”. Si analizzi la complessit`a di tempo dell’algoritmo proposto, giustificando le affermazioni fatte.

  1. Esercizio: Sia A = A[1]... A[n] un vettore di numeri, distinti tra di loro ed ordinati in senso crescente. Si scriva un algoritmo basato sulla tecnica Divide et Impera che, dato A e due numeri qualsiasi L < U , calcola quanti valori di A appartengono all’intervallo [L, U ]. Si analizzi la complessit`a di tempo dell’algoritmo proposto, giustificando le affermazioni fatte.

  1. Esercizio: Sia A = A[1]... A[n] un vettore di numeri, ordinati in senso non decrescente. Si scriva un algoritmo basato sulla tecnica Divide et Impera che per decidere se A contiene oppure no elementi duplicati. Si analizzi la complessita di tempo dell’algoritmo proposto, giustificando le affermazioni fatte. L’algoritmo proposto potrebbe funzionare anche nel caso in cui A none ordinato? Giustificare la risposta.
  1. Esercizio: Sia A = A[1]... A[n] un vettore di numeri, non necessariamente ordinato. Si scriva un algoritmo basato sulla tecnica Divide et Impera che conti il numero di indici i per cui valga A[i] × A[i + 1] > 0. Si analizzi la complessit`a di tempo dell’algoritmo proposto, giustificando le affermazioni fatte.
  1. Esercizio: Sia A = A[1]... A[n] un vettore ordinato in senso crescente che e stato shiftato k posizioni a sinistra. Ad esempio, il vettore [15, 18 , 28 , 30 , 35 , 42 , 1 , 7]e un vettore ordinato che e stato shiftato k = 2 posizioni a sinistra, mentre il vettore [30, 35 , 42 , 1 , 7 , 15 , 18 , 28]e un vettore ordinato che `e stato shiftato k = 5 posizioni a sinistra.

(a) Supponendo di avere A e k in input, dare un algoritmo che determina il minimo in A in tempo O(1) (b) Supponendo di avere solo il vettore A in input, dare un algoritmo che determina il minimo in A in tempo O(log n)

  1. Esercizio: Sia A = A[1]... A[n] un vettore ordinato in senso crescente che e stato shiftato k posizioni a sinistra. Avendo in input il solo vettore A, progettare un algoritmo basato sulla tecnica Divide et Impera che determini il valore k di cui sopra. Si analizzi la complessita di tempo dell’algoritmo proposto, giustificando le affermazioni fatte.

  1. Esercizio: Sia A un vettore di n interi. Si dice che A `e continuo se per ogni i = 1, 2 ,... , n − 1, vale che |A[i + 1] − A[i]| ≤ 1. Si dice zero del vettore un indice k tale che A[k] = 0. Dato un vettore A di n ≥ 2 interi continuo tale che A[1] ≤ 0 e A[n] > 0, provare che A ha almeno uno zero. Progettare un algoritmo basato sulla tecnica Divide et Impera che, dato un vettore A di n ≥ 2 interi continuo e tale che A[1] < 0 e A[n] > 0, trovi uno zero in tempo O(log n).
  1. Esercizio: Sia A = A[1]... A[n] un vettore di n interi, che possono essere sia positivi che negativi. Si supponga che A[1] ≤... ≤ A[n]. Progettare un algoritmo basato sulla tecnica Divide et Impera che conti il numero di elementi > 0 nel vettore A. Si analizzi la complessit`a di tempo dell’algoritmo proposto, giustificando le affermazioni fatte.

  1. Esercizio: Sia A = A[1]... A[n] un vettore di n interi. Progettare un algoritmo basato sulla tecnica Divide et Impera che conti il numero di elementi A[i] nel vettore A, 1 < i < n, per cui valga sia che A[i] = A[i+1] che A[i] = A[i−1]. Si analizzi la complessit`a di tempo dell’algoritmo proposto, giustificando le affermazioni fatte.