La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Ricerca 01/08/2019 package.

Presentazioni simili


Presentazione sul tema: "Ricerca 01/08/2019 package."— Transcript della presentazione:

1 Ricerca 01/08/2019 package

2 Ricerca in una sequenza di elementi
Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure l’elemento non è presente nella sequenza stessa. In generale una sequenza di elementi si può realizzare come un array e la scansione avviene usando un indice. Se la sequenza non è ordinata a priori occorre eseguire una ricerca lineare o sequenziale. Se la sequenza è ordinata è opportuno eseguire una ricerca binaria. 01/08/2019 package

3 /. Una classe per eseguire ricerche lineari in un array non ordinato
/** Una classe per eseguire ricerche lineari in un array non ordinato. */ public class LinearSearcher { private int[] a; /** Trova un valore in un array usando l’algoritmo di ricerca lineare @param v il valore da cercare @return l’indice in cui si trova il valore, oppure – se non è presente nell’array */ public int search(int v){ for (int i = 0; i < a.length; i++){ if (a[i] == v) return i; } return –1; } }

4 Ricerca binaria L’algoritmo di ricerca lineare richiede che al più tutti gli elementi dell’array vengano confrontati con la chiave. Se l’elemento viene trovato prima di raggiungere la fine della sequenza non sarà necessario proseguire la ricerca. Se la sequenza su cui occorre effettuare la ricerca è ordinata si può usare un algoritmo di ricerca molto più efficiente che cerca la chiave sfruttando il fatto che gli elementi della sequenza sono già disposti in un dato ordine. Esempi di sequenze ordinate: elenco telefonico, agenda, etc. In questi casi si usa un algoritmo di ricerca binaria che è più efficiente perché riduce lo spazio di ricerca. 01/08/2019 package

5 Ricerca binaria L’algoritmo di ricerca binaria cerca un elemento in una è si è completata la ricerca senza trovarlo: 1. Confronta la chiave con l’elemento centrale della sequenza, 2. Se la chiave è uguale all’elemento centrale, allora la ricerca termina positivamente, 3. Se invece la chiave è maggiore dell’elemento centrale si effettua la ricerca solo sulla sottosequenza a destra, 4. Se invece la chiave è minore dell’elemento centrale dello spazio di ricerca, si effettua la ricerca solo sulla sottosequenza a sinistra. 01/08/2019 package

6 Ricerca binaria Inizialmente la ricerca è fatta su N elementi, dove N indica la lunghezza della sequenza (lo spazio di ricerca ha dimensione N). Ad ogni iterazione lo spazio della ricerca si riduce di “ circa” la metà. Potremmo dire che si passa da N ad N/2. Il caso peggiore si ha quando l’elemento cercato non si trova nella sequenza (non esiste un elemento uguale alla chiave). Nel caso peggiore, l’iterazione viene eseguita log2 N volte. 01/08/2019 package

7 /. Una classe per eseguire ricerche binarie in un array
/** Una classe per eseguire ricerche binarie in un array. */ public class BinarySearcher { private int[] a;   /** Trova un valore in un array ordinato, utilizzando l’algoritmo della ricerca binaria @param v il valore da cercare @return l’indice della posizione in cui si trova il valore, oppure –1 se non è presente */ public int search(int v) { int low = 0; int high = a.length – 1; while (low <= high) { int mid = (low + high) / 2; int diff = a[mid] – v; if (diff == 0) // a[mid] == v return mid; else if (diff < 0) // a[mid] < v low = mid + 1; else high = mid – 1; } return –1; } }

8 Ricerca in una collezione
public int search(String artista) { int low = 0; int high = count - 1; while (low <= high) { int mid = (low + high) / 2; int diff = collection[mid].getArtist().compareTo(artista); if (diff == 0) return mid; else if (diff < 0) low = mid + 1; else high = mid -1; } return - 1; 01/08/2019 package


Scaricare ppt "Ricerca 01/08/2019 package."

Presentazioni simili


Annunci Google