Sei sulla pagina 1di 12

Ricerca sequenziale (o lineare)

Chen Enrico - Movio Alessandro


Castellarin Riccardo - Chinellato Gianmichele
Edoardo Eletto.
Descrizione

 Input:
 array.
 elemento ricercato.

 Algoritmo di ricerca per trovare un


elemento in un insieme generalmente
non ordinato.
int ricercaSequenziale(int insieme[], int x, int n) {

int i;
for (i = 0; i < n; ++i) {
// Interrompe la ricerca con successo alla prima
corrispondenza trovata
Ricerca lineare - if (insieme[i] == x)
return i;
linguaggio C }
// L'intera sequenza è stata esaurita senza trovare
corrispondenze
return -1;

}
Miglior caso

 L’elemento cercato è nella prima posizione della lista.


 In questo caso, la ricerca termina con successo con una sola comparazione.
 Quindi nel miglior caso, l’algoritmeno fa O(1) operazione.
Caso medio

 Elemento cercato è da qualche parte in mezzo alla lista.


 In questo caso, la ricerca termina con n/2 comparazioni.
 Quindi nel caso medio, l’argoritmo fa O(n/2) operazioni.
Peggior caso

 Elemento cercato è nell’ultima posizione della lista o non è proprio presente nell’array.
 Nel primo caso, la ricerca termina con successo con n comparazioni.
 Nel secondo caso, la ricerca termina fallendo con n comparazioni.
 Quindi, nel peggior caso, l’algoritmo fa O(n) operazioni.
Applicazioni

È efficiente quando:
 la lista contiene pochi elementi (array di medie dimensioni – circa 100 elementi o meno).
 si esegue una singola ricerca in un elenco non ordinato.
 bisogna cercare molti valori nello stesso elenco.
Variante con sentinella

o Una versione leggermente migliorata dell’algoritmo di ricerca sequenziale.


o La verifica (i < n) può essere evitata se l’algoritmo ha la possibilità di modificare l’insieme su cui
avviene la ricerca.
o Questa variante, pur introducendo una semplificazione del passo iterativo, non altera l’ordine di
complessità dell’algoritmo nel suo complesso, che rimane lineare.
// Si assume che "lista" abbia capacità di almeno n+1
elementi, ovvero
// che lista[n] sia una valida locazione di memoria.
int ricercaSequenzialeConSentinella(int lista[], int x, int n) {
// Aggiunta della sentinella
Variante con lista[n]=x;

sentinella - // Scansione sino alla prima corrispondenza

linguaggio C int i = 0;
while (lista[i] != x) i++;

// Identificazione dell'esito
return (i < n) ? i : -1;
}
Ricerca lineare Ricerca binaria
Elenco ordinati di
Richiede più tempo Richiede meno tempo
elementi

Elementi Non necessariamente ordinati Necessariamente ordinati

Differenze -
ricerca lineare Vs ricerca binaria
Fonti

 https://en.wikipedia.org/wiki/Linear_search
 https://it.wikipedia.org/wiki/Ricerca_sequenziale
 https://www.gatevidyalay.com/tag/linear-search-algorithm-pseudocode/
 https://www.youtube.com/watch?v=GPY0b8drb0o
 http://www.valcon.it/pp/ricerca-sequenziale-con-sentinella/
 https://piazza.com/class_profile/get_resource/h7blr0wpzhd2bg/haqg87fkimos9
 https://it.gadget-info.com/difference-between-linear-search
 https://it.sawakinome.com/articles/programming/difference-between-binary-search-and-linear-
search.html
FINE
Grazie per l’attenzione.

Potrebbero piacerti anche