Ricerca lineare: Python, C++ Esempio

โšก Riepilogo intelligente

La ricerca lineare esamina sequenzialmente ogni elemento di una lista fino a quando non viene individuato il valore cercato o la lista non termina. Questo metodo non richiede dati ordinati, ha una complessitร  temporale O(n) ed รจ efficace per collezioni di piccole dimensioni o non ordinate.

  • ๐Ÿ” Meccanismo principale: La ricerca lineare confronta l'elemento di destinazione con ogni elemento a partire dall'indice zero fino a quando non trova una corrispondenza e ne restituisce la posizione, oppure fino a quando la scansione termina restituendo -1.
  • โš™๏ธ Comportamento funzionale: La routine restituisce un indice compreso tra 0 e n-1 quando il valore รจ presente, oppure -1 quando l'elemento cercato non รจ presente nell'array.
  • ๐Ÿ’ป Code Implementazioni: lavoro C++ and Python Gli esempi attraversano un array di interi con un singolo ciclo e stampano l'indice in cui compare il valore cercato.
  • ๐Ÿ“Š Profilo di complessitร : La complessitร  temporale raggiunge O(n) nei casi peggiori e medi, O(1) nel migliore dei casi, mentre la complessitร  spaziale rimane O(n) complessivamente.
  • ๐Ÿš€ Tecniche di ottimizzazione: Le funzioni Trasposizione e Sposta in primo piano riordinano le chiavi cercate piรน frequentemente, portandole all'inizio e riducendo cosรฌ i confronti tra ricerche ripetute.

Algoritmo di ricerca lineare

Cos'รจ l'algoritmo di ricerca?

Un algoritmo di ricerca รจ progettato per trovare un elemento o un oggetto all'interno di una collezione di elementi o oggetti con una determinata struttura dati. Ad esempio, puรฒ essere utilizzato per cercare l'altezza minima in un elenco di altezze, oppure il valore piรน alto in un elenco o in una matrice di numeri. Alcuni algoritmi di ricerca comuni includono la "Ricerca Lineare", la "Ricerca Binaria", la "Ricerca a Salto", la "Ricerca di Fibonacci", ecc.

Cos'รจ la ricerca lineare?

Ricerca lineare รจ uno degli algoritmi di ricerca piรน semplici. Da una lista o un array dato, cerca l'elemento dato uno per uno. La ricerca lineare itera sull'intera lista e controlla se un elemento particolare รจ uguale all'elemento cercato. รˆ anche chiamata ricerca sequenziale.

Cosa fa la funzione di ricerca lineare?

Un array di numeri interi รจ dato come โ€œNumbers,โ€ e una variabile โ€œitemโ€ contiene il numero intero da cercare.

Ora, l'algoritmo di ricerca lineare puรฒ fornire il seguente output:

  • โ€œ-1โ€; questo significa che lโ€™elemento specificato non รจ stato trovato nellโ€™array.
  • Qualsiasi numero compreso tra 0 e n-1; significa che l'elemento di ricerca viene trovato e restituisce l'indice dell'elemento sull'array. Qui, "n" rappresenta la dimensione dell'array.

Come funziona la ricerca lineare?

Supponiamo di avere un array contenente numeri interi. Il compito รจ trovare un dato numero all'interno dell'array.

  • Se il numero si trova nell'array, dobbiamo restituire l'indice di quel numero.
  • Se il numero specificato non viene trovato, restituirร  -1.

Nel diagramma di flusso, "Dati" รจ l'array intero, "N" รจ la dimensione dell'array e "elemento" รจ il numero che vogliamo cercare nell'array.

Diagramma di flusso per l'algoritmo di ricerca lineare:

Diagramma di flusso per l'algoritmo di ricerca lineare

Ecco i passaggi del diagramma di flusso:

Passo 1) Leggi l'elemento di ricerca, "elemento".

Passo 2) Inizializza i=0 e index=-1.

Passo 3) Se io

Passo 4) Se Data[i] รจ uguale a "item", vai al passaggio 5. Altrimenti vai al passaggio 6.

Passo 5) Indice = i (poichรฉ l'elemento si trova all'indice i). Vai al passaggio 8.

Passo 6) io = io+1.

Passo 7) Vai al passaggio 3.

Passo 8) Interrompere.

Per semplicitร , forniamo un esempio con un array di numeri interi. La ricerca lineare รจ applicabile anche nella stringa, in un array di oggetti o in una struttura.

Soprannome Code per l'algoritmo di ricerca sequenziale

Il seguente pseudocodice riproduce la logica della ricerca lineare descritta in precedenza. Il programma scorre l'array a partire dal primo indice e restituisce la posizione in caso di corrispondenza, altrimenti restituisce -1.

function linearSearch: in โ†’ Data[], item
    foundAt = -1
    for i in (0 to data.length):
        if data[i] equals item:
            // item is found in the array
            // returning the index
            return i
    // item not found in the array
    // -1 means no item found, as a negative index is not valid
    return -1

C++ Code Esempio di ricerca lineare

Ecco una versione completa C++ Programma che implementa la ricerca sequenziale e stampa l'indice del valore cercato.

#include <bits/stdc++.h>
using namespace std;

int linearSearch(int *arr, int item, int n) {
    int idx = -1;
    for (int i = 0; i < n; i++) {
        if (arr[i] == item) {
            idx = i;
            break;
        }
    }
    return idx;
}

int main() {
    int array[] = {1, 9, 8, 7, 6, 3, 11, 4, 6, 9, 7, 2, 0, 19, -10};
    int n = sizeof(array) / sizeof(array[0]);
    int item;
    cout << "Enter a number to search: ";
    cin >> item;
    int idx = linearSearch(array, item, n);
    if (idx >= 0) {
        cout << item << " is found at index " << idx << endl;
    } else {
        cout << "Could not find " << item << " in the array" << endl;
    }
}

Produzione:

Enter a number to search: -10
-10 is found at index 14

Python Code Esempio di ricerca lineare

La stessa logica in Python utilizza un singolo ciclo sugli indici della lista e restituisce la posizione dell'elemento corrispondente.

def linearSearch(data, item):
    for i in range(len(data)):
        if data[i] == item:
            return i
    return -1

data = [1, 9, 8, 7, 6, 3, 11, 4, 6, 9, 7, 2, 0, 19, -10]
item = int(input("Enter a number to search: "))
idx = linearSearch(data, item)
if idx >= 0:
    print("{} is found at index {}".format(item, idx))
else:
    print("{} was not found".format(item))

Produzione:

Enter a number to search: -10
-10 is found at index 14

Analisi della complessitร  dell'algoritmo di ricerca lineare

In generale, la complessitร  temporale indica la quantitร  di tempo CPU necessaria per eseguire una determinata attivitร . Nell'algoritmo di ricerca lineare, l'attivitร  consiste nel trovare la chiave di ricerca tra gli elementi dell'array.

Esistono tre tipi di complessitร  temporale:

  • Nella peggiore delle ipotesi
  • miglior scenario di caso
  • Scenario medio

Complessitร  temporale della ricerca lineare nello scenario peggiore:

Supponiamo di dover eseguire una ricerca lineare in un array di dimensione "n". Possiamo trovare l'elemento cercato tra gli indici da 0 a n-1. Nel caso peggiore, l'algoritmo tenterร  di trovare una corrispondenza tra tutti gli elementi dell'array e l'elemento cercato.

In tal caso, la complessitร  nel caso peggiore sarร  O(n). Qui, โ€œOโ€ โ€” notazione O grande โ€” indica la funzione di complessitร .

Complessitร  temporale della ricerca lineare nello scenario del caso migliore:

Supponiamo di cercare un elemento che si trova nella prima posizione dell'array. In questo scenario, l'algoritmo di ricerca lineare non cercherร  tutti gli n elementi dell'array. Pertanto, la complessitร  sarร  O(1), ovvero un tempo costante.

Complessitร  temporale della ricerca lineare nello scenario del caso medio:

Quando un elemento viene trovato all'indice centrale dell'array, si puรฒ dire che la complessitร  media per la ricerca lineare รจ O(N), dove N indica la lunghezza dell'array.

La complessitร  spaziale dell'algoritmo di ricerca lineare:

La complessitร  spaziale per la ricerca lineare รจ sempre O(N) perchรฉ non รจ necessario memorizzare o utilizzare alcun tipo di variabile temporanea nella funzione di ricerca lineare.

Come migliorare l'algoritmo di ricerca lineare

La ricerca puรฒ essere effettuata piรน volte durante il ciclo di vita del programma. รˆ anche possibile che stiamo eseguendo l'algoritmo di ricerca lineare e cercando una chiave specifica piรน volte. Possiamo usare il โ€œAlgoritmo di ricerca binaria" se l'array รจ un array ordinato.

Supponiamo che l'array sia composto da 10mila numeri e che l'elemento di destinazione si trovi nel 5000esimo indice. Quindi, l'algoritmo proverร  a confrontare 5000 elementi. Ora, i confronti sono attivitร  pesanti per la CPU. Per ottimizzare l'algoritmo di ricerca lineare, abbiamo due opzioni.

  • Trasposizione
  • Sposta in primo piano

Recepimento:

Con questo metodo, scambieremo l'elemento cercato con il suo elemento precedente nell'array. Ad esempio, supponiamo di avere un array come il seguente:

Dati[] = {1,5,9,8,7,3,4,11}

Ora, vogliamo cercare 4. Fasi di trasposizione:

Trasposizione nella ricerca lineare

Passo 1) "4" si trova all'indice 6. Sono stati necessari sei confronti.

Passo 2) Scambia dati[6] e dati[5]. Quindi l'array di dati sarร  simile a:

Dati[] = {1,5,9,8,7,4,3,11}

Passo 3) Cerca di nuovo 4. Trovato all'indice 5. Questa volta ci sono voluti cinque confronti.

Passo 4) Scambia data[5] e data[4]. Quindi l'array di dati apparirร  cosรฌ:

Dati[] = {1,5,9,8,4,7,3,11}

Ora, come potete notare, piรน frequentemente viene cercata una chiave, piรน diminuisce l'indice. Di conseguenza, diminuisce anche il numero di confronti.

Spostarsi in avanti:

In questo metodo, scambiamo l'elemento da cercare con l'indice 0. Perchรฉ se viene cercato di nuovo, possiamo trovarlo in tempo O(1).

Spostarsi in primo piano nella ricerca lineare

Applicazione dell'algoritmo di ricerca lineare

Ecco alcune applicazioni di ricerca lineare che possiamo utilizzare.

  • Per array di piccole dimensioni o con pochi elementi nell'elenco, รจ piรน semplice utilizzare la ricerca lineare.
  • Il metodo di ricerca lineare puรฒ essere utilizzato in singolo o array multidimensionali o altre strutture dati.
  • In generale, la ricerca lineare รจ semplice ed efficiente per eseguire una ricerca nei dati โ€œnon ordinatiโ€. Possiamo recuperare facilmente un singolo dato dall'elenco non ordinato fornito.

DOMANDE FREQUENTI

La ricerca lineare analizza elenchi di caratteristiche non ordinati, piccole tabelle di consultazione e insiemi di etichette durante la preelaborazione dei dati. Le pipeline di intelligenza artificiale la utilizzano spesso per individuare un valore quando i dati non sono ordinati o sono troppo piccoli per giustificare la creazione di un indice.

Sรฌ. Gli assistenti IA possono scrivere ricerche lineari in Python, C++, o Java da una semplice descrizione. La logica รจ semplice, quindi gli errori sono rari, ma รจ comunque consigliabile testare i casi limite come un array vuoto o un elemento mancante.

La ricerca lineare controlla ogni elemento in sequenza e opera su dati non ordinati in tempo O(n). Ricerca binaria Dimezza ripetutamente un array ordinato in tempo O(log n), risultando molto piรน veloce per grandi collezioni ordinate.

Utilizzate la ricerca lineare quando i dati sono di piccole dimensioni, non ordinati o cambiano frequentemente, poichรฉ l'ordinamento preliminare costerebbe di piรน rispetto a una scansione diretta. รˆ adatta anche per liste concatenate e ricerche a passaggio singolo, dove l'accesso casuale non รจ possibile.

Riassumi questo post con: