Esercizi per il corso di Algoritmi e Strutture Dati



Documenti analoghi
Esercizi per il corso di Algoritmi, anno accademico 2011/12

Esercizi Capitolo 6 - Alberi binari di ricerca

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Due algoritmi di ordinamento. basati sulla tecnica Divide et Impera: Mergesort e Quicksort

4.1 Modelli di calcolo analisi asintotica e ricorrenze

RAPPRESENTAZIONE GRAFICA DEGLI ALGORITMI

Dimensione di uno Spazio vettoriale

Programmazione dinamica

Interpolazione ed approssimazione di funzioni

LE FUNZIONI A DUE VARIABILI

Complessità Computazionale

Alberi binari di ricerca

Esercizi per il corso di Algoritmi, anno accademico 2014/15

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI

Algoritmi e Strutture Dati

LEZIONE 7. Esercizio 7.1. Quale delle seguenti funzioni è decrescente in ( 3, 0) e ha derivata prima in 3 che vale 0? x x2. 2, x3 +2x +3.

MATEMATICA DEL DISCRETO elementi di teoria dei grafi. anno acc. 2009/2010

LABORATORIO DI PROGRAMMAZIONE EDIZIONE 1, TURNO B

COGNOME E NOME (IN STAMPATELLO) MATRICOLA

Algoritmi di Ricerca. Esempi di programmi Java

Matematica generale CTF

LEZIONE 23. Esempio Si consideri la matrice (si veda l Esempio ) A =

( x) ( x) 0. Equazioni irrazionali

Lezione 9: Cambio di base

Corso di Informatica

Introduzione alla tecnica di Programmazione Dinamica

Algoritmi e strutture dati. Codici di Huffman

Funzioni in C. Violetta Lonati

Ricerca Operativa Esercizi sul metodo del simplesso. Luigi De Giovanni, Laura Brentegani

Metodi e Modelli per l Ottimizzazione Combinatoria Il problema del flusso di costo minimo

Corso di Matematica per la Chimica

Sistemi di Numerazione

Corso di Algoritmi e Strutture Dati Informatica per il Management Prova Scritta, 25/6/2015

Parte 2. Determinante e matrice inversa

x 1 + x 2 3x 4 = 0 x1 + x 2 + x 3 = 0 x 1 + x 2 3x 4 = 0.

Esercizi su lineare indipendenza e generatori

Lezione 8. La macchina universale

Esercizi Capitolo 2 - Analisi di Algoritmi

Plate Locator Riconoscimento Automatico di Targhe

Proof. Dimostrazione per assurdo. Consideriamo l insieme complementare di P nell insieme

Fasi di creazione di un programma

IGiochidiArchimede-SoluzioniBiennio 22 novembre 2006

Architettura (10/9/2003) Pag. 1/6. Cognome e Nome (in stampatello):

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati

Iniziamo con un esercizio sul massimo comun divisore: Esercizio 1. Sia d = G.C.D.(a, b), allora:

Aprire WEKA Explorer Caricare il file circletrain.arff Selezionare random split al 66% come modalità di test Selezionare J48 come classificatore e

I sistemi di numerazione

LEZIONE 31. B i : R n R. R m,n, x = (x 1,..., x n ). Allora sappiamo che è definita. j=1. a i,j x j.

CONTINUITÀ E DERIVABILITÀ Esercizi proposti. 1. Determinare lim M(sinx) (M(t) denota la mantissa di t)

Basi di matematica per il corso di micro

Esempio: dest = parolagigante, lettere = PROVA dest (dopo l'invocazione di tipo pari ) = pprrlogvgante

Prova di Laboratorio di Programmazione

Sono casi particolari di MCF : SPT (cammini minimi) non vi sono vincoli di capacità superiore (solo x ij > 0) (i, j) A : c ij, costo di percorrenza

Studente: SANTORO MC. Matricola : 528

Esercizi sull Association Analysis

CONTINUITÀ E DERIVABILITÀ Esercizi risolti

Il concetto di valore medio in generale

b i 1,1,1 1,1,1 0,1,2 0,3,4

Testi di Esercizi e Quesiti 1

Metodi e Modelli Matematici di Probabilità per la Gestione

SISTEMI DI NUMERAZIONE E CODICI

CAPITOLO 8 LA VERIFICA D IPOTESI. I FONDAMENTI

4. Operazioni elementari per righe e colonne

Metodologie di programmazione in Fortran 90

4 3 4 = 4 x x x 10 0 aaa

Raccolta degli Scritti d Esame di ANALISI MATEMATICA U.D. 1 assegnati nei Corsi di Laurea di Fisica, Fisica Applicata, Matematica

FUNZIONI ELEMENTARI - ESERCIZI SVOLTI

Capitolo 2. Operazione di limite

1 Giochi a due, con informazione perfetta e somma zero

Alberi binari. Ilaria Castelli A.A. 2009/2010. Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione

Introduzione al MATLAB c Parte 2

Complemento al corso di Fondamenti di Informatica I corsi di laurea in ingegneria, settore dell informazione Università la Sapienza Consorzio Nettuno

UNIVERSITÀ DEGLI STUDI DI TERAMO

Luigi Piroddi

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Corso di Tecniche di Programmazione

Transitori del primo ordine

Algoritmi e strutture dati

Informatica. Rappresentazione dei numeri Numerazione binaria

ESEMPIO 1: eseguire il complemento a 10 di 765

Intelligenza Artificiale

Indici di dispersione

I PROBLEMI ALGEBRICI

STRUTTURE ALGEBRICHE

Interesse, sconto, ratei e risconti

1. PRIME PROPRIETÀ 2

Insiemi di livello e limiti in più variabili

I tre concetti si possono descrivere in modo unitario dicendo che f e iniettiva, suriettiva, biiettiva se e solo se per ogni b B l equazione

Fondamenti e didattica di Matematica Finanziaria

Aritmetica: operazioni ed espressioni

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B

STUDIO DEL SEGNO DI UNA FUNZIONE

Algoritmi di clustering

Codifiche a lunghezza variabile

Politecnico di Milano Facoltà di Ingegneria dell Informazione AGENTI AUTONOMI E SISTEMI MULTIAGENTE Appello COGNOME E NOME

Transcript:

1 Esercizi per il corso di Algoritmi e Strutture Dati Esercizi sulla Tecnica Divide et Impera N.B. Tutti gli algoritmi vanno scritti in pseudocodice (non in Java, né in C++, etc. ). Di tutti gli algoritmi vá presentata una discussione, anche informale, del loro funzionamento e del perché calcolano l output richiesto. Inoltre, di tutti gli algoritmi vá analizzata la complessitá di tempo, giustificando le affermazioni fatte. Infine, gli algoritmi vanno necessariamente scritti usando la tecnica richiesta. 1. Esercizio: Dato un vettore di interi A[1...n] ed un intero x, diremo frequenza di x in A, e la denoteremo con f A (x), la quantitá f A (x) = (numero di volte che x appare nel vettore A). Si scriva un algoritmo basato sulla tecnica Divide et Impera che, avendo in input un generico vettore di interi A[1...n] ed un generico intero x, restituisca f A (x). 2. Esercizio: Dati due alberi binari T ed S, si scriva un algoritmo basato sulla tecnica Divide et Impera che determini se i due alberi sono uguali o meno. L input all algoritmo è costituito dai due puntatori alla radice di T ed S, rispettivamente. [Chiarimento: per alberi uguali si intendono alberi con la stessa struttura, ovvero alberi che se disegnati apparirebbero identici]. 3. Esercizio: Si consideri la seguente variante dell algoritmo di ricerca binaria in un array ordinato A. Ad ogni passo l array viene diviso in tre parti e l elemento la cui posizione deve essere determinata in A viene confrontato con due elementi. Si scriva con precisione il relativo algoritmo, analizzandone la complessità di tempo. 4. Esercizio: Si descriva il comportamento dell algoritmo Quicksort (non randomizzato) quando esso viene eseguito su di un array A[1...n] di n numeri uguali. Si assuma che ad ogni iterazione, l algoritmo Quicksort scelga come pivot l elemento più a sinistra del sottoarray in quel momento in considerazione. 5. Esercizio: Dato un albero binario T, si scriva un algoritmo basato sulla tecnica Divide et Impera che, preso in input un puntatore alla radice di T, restituisca in output l altezza dell albero T, ovvero la lunghezza del più lungo percorso radice-foglia in T.

2 6. Esercizio: Dato un albero binario T, la lunghezza interna di T è definita come la somma, su tutti i nodi x dell albero, della distanza di x dalla radice (misurata nel numero di archi del percorso dalla radice al nodo x). Si scriva un algoritmo basato sulla tecnica Divide et Impera che, preso in input un puntatore alla radice di T, restituisca in output la lunghezza interna di T. 7. Esercizio: Sia dato un albero binario T in cui ad ogni nodo x è associato un campo numerico key[x]. Si scriva un algoritmo basato sulla tecnica Divide et Impera che, preso in input un puntatore alla radice di T ed un numero k, restituisca in output il numero di nodi x in T che hanno key[x] = k. 8. Esercizio: Si progetti e si analizzi un algoritmo basato sulla tecniva Divide et Impera che, preso in input un vettore di interi A[1...n], restituisca in output il valore min i,j A[i] A[j]. 9. Esercizio: Si scriva un algoritmo basato sulla tecniva Divide et Impera che, preso in input un vettore binario (non necessariamente ordinato) A[1... n], restituisca in output l intero i tale che A[i 1] A[i] = 0, se esso esiste, il messaggio non c è, se tale intero non esiste. 10. Esercizio: Dato un vettore A[1...n], diremo che la coppia di elementi (A[i],A[i + 1]), per i {1,...,n 1}, è una coppia identica se A[i] = A[i+1]. Si scriva un algoritmo basato sulla tecnica Divide et Impera che, avendo in input un vettore A calcoli il numero di coppie identiche in A. 11. Esercizio: Si consideri il seguente problema: la Ditta ACME è stata quotata in borsa, ed il valore delle sue azioni sono state tabulate per tutto l anno. Sia A il valore di una azione di ACME al primo Gennaio, e sia B il corrispondente valore al 31 Dicembre. (a) Se A > B, argomentare che c è stato un giorno dell anno in cui l azione di ACME è stata quotata ad un valore inferiore al giorno precedente; (b) formalizzando opportunamente il problema in termini algoritmici (cioè definendo con precisione chi sono gli input e gli output al problema), sia dia un algoritmo di complessità logaritmica nella taglia dell input che, sotto l ipotesi che A > B, determini un giorno dell anno in cui l azione di ACME è stata quotata ad un valore inferiore al giorno precedente. 12. Esercizio: Sia A[1...n] un vettore ordinato che é stato shiftato k posizioni a sinistra. Ad esempio, il vettore [15,18,28,30,35,42,1,7] é un vettore ordinato che é stato shiftato k = 2 posizioni a sinistra, mentre il vettore [30,35,42,1,7,15,18,28] é un vettore ordinato che é stato shiftato k = 5 posizioni a sinistra.

3 (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(logn) 13. Esercizio: Sia dato un vettore binario ordinato A[1...n]. (a) Progettare un algoritmo di complessitá Θ(n) nel caso peggiore che conti il numero di occorrenze di 1 nel vettore A; (b) Progettare un algoritmo di complessitá O(log n) che conti il numero di occorrenze di 1 nel vettore A; (c) Provare o confutare l asserzione che ogni algoritmo, basato su confronti, che risolve il problema in questione ha complessitá Ω(log n) 14. Esercizio: Un vettore di interi distinti A[1...n] é detto unimodulare se esiste un indice i per cui A[1] < A[2] <... < A[i 1] < A[i] e A[i] > A[i+1] >... > A[n]. Progettare un algoritmo che determini, in tempo O(log n), il valore massimo di un vettore unimodulare. 15. Esercizio: Sia data una matrice n n di interi in cui gli elementi di ogni riga sono ordinati in senso crescente, e anche gli elementi di ogni colonna sono ordinati in senso crescente. Si progetti un algoritmo per determinare se un dato intero k é presente nella matrice o meno, e se ne analizzi la complessitá. 16. Esercizio: Data una matrice n n di interi, con n potenza di 2, si scriva un algoritmo che determina il minimo nella matrice, usando la tecnica Divide et Impera. Se ne analizzi la complessitá. 17. Esercizio: (a) Usando il metodo di risoluzione Divide-et-Impera, progettare un algoritmo di ricerca del massimo in un vettore che richieda tempo lineare. (b) Dato un insieme S di interi, definiamo il primo e il secondo in S come p = min{s} e s = min{s {p}}. Progettare un algoritmo Divide-et-Impera che trovi p e s in tempo lineare. 18. Esercizio: (a) Scrivere un algoritmo Divide-et-Impera che, dato un vettore di interi contenente solo 0 e 1, determini se il vettore contiene piú 0 che 1. Se ne analizzi la complessitá.

4 (b) Risolvere l esercizio in maniera piu efficiente, sotto l ipotesi che il vettore sia ordinato. 19. Esercizio: Sia A[1...n] un vettore che contiene le valutazioni di un azione nei giorni numerati da 1 a n. Quindi, il numero A[k] rappresenta il valore dell azione nel giorno k. Se si compra l azione al giorno i e la si vende al giorno j > i, il profitto che si otterrebbe sarebbe pari a A[j] A[i]. Ad esempio, se A[123] =< 9,1,5 >, comprando al giorno 2 e vendendo al giorno 3 si otterrebbe un profitto di A[3] A[2] = 4. Si dia un algoritmo basato sulla tecnica di Divide et Impera di complessitá O(nlogn), che avendo in input il vettore A ritorna in output la coppia di giorni (i, j) che ci permette di massimizzare il profitto della compravendita. 20. Esercizio: Si descriva e si analizzi l algoritmo di complessità O(n log 2 3 ) per la moltiplicazione di due numeri di n bits. 21. Esercizio: Dato un vettore di interi A[1...n] ed un intero N, si progetti e si analizzi un algoritmo basato sulla tecnica Divide et Impera che, preso in input il vettore A ed il numero N determini se esistono o meno due indici i e j per cui A[i] A[j] = N. 22. Esercizio: Si risolva in maniera più efficiente l esercizio precedente sotto l ipotesi che il vettore A sia ordinato.

5 Esercizi sull Ordinamento e Selezione 1. Esercizio: Siesegual algoritmoselect(a,4)sull arraya = [12,3,7,2,14,9,15,5,21,6,1,10,8,4] riportando chiaramente, per ogni passo dell algoritmo, le partizioni dell array. Si assuma che ad ogni iterazione, l algoritmo Select scelga come pivot l elemento più a sinistra del sottoarray in quel momento in considerazione. 2. Esercizio: Si esegua l algoritmo Quicksort sull array [24, 33, 25, 45, 11, 12, 23, 13], riportando chiaramente, per ogni passo dell algoritmo, le partizioni dell array. Si assuma che ad ogni iterazione, l algoritmo Quicksort scelga come pivot l elemento più a sinistra del sottoarray in quel momento in considerazione. 3. Esercizio: Sia A[1...n] un array di interi. Si dia un algoritmo che riordini gli elementi di A in modo tale che tutti gli elementi negativi appaiano alla sinistra di tutti gli elementi positivi. L algoritmo deve avere complessità Θ(n) nel caso peggiore e non deve usare array ausiliari. 4. Esercizio: Si supponga di disporre di un super calcolatore che sia capace di effettuare il merge di due sequenze ordinate, ciascuna lunga n, in tempo n. Si scriva un algoritmo ricorsivo che usa questo super-calcolatore per ordinare un vettore lungo n. Si scriva una relazione di ricorrenza per descrivere il tempo di esecuzione di tale algoritmo, si risolva la equazione di ricorrenza usando i teoremi generali per la risoluzione di equazioni di ricorrenza visti a lezione. 5. Esercizio: Si supponga di disporre di un super calcolatore che sia capace di calcolare il massimo di 3 elementi in un solo passo. Sia dia un algoritmo efficiente per il calcolo dell elemento massimo in un vettore A[1... n], nell ipotesi di utilizzare tale super calcolatore. L analisi della complessitá dell algoritmo dovrebbe essere quanto piú precisa possibile, e non solo di tipo asintotico. 6. Esercizio: Sia A[1,...,n] un vettore contenente n = 3m interi, tutti distinti tra di loro. Si consideri il problema di determinare gli elementi di A maggiori o uguali ad almeno n/4 interi in A e minori o uguali ad almeno n/4 interi in A. Si proponga un algoritmo lineare per risolvere il problema proposto; si discuta la correttezza e la complessità dell algoritmo definito.

6 7. Esercizio: Un vettore A è detto k-disordinato se esistono al più k indici i per cui A[i] > A[i+1]. Quindi, per capirci, un vettore 0-disordinato è un vettore ordinato in senso crescente. Si progetti un algoritmo che, avendo in input A ed un intero k, dove A è un vettore k-disordinato. Si esprima la complesità dell algoritmo in termini del numero di elementi di A e di k. 8. Esercizio: Sia A[1...n] un array tale che i primi n n elementi siano giá ordinati. Si scriva un algoritmo che ordini l intero array A in tempo sostanzialmente inferiore a n log n. 9. Esercizio: Sia A[1...n] un vettore tale che i vale che A[i] {0,1,2} Scrivere un algoritmo che ordina A in tempo O(n) 10. Esercizio: Sia A[1...n] un array di interi distinti, con n = k a. Si dia un algoritmo efficiente per suddividere l array A in k sottoarray A 1,A 2,...,A k, ciascuno composto di a elementi, tale che se i < j allora ogni elemento nell array A i é minore di ogni elemento nell array A j. Gli elementi all interno di ogni sottoarray non devono essere necessariamente essere ordinati. (Sugg.: si possono usare all interno dell algoritmo chiamate all algoritmo Select). 11. Esercizio: Sia dato un vettore di interi A[1...2n]. Sia dia un algoritmo di complessitá O(nlogn) che determini una coppia di elementi x,y, con x y, di A per cui il valore y x é massimo. Si generalizzi l esercizio al caso in cui occorre suddividere gli elementi di A tra due vettori B[1...n] e C[1...n] tale che la differenza n C[i] i=1 sia massima possibile. Si giustifichi la risposta. n B[i] 12. Esercizio: Si consideri la seguente variante di Quicksort. Si prendano due elementi a, b dell array A[1...n] da ordinare, e si partizioni A in tre sottoarray A 1, A 2, e A 3, dove A 1 = {x A : x < a e x < b}, A 3 = {x A : x > a e x > b}, A 3 contiene i restanti elementi. i=1 (a) Si scriva lo pseudocodice per questo algoritmo (b) Quanti confronti usa l algoritmo per partizionare l array A in A 1, A 2, e A 3? (c) Si assuma che l algoritmo di partizione usato ritorni sempre una partizione per cui A 1 = A 2 = A 3 = n/3. Scrivere una relazione di ricorrenza per il numero di confronti T(n) effettuati dall algoritmo di ordinamento tipo Quicksort cosí ottenuto. (d) Si trovi una costante a per cui valga T(n) anlogn (per quest ultimo punto si suggerisce di procedere per induzione).

7 13. Esercizio: Si consideri la seguente variante di Mergesort. Dato un array A[1...n] si divida A in tre sottovettori di eguale grandezza, si ordini ciascun sottovettore, indi si effettui il merge dei primi due sottovettori ordinati in un unico sottovettore, e successivamente si effettui il merge del sottovettore cosí ottenuto con il terzo sottovettore. Si assuma di disporre di una procedura Merge che effettua il merge di due vettori ordinati di lunghezza n 1 e n 2 in tempo n 1 +n 2. Si assuma anche per semplicitá che n sia potenza di tre. (a) Si scriva lo pseudocodice dell algoritmo sopra esposto in maniera informale; (b) Si analizzi la complessitá dell algoritmo. 14. Esercizio Si descriva l algoritmo randomizzato per il calcolo della mediana e se ne analizzi la complessità. 15. Esercizio Si descriva un algoritmo che, prendendo in input un vettore di interi distinti A[1...n] ed un intero k n, produce in output i k elementi più grandi di A[1...n], dal più grande al più piccolo. Il tutto in tempo O(n+klogk) nel caso peggiore (N.B.: l algoritmo da progettare può effettuare chiamate al suo interno ad algoritmo visti a lezione).