Corso di Laurea Triennale in Ingegneria Gestionale Corso di Fondamenti di informatica A. A. 2006- 2007 A.Pinto Algoritmi di ricerca 1.

Slides:



Advertisements
Presentazioni simili
Fondamenti di Informatica
Advertisements

C++ Di Marco Cozzani.
INFORMATICA Altre Istruzioni di I/O
Gli Algoritmi di ordinamento
INFORMATICA Algoritmi fondamentali
Funzioni e procedure Ogni linguaggio di programmazione ad alto livello mette a disposizione del programmatore questi strumenti, ed il C non è da meno!
Uso avanzato di C.
Nel C non esiste un dato primario di tipo stringa; queste sono rappresentate con un array monodimensionale di caratteri (tipo char). Così per definire.
Calcolo del minimo comune multiplo (m.c.m.) Luigi Sante
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità F2 Selezione.
Iterazione A. Ferrari.
Algoritmi notevoli.
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Il Problema dellordinamento.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Il Problema dellordinamento.
RICERCA IN UN VETTORE.
RICERCA IN UN VETTORE. Metodi basati sul confronto di chiavi Si confrontano gli elementi del vettore V con lelemento (chiave K) che si vuole ricercare.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture di controllo Ing.
8. Problemi ricorrenti: ordinamento e ricerca Ing. Simona Colucci
Fondamenti di Informatica CDL in Ingegneria Gestionale (B)- A.A CDL in Ingegneria Gestionale (B)- A.A Programmazione Ricorsiva.
Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A Strutture di controllo Ing. Simona Colucci.
Introduzione al linguaggio C
Lez. 51 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Complessita'
Algoritmi in C++ (1) da completare
ESERCITAZIONE N. 5 ESERCIZIO N. 1 Autore: Biagio Brattoli S I Corso.
INFORMATICA Strutture iterative
Iterazione enumerativa (for)
PROGRAMMI DI RICERCA E ORDINAMENTO
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Algoritmi Politecnico di Milano
Algoritmi Politecnico di Milano C Primi programmi Politecnico di Milano.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Algoritmi di ordinamento
APPUNTI SUL LINGUAGGIO C
07/04/2003Algoritmi Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure.
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
Struct, enum, Puntatori e Array dinamici
Strutture di controllo nel C
Strutture di controllo in C -- Flow Chart --
Esercizi C sui tipi definiti dall’utente
Politecnico di Milano Esercizi Stringhe Ricerca binaria.
Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.
Esercizi C su array e matrici
Le liste dinamiche La ricorsione
Algebra Lineare Esercizi assegnati.
I File.
Le funzioni.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Calcolo del Massimo Comun Divisore
2000 Prentice Hall, Inc. All rights reserved. Capitolo 6 (Deitel) I vettori Sommario Introduzione Vettori Dichiarazione di vettori 6.4.
void binario(int n); …………………
Per valutare la complessità ammortizzata scomponiamo ogni Union: nelle due FindSet e nella Link che la costituiscono e valuteremo la complessità in funzione.
Radice quadrata di un numero
Esercizi su File.
Università degli Studi di BresciaA.A. 2012/2013 Fondamenti di Programmazione Docente: Alessandro SaettiA.A. 2012/2013 Università degli Studi di Brescia.
Università degli Studi di BresciaA.A. 2012/2013 Fondamenti di Programmazione Docente: Alessandro SaettiA.A. 2012/2013 Università degli Studi di Brescia.
Ricerca sequenziale in un array di interi
Definizione di un algoritmo
ALGORITMI Un algoritmo è un insieme di istruzioni: -ordinate -non ambigue -effettivamente computabili.
ALGORITMO Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un formalismo che permette di rappresentare.
Vettori, indirizzi e puntatori Finora abbiamo usato gli indirizzi nel chiamare  la funzione scanf()  le altre funzioni per riferimento Tuttavia la vera.
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 1 Lezione 13 e 14 GESTIONE DEI FILE A) Nozioni sulla gestione dei.
Operatori di incremento e decremento
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
L’ordinamento per Selezione seleziona l’elemento con valore maggiore e lo scambia con il primo elemento del vettore. Tra gli N-1 elementi rimanenti viene.
Complessità Computazionale
Problema dell’Ordinamento. Problema dell’ordinamento Formulazione del problema –Si vuole ordinare una lista di elementi secondo una data proprietà P Esempio:
8. Problemi ricorrenti: ordinamento e ricerca Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Transcript della presentazione:

Corso di Laurea Triennale in Ingegneria Gestionale Corso di Fondamenti di informatica A. A A.Pinto Algoritmi di ricerca 1

Sistemi Informativi DEE - Politecnico di Bari A.PintoAlgoritmi di ricerca2 Gli algoritmi di ricerca Per ricerca si intende, qui il procedimento di localizzazione di una particolare informazione in un elenco di dati. Il problema della ricerca in termini generali : Dato un insieme L = {a,a,...,a } di n elementi distinti e un elemento x (elemento chiave ), determinare se x appartiene all'insieme. Il metodo di ricerca dipende da come le informazioni sono organizzate, esistono due possibili approcci : Ricerca Sequenziale – serve per ricercare i dati in un vettore NON ordinato Ricerca Binaria o Dicotomica – serve nel caso in cui i dati nel vettore siano già ordinati

Sistemi Informativi DEE - Politecnico di Bari A.PintoAlgoritmi di ricerca3 La Ricerca Sequenziale – LAlgoritmo Se non abbiamo alcuna informazione circa l'ordine degli elementi nell'insieme, l'unico metodo per localizzare un particolare elemento è una ricerca lineare cioè si parte dal primo elemento e si procede esaminando uno per uno tutti gli elementi fino a quando non si trova lelemento cercato oppure fino a quando non sono stati letti tutti gli elementi dellinsieme.

Sistemi Informativi DEE - Politecnico di Bari A.PintoAlgoritmi di ricerca4 La Ricerca sequenziale – lAlgoritmo LAlgoritmo può essere formalizzato effettuando le seguenti operazioni: 1)lettura dal primo elemento del vettore V; 2)confronto ripetuto della chiave K con ciascuno degli elementi del vettore; 3)La lettura termina quando è soddisfatto un confronto ossia si trova i-esimo elemento = K ( ricerca con successo ) oppure quando si è raggiunto lultimo elemento del vettore ( ricerca senza successo ). Osservazione : Abbiamo bisogno di un indice che individui lelemento dellinsieme considerato nel confronto

Sistemi Informativi DEE - Politecnico di Bari A.PintoAlgoritmi di ricerca5 La ricerca sequenziale codice 1/2 #include #define MAXDIM 20 // definisco la dimensione massima del vettore main() { // La dichiarazione delle variabili int i,K,N; int V[MAXDIM]; do{ printf("\n Inserire la dimensione del vettore non superiore a %d\n",MAXDIM); // inserimento del valore da tastiera scanf("%d",&N); }while(N>MAXDIM); // inserimento del vettore for (i=0;i<N;i++) { printf("Inserire l'elemento %d : ",i+1); scanf("%d",&V[i]); }

Sistemi Informativi DEE - Politecnico di Bari A.PintoAlgoritmi di ricerca6 La ricerca sequenziale codice 1/2 // Inserimento del valore da cercare ( la chiave K ) printf("Inserire l'elemento da cercare : "); scanf("%d",&K); // la variabile i è stata già usata, è necessario un nuovo assegnamento i=0; // lettura degli elementi del vettore partendo dal primo V[0] while( K != V[i] && i<N ) { // leggere l'elemento successivo dell'array V i = i + 1; } //risultato della ricerca if ( i<N ) printf("Elemento trovato in posizione %d\n", i+1); else printf("Elemento non trovato\n"); } // Fine del main

Sistemi Informativi DEE - Politecnico di Bari A.PintoAlgoritmi di ricerca7 La ricerca dicotomica o binaria Se la sequenza è ordinata si può effettuare una ricerca più efficiente che mi permette di individuare lelemento cercato senza dover scandire tutti gli elementi del vettore. Lalgoritmo di ricerca binaria dopo ogni confronto scarta metà degli elementi del vettore su cui si effettua la ricerca restringendo il campo di ricerca.

Sistemi Informativi DEE - Politecnico di Bari A.PintoAlgoritmi di ricerca8 Esempio numerico : Valore cercato inf supmed sup inf med sup 26

Sistemi Informativi DEE - Politecnico di Bari A.PintoAlgoritmi di ricerca9 La Ricerca Dicotomica – LAlgoritmo LAlgoritmo può essere descritto mediante i seguenti passi : 1)Si individua lelemento che sta a metà del vettore; 2)Si confronta la chiave K con tale elemento. Se lelemento individuato non è uguale a quello cercato si prosegue in due modi possibili : se K > elemento mediano la ricerca continua solo nel semivettore superiore se K < elemento mediano la ricerca continua solo nel semivettore inferiore 3)Il procedimento continua iterativamente in modo da suddividere i semivettori via via individuati.

Sistemi Informativi DEE - Politecnico di Bari A.PintoAlgoritmi di ricerca10 La ricerca termina con successo quando lelemento mediano V[i] considerato ad un certo passo è proprio uguale a K. La ricerca termina con insuccesso quando la parte di vettore considerata è costituita da un solo elemento diverso dalla chiave. Osservazione : Per il calcolo del valore mediano abbiamo bisogno di tre indici che individuino lestremità inferiore, lestremità superiore e la metà del vettore considerato ad ogni passo.

Sistemi Informativi DEE - Politecnico di Bari A.PintoAlgoritmi di ricerca11 K V [med] and inf < sup med = [ (inf+sup)/2 ] K > V [med] inf = med + 1sup = med - 1 si no

Sistemi Informativi DEE - Politecnico di Bari A.PintoAlgoritmi di ricerca12 Ricerca dicotomica codice 1/2 #include #define MAXDIM 20 // definisco la dimensione massima del vettore main() { // La dichiarazione delle variabili int i,inf,sup,med,K,N; int V[MAXDIM]; do{ printf("\n Inserire la dimensione del vettore non superiore a %d\n",MAXDIM); scanf("%d",&N); }while(N>MAXDIM); // inserimento del vettore ordinato for (i=0;i<N;i++) { printf("Inserire l'elemento %d : ",i+1); scanf("%d",&V[i]); }

Sistemi Informativi DEE - Politecnico di Bari A.PintoAlgoritmi di ricerca13 Ricerca dicotomica codice 2/2 // Inserimento del valore da cercare ( la chiave K ) printf("Inserire l'elemento da cercare : "); scanf("%d",&K); inf = 0; //inizializzazione degli indici sup = N-1; med = (inf + sup)/2; //lettura dell'elemento mediano del vettore a ciascun passo while ( K != V[med] && inf<sup ) { if ( K > V[med] ) //controllo sullelemento mediano inf = med+1; else sup = med-1; med = (inf + sup)/2; } //risultato della ricerca if ( V[med]== K ) printf("Elemento trovato in posizione %d\n", med+1); else printf("Elemento non trovato\n"); }

Sistemi Informativi DEE - Politecnico di Bari A.PintoAlgoritmi di ricerca14 confronto La Ricerca Sequenziale ricerca con successo:Nel caso migliore ho un solo confronto e in quello peggiore N Il numero medio di confronti risulta (N+1)/2 ricerca senza successo: Lalgoritmo esamina sempre tutto il vettore, quindi il numero di confronti è sempre N La Ricerca dicotomica o binaria Ad ogni iterazione l'insieme è dimezzato, il numero di confronti è pari a quante volte un numero N può essere diviso per 2 fino a ridurlo a 0. Per esempio in un vettore di dimensione N = 2 h -1 lalgoritmo deve compiere h = log2(N+1) passi (e quindi confronti) per la ricerca senza successo, nel caso medio il numero è leggermente inferiore mentre nel caso migliore è 1.

Sistemi Informativi DEE - Politecnico di Bari A.PintoAlgoritmi di ricerca15 confronto Esempio : Se dovessimo cercare un elemento in un insieme di di elementi, nei casi piùsfortunati con l algoritmi di Ricerca Sequenziale dovremmo eseguire circa confronti, mentre con la Ricerca Binaria ne dobbiamo effettuare al massimo solamente 21.