Menu
Coddy logo textTech

Ricerca lineare

Ultimo aggiornamento

La ricerca lineare (detta anche ricerca sequenziale) è l'algoritmo di ricerca più semplice: parti dal primo elemento e confronti ciascuno con il valore cercato finché non trovi una corrispondenza o finiscono gli elementi. Non fa alcuna ipotesi sui dati, quindi l'array può essere non ordinato e gli elementi possono essere qualsiasi cosa confrontabile per uguaglianza.

L'animazione qui sopra evidenzia ogni confronto mentre la scansione procede da sinistra a destra e si ferma appena compare il valore cercato. La sua semplicità si paga in velocità: nel caso peggiore controlla ogni elemento, quindi richiede O(n). Quando i dati sono ordinati, la ricerca binaria trova la stessa risposta in O(log n), e se prima devi ordinare i dati, vedi il merge sort.

Complessità temporale e spaziale

CasoComplessitàNote
Caso miglioreO(1)Il primo elemento è quello cercato.
Caso medioO(n)In media si controlla metà degli elementi prima di trovarlo.
Caso peggioreO(n)Il valore cercato è l'ultimo, oppure non c'è affatto.
SpazioO(1)Si tiene solo l'indice corrente.

Passo dopo passo

PassoCosa succede
1Parti dall'indice 0, il primo elemento dell'array.
2Confronta l'elemento corrente con il valore cercato.
3Se sono uguali, restituisci l'indice corrente (trovato).
4Altrimenti spostati di una posizione a destra e ripeti.
5Se arrivi alla fine dell'array senza corrispondenze, il valore non c'è (restituisci -1).

Esempio svolto

Ricerca di 5 in [7, 3, 9, 1, 5, 8, 2]:

ConfrontoIndiceElementoRisultato
1077 ≠ 5: continua la scansione.
2133 ≠ 5: continua la scansione.
3299 ≠ 5: continua la scansione.
4311 ≠ 5: continua la scansione.
5455 = 5: trovato all'indice 4.

Quando usare la ricerca lineare

Usala quandoEvitala quando
I dati non sono ordinati o cambiano di continuoI dati sono ordinati, quindi la ricerca binaria è esponenzialmente più veloce
La collezione è piccola, quindi vince la semplicitàL'insieme di dati è grande e ci cerchi più volte
Hai solo accesso sequenziale (stream, liste concatenate)Puoi permetterti un indice o una tabella hash per ricerche O(1)

Un'implementazione di Linear Search pulita ed eseguibile in Python, JavaScript, Java, C++, C, Pseudocode. Scegli un linguaggio, copia il codice o aprilo già caricato nel Playground di Coddy.

Codice Linear Search in Python

Python
1def linear_search(a, target):2    # Scan left to right until the target appears3    for i in range(len(a)):4        if a[i] == target:5            return i6    return -17
8
9nums = [7, 3, 9, 1, 5, 8, 2]10print("Index of 5:", linear_search(nums, 5))11print("Index of 4:", linear_search(nums, 4))
Esegui questo codice nel playground Python

Domande frequenti sulla ricerca lineare

Qual è la complessità temporale della ricerca lineare?
O(n) nel caso medio e peggiore (la scansione potrebbe dover visitare ogni elemento) e O(1) nel caso migliore, quando il primo elemento è quello cercato. Usa O(1) di spazio extra.
La ricerca lineare ha bisogno di dati ordinati?
No, ed è il suo vantaggio principale. La ricerca lineare funziona su dati del tutto non ordinati perché controlla l'uguaglianza di ogni elemento; l'ordine non conta mai. La ricerca binaria, invece, funziona solo su array ordinati.
Quando la ricerca lineare è meglio della ricerca binaria?
Quando i dati non sono ordinati e li cerchi una sola volta (ordinarli prima costerebbe O(n log n)), quando la collezione è minuscola, o quando hai solo accesso sequenziale, come in uno stream o in una lista concatenata. Per ricerche ripetute su array ordinati vince la ricerca binaria.
La ricerca lineare è la stessa cosa della ricerca sequenziale?
Sì, i due nomi descrivono lo stesso algoritmo: scorrere gli elementi in sequenza finché non trovi il valore cercato o la collezione finisce.
Quanti confronti fa in media la ricerca lineare?
Se il valore c'è e può trovarsi ovunque con la stessa probabilità, circa n/2 confronti in media; se non c'è, esattamente n. È questa crescita lineare a darle il nome di ricerca lineare.
Illustrazione dei linguaggi di programmazione di Coddy

Padroneggia gli algoritmi con Coddy

INIZIA