Ricerca binaria. Operazione dominante: confronto



Похожие документы
Esercizi Capitolo 6 - Alberi binari di ricerca

Algoritmi di Ricerca. Esempi di programmi Java

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

AA LA RICORSIONE

Esempi di algoritmi. Lezione III

Algebra Booleana ed Espressioni Booleane

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

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

1 introdurre le monete per l importo necessario. 2 selezionare la quantità di zucchero. 3 selezionare la bevanda desiderata

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

Elementi di Informatica

Introduzione ai Metodi Formali

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

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

GESTIONE INFORMATICA DEI DATI AZIENDALI

Programmazione dinamica

CALCOLO COMBINATORIO

Fondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2)

Arduino: Programmazione

Algoritmi e Strutture Dati

Esercizi su. Funzioni

Introduzione al MATLAB c Parte 2

Introduzione alla tecnica di Programmazione Dinamica

Tecniche avanzate di sintesi di algoritmi: Programmazione dinamica Algoritmi greedy

4.1 Modelli di calcolo analisi asintotica e ricorrenze

( x) ( x) 0. Equazioni irrazionali

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU

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

Funzioni funzione dominio codominio legge argomento variabile indipendente variabile dipendente

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

Richiesta pagina PHP (es: index.php)

Cenni su algoritmi, diagrammi di flusso, strutture di controllo

Fasi di creazione di un programma

SISTEMI DI NUMERAZIONE E CODICI

Algoritmi e Strutture Dati

Testi di Esercizi e Quesiti 1

Corso di Tecniche di Programmazione

Appunti sulla Macchina di Turing. Macchina di Turing

Appunti di informatica. Lezione 2 anno accademico Mario Verdicchio

Dimensione di uno Spazio vettoriale

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

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

3. La sintassi di Java

4 3 4 = 4 x x x 10 0 aaa

Algoritmi e strutture dati. Codici di Huffman

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Esercizi Capitolo 2 - Analisi di Algoritmi

B-Tree. Struttura dati usata in applicazioni che necessitano di gestire insiemi di chiavi ordinate Una variante (B+-Tree) è diffusa in:

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

2. Leggi finanziarie di capitalizzazione

La programmazione. Sviluppo del software

Esercizi per il corso di Algoritmi e Strutture Dati

Concetto di Funzione e Procedura METODI in Java

10 - Programmare con gli Array

COGNOME E NOME (IN STAMPATELLO) MATRICOLA

Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Lezione 8. La macchina universale

Testing: basato su analisi dinamica del codice. Metodi Formali: basato su analisi statica del codice.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Tipi di Dato Ricorsivi

Traccia di soluzione dell esercizio del 25/1/2005

Macchine combinatorie

Documentazione esterna al software matematico sviluppato con MatLab

Programmazione I - Laboratorio

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

Informatica. Rappresentazione dei numeri Numerazione binaria

Interpolazione ed approssimazione di funzioni

La selezione binaria

Analisi sensitività. Strumenti per il supporto alle decisioni nel processo di Valutazione d azienda

Il concetto di valore medio in generale

19. Inclusioni tra spazi L p.

Integrazione numerica

Elementi di semantica denotazionale ed operazionale

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

Fondamenti di Informatica Ingegneria Clinica Lezione 19/10/2009. Prof. Raffaele Nicolussi

Prova di Laboratorio di Programmazione

Corso di Informatica

INFORMATICA GENERALE Prof. Alberto Postiglione Dipartimento Scienze della Comunicazione Università degli Studi di Salerno

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

I sistemi di numerazione

PROVA INTRACORSO TRACCIA A Pagina 1 di 6

Termodinamica: legge zero e temperatura

Manuale Terminal Manager 2.0

Corso di Matematica per la Chimica

Alberi binari di ricerca

Esercizio 1: trading on-line

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da

Транскрипт:

procedure ordinaperfusioni(var a: nelements; n: integer); var b: nelements; procedure mergesort(var a,b: nelements; primo,ultimo:integer); var q: integer; procedure merge(var a,b: nelements; primo, ultimo, mezzo: integer); var i,j,k,h: integer; {merge} {merge} {mergesort} if primo<ultimo then q := (primo+ultimo) div 2; mergesort(a, b, primo, q); mergesort(a, b, q+1, ultimo); merge(a, b, primo, ultimo) {mergesort} {main} mergesort(a,b,1,n) Ricerca binaria procedure binarysearch(var a: nelements; n,x: integer; var found: boolean); var lower, upper, middle: integer; lower := 1; upper :=n; while lower<upper do middle := (lower+upper) div 2; if x>a[middle] then lower := middle+1; upper := middle ; found := (a[lower]=x) confronto 1

Ricerca binaria La complessità di questo algoritmo non dipe dalla distribuzione dei dati. Il ciclo più interno è ripetuto fino a quando la distanza dei limiti inferiore e superiore del segmento in cui ricercare x è maggiore di zero. Osserviamo che la distanza si dimezza ad ogni ciclo. Inizialmente è n, quindi n/2, poi n/4, e così via. In generale alla k-esima iterazione la distanza è pari a n/2 k-1. Il ciclo si arresta al passo k successivo a quello in cui n/2 k-1 =1 Da cui k=log 2 n +1. Poiché ad ogni passo si effettua un solo confronto, il numero massimo di confronti sarà: f(n)=log 2 n +1 Ricerca binaria (vers. ricorsiva) function RICBIN(var a: nelements; x,lower,upper: integer): boolean; var middle: integer; if lower> upper then RICBIN :=false; middle := (lower+upper) div 2; if x=a[middle] then RICBIN := true; if x < a[middle] then RICBIN := RICBIN(a, x, lower, middle-1) RICBIN := RICBIN(a, x, middle+1, upper) confronto 2

Ricerca binaria (vers. ricorsiva) Posto per semplicità n=2 k, analizziamo la complessità di questo algoritmo nel caso pessimo (questa volta dipe dai dati) mediante relazioni di ricorrenza. f(n)=1 se n=1 f(n)=f((n-1)/2) + 1 f(n/2)+1 per n>1. Ricordiamo il seguente risultato per relazioni di ricorrenza con lavoro di combinazione indipente da n: c) relazioni con partizione dei dati f(1)=c f(n)= af(n/k) + b per n=k m, m intero e n>1 Se a = 1 allora f(n) è O(log n). Se a > 1 allora f(n) è O(n logk n ). Quindi si giunge immediatamente a una complessità logaritmica. Calcolo dell n-esimo numero di function RFIB(n: integer): integer; if n=0 then RFIB := 0 if n=1 then RFIB := 1 RFIB := RFIB(n-1) + RFIB(n-2) addizione La complessità non dipe dalla distribuzione dei dati in ingresso. Essa è definita mediante la seguente relazione di ricorrenza: f(n) = 0 per n=0,1 f(n)= f(n-1) + f(n-2) + 1 per n > 1 3

Calcolo dell n-esimo numero di Ricordiamo il seguente risultato per relazioni di ricorrenza con lavoro di combinazione indipente da n: a) relazioni lineari di ordine h f(1)=c 1 f(2)=c 2... f(h)=c h f(n)= a 1 f(n-1) + a 2 f(n-2) +... + a h f(n-h) + b per n > h Allora f(n) è O(a n ) con a > 1, ovvero f è esponenziale. Quindi la complessità in tempo del precedente algoritmo è esponenziale! Come mai? Per calcolare l n-esimo numero di F n si invoca indipentemente RFIB sia per calcolare F n-1 che per calcolare F n-2 ; benché all interno di RFIB(n-1) venga di fatto calcolato F n-2, tale calcolo non viene utilizzato dalla RFIB(n-2) ; e ciò avviene ad ogni passo della ricorrenza. Calcolo dell n-esimo numero di function RFIBLIN(n: integer; var s:integer): integer; var temp: integer; if n=1 then s := 0 RFIBLIN:= 1 temp := RFIBLIN(n-1,s); RFIBLIN := temp+s; s := temp addizione 4

Calcolo dell n-esimo numero di La funzione RFIBLIN contiene ora una sola chiamata ricorsiva, che restituisce però i due valori della successione F i-1 (in RFIBLIN) e F i-2 (in s) necessari al calcolo del nuovo valore F i. F i-1 sarà a sua volta memorizzato in s e restituito come parametro per contribuire al calcolo di F i+1. La complessità è definita mediante la seguente relazione di ricorrenza: f(n) = 0 per n=1 f(n)= f(n-1) + 1 per n > 1 Ricordiamo il seguente risultato per relazioni di ricorrenza con lavoro di combinazione indipente da n: Calcolo dell n-esimo numero di b) relazioni lineari di ordine h, con a h = 1 e a j = 0 per 1 j h-1 f(1)=c 1 f(2)=c 2... f(h)=c h f(n)= f(n-h) + b per n > h Allora f(n) è O(n), cioè è lineare. dove h=1 in questo caso. Quindi RFIBLIN ha complessità lineare. 5

Calcolo dell n-esimo numero di Osserviamo che le relazioni di ricorrenza possono essere applicate anche per la valutazione della complessità in spazio. Bisogna tuttavia tenere presente che tempo e spazio differiscono per il seguente aspetto: il tempo, una volta consumato, non può essere riutilizzato; lo spazio di memoria può invece in certi casi essere ricuperato e riutilizzato. Ad esempio, osserviamo che al ritorno della chiamata RFIB(n-1), lo spazio di memoria usato per l esecuzione di RFIB(n-1) può essere ricuperato e riutilizzato per RFIB(n-2). In sostanza tutto procede come se i richiami ricorsivi fossere uno invece di due. La relazione di ricorrenza diventa: f(n) = c per n=0,1 f(n)= f(n-1) + b per n > 1 che ha soluzione di ordine lineare. Riepilogando, RFIB ha complessità in tempo esponenziale, ma complessità in spazio lineare. 6