Algoritmi e Strutture Dati



Похожие документы
Due algoritmi di ordinamento. basati sulla tecnica Divide et Impera: Mergesort e Quicksort

Algoritmi e Strutture Dati. Capitolo 4 Ordinamento

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

4.1 Modelli di calcolo analisi asintotica e ricorrenze

Algoritmi e strutture dati

Complessità Computazionale

Esercizi per il corso di Algoritmi e Strutture Dati

Corso di Tecniche di Programmazione

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Esercizi Capitolo 6 - Alberi binari di ricerca

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

Algoritmi e strutture dati. Codici di Huffman

GUIDA TECNICA ALLA RENDICONTAZIONE SU SIRIO

Algoritmi di Ricerca. Esempi di programmi Java

Informatica 3. LEZIONE 21: Ricerca su liste e tecniche di hashing. Modulo 1: Algoritmi sequenziali e basati su liste Modulo 2: Hashing

Università degli Studi di Ferrara - A.A. 2014/15 Dott. Valerio Muzzioli ORDINAMENTO DEI DATI

Alberi binari di ricerca

Prof. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base:

COGNOME E NOME (IN STAMPATELLO) MATRICOLA

Algoritmi di ordinamento

Sequenziamento a minimo costo di commutazione in macchine o celle con costo lineare e posizione home (In generale il metodo di ottimizzazione

10 - Programmare con gli Array

17 Gli scenari. cartelle di lavoro; unendoli poi in un

Programmazione dinamica

Gestione della Memoria

Ottimizzazione Multi Obiettivo

Esercizi Capitolo 2 - Analisi di Algoritmi

Laboratorio di Algoritmi e Strutture Dati II Semestre 2005/2006. Ordinamenti: mergesort e quicksort

UTILIZZO DEL MODULO DATA ENTRY PER L IMPORTAZIONE DEI DOCUMENTI (CICLO PASSIVO)

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

Funzioni in C. Violetta Lonati

Appunti di Sistemi Elettronici

Esercizi Capitolo 14 - Algoritmi Greedy

Inizializzazione, Assegnamento e Distruzione di Classi

Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012

Esempi di algoritmi. Lezione III

Algoritmi e diagrammi di flusso

Algoritmi e Strutture Dati

I PROBLEMI ALGEBRICI

Semplici Algoritmi di Ordinamento

lo PERSONALIZZARE LA FINESTRA DI WORD 2000

DI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1

Testi di Esercizi e Quesiti 1

Plate Locator Riconoscimento Automatico di Targhe

B+Trees. Introduzione

Alberi binari di ricerca

GESTIONE INFORMATICA DEI DATI AZIENDALI

Per studio di funzione intendiamo un insieme di procedure che hanno lo scopo di analizzare le proprietà di una funzione f ( x) R R

Gestione del processore e dei processi

PROGRAMMA GESTIONE TURNI MANUALE UTENTE. Programma Gestione Turni Manuale Utente versione 1.1

Algoritmi e Strutture Dati

Introduzione al MATLAB c Parte 2

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

CHIUSURE di MAGAZZINO di FINE ANNO

Lab 04 Istruzioni, cicli e array"

MODELLISTICA DI IMPIANTI E SISTEMI 2

Il presente supporto consente la gestione delle gare Giovanili. Premere il pulsante Immissione Dati Gara

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

Ricerche, ordinamenti e fusioni. 5.1 Introduzione. 5.2 Ricerca completa

3 CENNI DI TEORIA DELLA COMPLESSITA COMPUTAZIONALE. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

Corso di Calcolo Numerico

risulta (x) = 1 se x < 0.

COME SVILUPPARE UN EFFICACE PIANO DI INTERNET MARKETING

ALGORITMI e PROGRAMMI Programmazione: Lavoro che si fa per costruire sequenze di istruzioni (operazioni) adatte a svolgere un dato calcolo

Ricerca binaria. Operazione dominante: confronto

Informatica 3. LEZIONE 23: Indicizzazione. Modulo 1: Indicizzazione lineare, ISAM e ad albero Modulo 2: 2-3 trees, B-trees e B + -trees

Indirizzamento Aperto

Laboratorio di architettura degli elaboratori Progetto finale AA 2005/2006

CALCOLO COMBINATORIO

8.9 CREARE UNA TABELLA PIVOT

Cenni su algoritmi, diagrammi di flusso, strutture di controllo

Algoritmi di clustering

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

~ Copyright Ripetizionando - All rights reserved ~ STUDIO DI FUNZIONE

L amministratore di dominio

E possibile modificare la lingua dei testi dell interfaccia utente, se in inglese o in italiano, dal menu [Tools

Mac Application Manager 1.3 (SOLO PER TIGER)

GESTIONE MANUALE DEI CREDITI E DEI RESIDUI

Gestione della memoria centrale

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.

Strumenti e metodi per la redazione della carta del pericolo da fenomeni torrentizi

Analisi e diagramma di Pareto

Транскрипт:

Algoritmi e Strutture Dati Soluzione esercizi di approfondimento Stefano Leucci stefano.leucci@univaq.it

Una terza variante dell IS InsertionSort3 (A) 1. for k=1 to n-1 do 2. x = A[k+1] 3. j = ricerca_binaria(a[1,k],x) // j è la posizione in cui andrà inserito x 4. for i=j to k do 5. A[i+1] = A[i] 6. A[j]=x r k log k in quanto ci si ferma non appena si trova un elemento pari ad x oppure x non viene trovato s k k spostamenti il tutto eseguito n-1 volte n-1 T(n) = (r k + s k ) (log k +k ) = O(n 2 ) k=1 n-1 k=1 2

Una terza variante dell IS (2) Caso peggiore: x andrà inserito in prima posizione, e quindi in tal caso r k = log k e s k = k, e quindi T worst (n) = ( r k + s k )= (log k +k ) = Θ(n 2 ) Caso migliore: si ha quando minimizzo r k + s k e quindi, intuitivamente, x andrà inserito vicino alla posizione k-esima. Quindi, la ricerca binaria deve spostarsi sempre verso destra. Ma se la ricerca binaria termina dopo t iterazioni, allora r k + s k = t+k/2 t, e questa funzione è monotona descrescente, e quindi raggiunge il suo minimo per t=log k (cioè proprio quando x è maggiore di tutti gli elementi della sequenza). In tal caso: T best (n) = (r k + s k )= log k log n! log n n = n log n, cioè T best (n) = O(n log n), ma come vedremo con l approssimazione di Stirling, log n! = Ω(n log n), cioè T best (n) = Ω(n log n), e quindi T best (n) = Θ(n log n) 3

Una terza variante dell IS (3) Caso medio: la posizione attesa di x sarà quella mediana della sequenza, e quindi r k = O(log k) e s k = k/2, da cui T avg (n) = ( r k + s k )= (log k +k/2 ) = Θ(n 2 ) Quindi, ricapitolando, InsertionSort3 è meglio di InsertionSort1 ma peggio di InsertionSort2. Caso migliore Caso medio Caso peggiore T(n) S(n) Insertion Sort 1 Θ(n 2 ) Θ(n 2 ) Θ(n 2 ) Θ(n 2 ) Θ(n) Insertion Sort 2 Θ(n) Θ(n 2 ) Θ(n 2 ) O(n 2 ) Θ(n) Insertion Sort 3 Θ(n log n) Θ(n 2 ) Θ(n 2 ) O(n 2 ) Θ(n) 4

SelectionSort Approccio incrementale: assumendo che i primi k-1 elementi siano ordinati e siano i k-1 elementi più piccoli della sequenza, estende l ordinamento ai primi k elementi scegliendo il minimo degli elementi non ancora ordinati in posizione k, k+1,, n, e mettendolo in posizione k 7 2 4 5 3 1 1 2 3 4 5 7 1 2 4 5 3 7 1 2 3 4 5 7 1 2 4 5 3 7 1 2 3 4 5 7 1 2 3 5 4 7 6

SelectionSort (A) 1. for k=1 to n-1 do 2. m = k 3. for j=k+1 to n do 4. if (A[j] < A[m]) then m=j 5. scambia A[m] con A[k] NOTA: Assumiamo che il primo elemento dell array sia in A[1] Linea 1: k mantiene l indice dove andrà spostato il minimo degli elementi in posizione k, k+1,, n. Linea 2: m mantiene l indice dell array in cui si trova il minimo corrente Linee 3-4: ricerca del minimo fra gli elementi A[k],,A[n] (m viene aggiornato con l indice dell array in cui si trova il minimo corrente) Linea 5: il minimo è spostato in posizione k (si noti che questa operazione richiede 3 operazioni elementari di assegnamento) 7

Albero di decisione del SS Input <a 1,a 2,a 3 > < 2:1 < impossibile 1:2 < 3:2 < 3:1 < 1:2 < 3:1 < 3:2 3,2,1 2,3,1, 2,1,3 3,1,2 3,2,1 1,3, 2 1,2,3 Osservazione 1: l albero non è strettamente binario: compare un confronto inutile! Osservazione 2: tutte le foglie sono alla stessa altezza (e infatti il SS esegue sempre lo stesso numero di confronti!) Osservazione 3: la permutazione <3,2,1> è raggiungibile solo nel caso in cui a 1 =a 2 8

Merge alternativo di 2 heap d-ari Fornire un implementazione alternativa dell operazione di merge(heap d-ario c1, heap d-ario c2) in cui gli elementi di uno dei due heap vengono aggiunti sequenzialmente all altro heap. Analizzarne quindi la convenienza asintotica rispetto all implementazione classica di costo (n). Soluzione: Sia k=min{ c 1, c 2 }. Inseriamo ad uno ad uno tutti gli elementi della coda più piccola nella coda più grande; questo costa O(k log n), dove n= c 1 + c 2. L approccio conviene quindi per k log n=o(n), cioè per k=o(n/log n). 10

Code con Priorità: Riepilogo delle operazioni elementari FindMin Insert Delete DeleteMin Array non ord. Array ordinato Lista non ordinata Lista ordinata Θ(n) O(1) O(1) Θ(n) O(1) O(n) O(n) O(1) Θ(n) O(1) O(1) Θ(n) O(1) O(n) O(1) O(1) 11

Esercizio di approfondimento #2 Valutare i costi delle operazioni aggiuntive (IncreaseKey, DecreaseKey e Merge) sulle implementazioni elementari (vettori e liste). 12

Soluzione esercizio di approfondimento #2 Array non ord. Array Ordinato Lista non Ordinata Lista Ordinata Increase Key Decrease Key Merge O(1) O(1) Θ(k) k=min{ c 1, c 2 } O(n) O(n) Θ(n) n= c 1 + c 2 O(1) O(1) O(1) O(n) O(n) O(n) 13

Alcuni esercizi Dato un vettore ordinato di n elementi binari, trovare: l'ultimo 0 in tempo o(n) l'ultimo 0 in tempo O(log k) dove k è il numero complessivo di 0 nel vettore. 1 2 3 4 5 6 7 n=7 0 0 0 1 1 1 1 k

Alcuni esercizi Dato un vettore A ordinato di n interi positivi ed un intero x, trovare (se esistono) due indici i,j con i<j tali che: A[i]+A[j]=x. Tempo: o(n 2 ). Sugg: si può fare in O(n log n) e O(n) i 1 2 3 4 5 6 7 n=7 2 3 5 7 8 11 13 x=13 j

Alcuni esercizi Si consideri una tavoletta di cioccolata rettangolare composta da n file di m quadratini di cioccolata. Si vuole effettuare una serie di spezzate in modo da avere tutti i quadratini di cioccolata separati. Ogni spezzata consiste nel prendere un pezzo di cioccolata (di qualsiasi forma) e separarlo in due pezzi di cioccolata (di qualsiasi forma). Una strategia è quella di separare prima le n file e poi, per ogni fila, separare i quadratini ad uno ad uno. Questa strategia esegue (n-1)+n(m-1) = nm-1 spezzate. m Esiste una strategia migliore? (Perché?) n

Dato un vettore A[1:n] di interi (non necessariamente ordinato), individuare l'indice 1 i n di un "picco", cioè di un elemento A[i] tale che A[i] [Ai+1] ed A[i] A[i-1]. (si pensi A[0]=A[n+1]=- ). Tempo: o(n) Alcuni esercizi 1 2 3 4 5 6 7 4 7 12 8 9 13 2 n=7

Dato un vettore (potenzialmente non ordinato) con elementi interi distinti, si definisce inversione una coppia di elementi A[i], A[j] con i<j tale che A[i]>[j]. Progettare un algoritmo efficiente che calcola il numero di inversioni. Tempo: o(n^2) Alcuni esercizi 1 2 3 4 5 6 7 4 7 12 8 9 13 2 n=7 Numero inversioni = 8