Generalizziamo i problemi di ricerca in questo modo:

  • Input: Una list di numeri ed un valore da cercare
  • output: un indice tale che oppure se il valore non è presente nella lista.

La Ricerca Sequenziale

L’algoritmo più semplice si basa sul controllare uno alla volta gli elementi del vettore e se confrontandolo con vediamo che sono uguali restituiamo l’indice altrimenti se non troviamo nessuna corrispondenza restituiamo . In questo modo otteniamo una complessità di infatti nel:

  • Caso peggiore ovvero quando non è nella lista abbiamo
  • Caso migliore ovvero quando è il primo elemento abbiamo

In questo caso non abbiamo trovato una stima del costo per tutti i casi per questo utilizziamo la notazione , per indicare che ci sono input che rispettano questo dato ma anche input che scendono molto sotto.

Per trovare il caso medio in questo tipo di algoritmi faccio l’ipotesi che l’elemento possa apparire con la stessa probabilità in ogni posizione del vettore allora il numero medio di iterazioni del ciclo è dato da

Quindi il costo computazionale nel caso medio è di

Ricerca Binaria

Nel caso in cui gli elementi nel vettore sono ordinati possiamo implementare un algoritmo molto più efficiente, possiamo controllare a metà e se il valore è minore procediamo a controllare nella parte a destra mentre se il valore è maggiore controlliamo nella parte a sinistra, o se siamo stati fortunati abbiamo trovato il valore desiderato.

In questo modo ad ogni iterazione dimezziamo il numero di elementi da controllare

  • Dopo iterazioni il numero di elementi su cui ricercare sarà
  • Quindi

Il numero di iterazioni quindi cresce come

Possiamo distinguere però i due casi:

  • Caso peggiore:
  • Caso migliore:

Siccome sono diversi vediamo come calcolare il caso medio. Quindi con una iterazione raggiungiamo soltanto , con due iterazioni controlliamo e con tre iterazioni Quindi la probabilità di trovare un elemento sono nelle posizione toccate dalle iterazioni sono e quindi il numero medio di iterazioni è