Algoritmi, Strutture Dati e Programmi. UD 5.a: Searching (parte 1)

Documenti analoghi
UD 3.5a: Searching (parte 1) ALGORITMO DI RICERCA SEQUENZIALE. Dispense, cap

Pascal: esempi di programmazione

Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal

Problemi di ricerca in insiemi ordinati

PASCAL: I VETTORI TRATTO DA CAMAGNI-NIKOLASSY, CORSO DI INFORMATICA, VOL. 1, HOEPLI. Informatica

Nell informatica esistono alcuni problemi particolarmente rilevanti, poiché essi:

La ricerca dicotomica

RICERCA BINARIA...1 ALBERO BINARIO DI RICERCA (ABR)...3 RICORSIONE...4 ESEMPI DI RICORSIONE IN VISUAL BASIC...5 ESEMPI DI RICORSIONE IN C / C++...

Laboratorio di Programmazione(corso A) Laurea in Informatica - A.A. 2000/2001 Docente: A. Lanza

Lezione 3 Esercitazione

Cognome e Nome : Corso e Anno di Immatricolazione: Modalità di Laboratorio (Progetto/Prova) :

Corso di Informatica A.A

PASCAL standard. Il linguaggio PASCAL nasce come evoluzione del linguaggio ALGOL60 (ALGOrithmic Language) nel 1968 ad opera di N. Wirth.

INFORMATICA GENERALE Prof. Alberto Postiglione. Università degli Studi di Salerno. UD 3.2b: Programmazione in Pascal (1)

Laboratorio di Programmazione Laurea in Informatica A.A. 2000/2001 Docente: A. Lanza. Il tipo ARRAY Problemi (calcolo della frequenza, trasposta, )

ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09)

ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09)

Algoritmi e loro proprietà. Proprietà formali degli Algoritmi Efficienza rispetto al tempo Efficienza rispetto allo spazio

Almerico Murli - Le variabili strutturate (array) VARIABILI STRUTTURATE (ARRAY)

Università di Roma Tor Vergata L16-1. Ricerca: esaminare una collezione di dati, cercando un particolare valore. nome e cognome

ISTRUZIONI A B K A, B, K A<B? SI A<B? SI A<B? SI

come segue: data una collezione C di elementi e una un elemento che verifica la proprietà P

Un esempio per cominciare. Inizio e fine di un programma. La somma di 3 numeri PASCAL ANSI C. Regole sintattiche

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Algoritmi e loro proprietà. Che cos è un algoritmo? Un esempio di algoritmo

Corso di laurea in Informatica (Triennale) A.A. 2002/ 03 Corso di Programmazione (C) Docente: S. Ferilli II esonero (16 dicembre 02)

Esercitazione 5 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016

Cos è l informatica? Un esempio di algoritmo. Che cos è un algoritmo? Algoritmi e loro proprietà. non ambigue ed effettivamente calcolabili

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

INFORMATICA GENERALE Prof. Alberto Postiglione. Scienze della Comunicazione Università di Salerno. Il Linguaggio di Programmazione Pascal

Variabili strutturate

Algoritmi di Ricerca. Esempi di programmi Java. Prof. Angela Bonifati

Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto

Algoritmi di Ricerca. Esempi di programmi Java

Laboratorio di Programmazione Laurea in Informatica A.A. 2000/2001 Docente: A. Lanza

Algoritmi e Strutture Dati. Capitolo 4 Ordinamento: Selection e Insertion Sort

Algoritmi e Strutture Dati

Ricerca. Per ricerca si intende il procedimento di localizzazione di una particolare informazione in un elenco di dati.

Algoritmi, Strutture Dati e Programmi. UD 3.d: Strutture Dati Dinamiche Alberi

PASCAL - Record. Il linguaggio PASCAL consente l utilizzo dei RECORD

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Algoritmi di Ricerca. Esempi di programmi Java

Specifica, progetto e verifica della correttezza di algoritmi iterativi

Ricerca in una sequenza ordinata

Algoritmi greedy. Gli algoritmi che risolvono problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione

Algoritmi di Ricerca Ordinamento

A. Ferrari Algoritmi notevoli

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

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Algoritmi

ALGORITMI DI ORDINAMENTO E RICERCA BINARIA. Docente: Giorgio Giacinto AA 2008/2009. problema dell ordinamento in modi diversi

STRUTTURA E LOGICA DI FUNZIONAMENTO DEL COMPUTER

ALESSANDRO E ALESSIO SONO GLI AUTORI DEL SEGUENTE PROGRAMMA CHE TROVA LA PALLINA DIVERSA IN QUATTRO PASSAGGI.

Algoritmi greedy. Gli algoritmi che risolvono problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione

10 STRUTTURE DI CONTROLLO REPEAT E WHILE. Strutture di controllo e variabili strutturate

Scheme: esempi di programmazione

Scheme: esempi di programmazione

PREPARAZIONE PER SECONDA PROVA IN ITINERE Esercizio 1 SULLA MODELLAZIONE DEI DATI

LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica. Algoritmi ricorsivi

Il Concetto Intuitivo di Calcolatore. Esercizio. I Problemi e la loro Soluzione. (esempio)

Fondamenti di Informatica. Ipotesi fondamentale. Irrisolubilità. Prof. V.L. Plantamura Informatica e Comunicazione Digitale a.a.

Ordinamenti ricorsivi

Prova di Algoritmi e s.d. (1o anno) 17 Settembre TESTO e RISPOSTE

Laboratorio di Programmazione Laurea in Informatica A.A. 2000/2001 Docente: A. Lanza

Programmazione Procedurale in Linguaggio C++

Indice. 1 Introduzione 2. 2 Algoritmo di compressione LZ78 3

Fondamenti di Programmazione

Architetture data-flow

Algoritmi, Strutture Dati e Programmi. UD 1.d: Dati e Tipi di Dato

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

Esercizi di complessità (presi da scritti di esame)

Corso di Fondamenti di Informatica Algoritmi su array / 1

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa 17. A. Miola Gennaio 2012

IL TEOREMA DI BOEHM-JACOPINI

Il Concetto Intuitivo di Calcolatore. Esercizio. I Problemi e la loro Soluzione. (esempio)

Appunti di informatica. Lezione 10 anno accademico Mario Verdicchio

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

Algoritmi di ricerca. Per ricerca si intende qui il procedimento di localizzare una particolare informazione in un elenco di dati.

FONDAMENTI DI INFORMATICA

Elementi di Informatica e Programmazione

Introduzione alla programmazione

UD 3.2b: Programmazione in Pascal (1)

La sezione di dichiarazione delle costanti 1.2 I tipi elementari Classificazione dei tipi Il tipo integer Il tipo boolean

RICERCA IN UN VETTORE

Cognome-Nome:... Matricola...

Pseudo codice. Paolo Bison. Fondamenti di Informatica 1 A.A. 2003/04 Università di Padova. Pseudo codice, Paolo Bison, A.A , p.

Informatica (A-K) 5. Algoritmi e pseudocodifica

Scritto di Algoritmi e s.d. (1o anno) 5 Luglio 2005

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto

Analizzatori sintattici a discesa ricorsiva

Fondamenti di Informatica

Fondamenti di Informatica

A. Ferrari. algoritmi notevoli. Python. Alberto Ferrari Informatica

Ordinamenti per confronto: albero di decisione

Esercitazioni di Elementi di Informatica

In questa lezione. Heap binario heapsort. [CLRS10] cap. 6, par Prof. E. Fachini - Intr. Alg.

Dall algoritmo al programma

Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto

MODULO 4: LA STRUTTURA ARRAY a 1-DIMENSIONE

Transcript:

Algoritmi, Strutture Dati e Programmi : Searching (parte 1) Prof. Alberto Postiglione AA 2007-2008 Ricerca di un'informazione in una tabella Determinare se una parola X è presente in un dizionario (cioè in una lista di parole). La parola X può essere il nome di una persona, il titolo di un libro, il numero di una carta di credito, o altro. Supponiamo che N differenti parole siano immagazzinate in N celle di memoria contigue all interno di un elaboratore. Si deve costruire un algoritmo che prenda in input la parola X e dia in output la posizione J in cui appare X. Pertanto, se X è presente l'uscita sarà un numero compreso tra 1 ed N; se invece X non si trova in memoria il risultato sarà 0. Il problema è equivalente a quello della ricerca di una parola in un dizionario. # 2 1

ALGORITMO DI RICERCA SEQUENZIALE Dispense, cap. 5.1 Collocare le N parole nelle celle di memoria da 1 ad N Esaminare a turno ogni parola, a partire dall ultima, tornando indietro verso la prima. Se X si trova nella cella J l algoritmo fornisce in uscita J per poi fermarsi Se vengono esaurite tutte le N possibilità senza alcun esito, si ferma con 0 in uscita. # 4 2

# 5 Alla fine la variabile J conterrà la posizione di Parola nell array Dizionario oppure 0 in caso di assenza. La variabile K non fa parte della computazione, ma serve per poter determinare se il corpo del ciclo va eseguito o se bisogna uscire da esso in caso di presenza di Parola nel vettore Dizionario. Infatti si esce dal ciclo se J=0 (non c è Parola in Dizionario) oppure se K=0 L algoritmo funziona sempre, anche per n=0. # 6 3

Vediamo, adesso, il programma Pascal corrispondente (legge il valore n da input - in questo esempio, per semplicità, n 30 - e poi legge n linee dal file di testo DIZ.TXT, ognuna contenente una parola ) # 7 program ricerca_sequenziale; var Dizionario: array [1..30] of string; Parola : string; N, i,j,k : integer; DIZ : Text; Begin Readln (N); assign (Diz, 'c:\esami\diz.txt'); reset (Diz); for i:=1 to 30 do readln (Diz, Dizionario[i]); close (Diz); read (Parola); J := N; K := 1; while (K<>0) AND (J<>0) do begin if Parola = Dizionario[J] end; writeln (J) end. then K := 0 else J:=J-1; # 8 4

Tale algoritmo risolve sicuramente il problema ma la soluzione non sembra molto efficiente. Infatti, quando il numero di parole diventa grande (ad es. 1.000.000) la ricerca sequenziale richiede, nel caso peggiore, un numero di passi computazionali molto elevato (1.000.000 per il nostro esempio). Tale algoritmo equivale alla ricerca di un numero telefonico fatta consultando l elenco degli abbonati pagina per pagina a partire dalla prima pagina, colonna per colonna, una riga alla volta. # 9 ALGORITMO DI RICERCA BINARIA Dispense, cap. 5.2 5

Su un archivio ordinato è possibile utilizzare una tecnica di ricerca ottimale, la Ricerca Binaria, L ordinamento comporta un vantaggio sostanziale perché in ogni punto dell'elenco è sufficiente un semplice sguardo per eliminare una grande quantità di elementi La Ricerca Binaria permette di cercare un elemento in un archivio con un numero di operazioni pari al logaritmo in base 2 del numero degli elementi presenti nell archivio. # 11 ALGORITMO DI RICERCA BINARIA Si controlla l elemento centrale del dizionario. Se esso è proprio la parola cercata, ci si ferma. In caso contrario, se il dato da cercare segue l elemento centrale si ripete la ricerca nella parte di archivio a destra di quello centrale, scartando tutti i dati contenuti nella semi tabella di sinistra (che precedono sicuramente quello cercato). se il dato da cercare precede l elemento centrale si ripete la ricerca nella parte di archivio a sinistra di quello centrale, scartando tutti i dati contenuti nella semi tabella di destra (che precedono sicuramente quello cercato). Ad ogni passo si dimezza la dimensione dell archivio. # 12 6

Situazione iniziale schedario # 13 Ogni volta elimino la metà delle schede, oppure mi fermo perché ho trovato la scheda cercata Ogni volta divido il numero N delle schede per 2, mi fermo quando N è diventato 1 o 0 Al più eseguo x passi dove x è il logaritmo in base 2 di N Scheda cercata! # 14 7

Innanzitutto dobbiamo stabilire cosa fare quando la tabella contiene un numero pari di elementi. Infatti in questo caso non c è un (unico) elemento centrale. L elemento centrale verrà calcolato come: (sin+des)/2 Le parentesi significano arrotonda per difetto all intero più vicino. Ad es. se sin=1 e des=10, allora (sin+des)/2 = 11/2 = 5,5 = 5 E poi dobbiamo stabilire qual è la condizione di terminazione in caso di insuccesso. L elemento non è nella tabella quando l intervallo diventa vuoto, cioè il limite destro cade più a sinistra del limite sinistro # 15 (parte 1) # 16 8

(parte 2) # 17 program ricerca_binaria; var Dizionario : array [1..30] of string; Parola : string; N,i,J,K : integer; sin, des : integer; DIZ : Text; # 18 begin readln (N); assign (Diz, 'c:\esami\diz.txt'); reset (Diz); for i:=1 to N do readln (Diz,Dizionario[i]); close (Diz); read (Parola); sin := 1; des := n; J := (sin+des) div 2; K := 1; while (K<>0) AND (des>= sin) do begin if Parola = Dizionario[J] then K := 0 else begin if Parola < Dizionario[J] then des := j-1 else sin := J+1; J := (sin+des) div 2; end; end; if k <> 0 then writeln ('Nome assente') else writeln ('Nome in posiz.',j); end. 9