[Algoritmi] Complessità Ricerca Binaria

Messaggioda stefano86 » 01/03/2015, 10:26

Ciao a tutti, sto studiando la ricerca binaria ma non capisco come si arriva a determinare la complessità dell'algoritmo, ovvero il numero dei passi necessari per restituire il risultato.

L'algoritmo è questo (Java):
Codice:
public static int ricercaBin(int x, int[] a) {
   int inf = 0;
   int sup = a.length - 1;
   while(inf <= sup) {
      int i = (inf + sup)/2;
      if(x < a[i])
         sup = i - 1;
      else if(x > a[i])
         inf = i + 1;
      else
         return i;
   }
   return -1; //x non in a: valore impossibile di indice
}


So che il numero di iterazioni è dato dal numero di volte che possiamo dimezzare il vettore, cioè:
$n -> n/2 -> (n/2)/2=n/2*1/2=n/2^2 → (n/2^2 )/2=n/2^2 *1/2=n/2^3 -> ...$

Ovvero:
$n → n/2^1 → n/2^2 → n/2^3 → ⋯ → n/2^i → ⋯$

Con $i$ = numero di passi e $n$ = lunghezza dell’array.

Ora si afferma che il numero di iterazioni del ciclo è, nel caso peggiore, circa $log_2 n$. Perchè?

Come si arriva a $log_2 n$ da $n → n/2^1 → n/2^2 → n/2^3 → ⋯ → n/2^i → ⋯$?

So che il logaritmo si definisce in questo modo: $x=a^y harr y=log_a x$.

Ma non mi sono chiari i passaggi usati per arrivare a $log_2 n$. Qualcuno saprebbe gentilmente spiegarmeli?

Grazie mille :-)
stefano86
Junior Member
Junior Member
 
Messaggio: 59 di 266
Iscritto il: 09/08/2014, 17:56

Re: [Algoritmi] Complessità Ricerca Binaria

Messaggioda probid » 02/03/2015, 05:16

Ora devi chiederti quale sia il caso pessimo e raggiungendo quale lunghezza del sottoarray si verifichi.
Quanto vale $i$ in corrispondenza?

Ciao!
probid
New Member
New Member
 
Messaggio: 17 di 82
Iscritto il: 01/10/2010, 19:30

Re: [Algoritmi] Complessità Ricerca Binaria

Messaggioda stefano86 » 04/03/2015, 21:06

Il caso pessimo è quando l'elemento da cercare non esiste nell'array scelto.. mhhh
stefano86
Junior Member
Junior Member
 
Messaggio: 60 di 266
Iscritto il: 09/08/2014, 17:56

Re: [Algoritmi] Complessità Ricerca Binaria

Messaggioda good91 » 05/03/2015, 11:11

Generalmente alla $ i-esima $ iterazione la distanza è pari a $ n/2^(i-1) $.
Il ciclo quindi si arresta al passo $ i $ successivo a quello in cui $ n/2^(i-1)=1 $
Quindi $ i=log_2 n +1 $. Visto che ad ogni passo si effettua solo un confronto, il numero massimo di confronti è:
$ log_2 n +1 $ $ ~$ $ log_2 n $
good91
New Member
New Member
 
Messaggio: 2 di 50
Iscritto il: 05/03/2015, 10:49

Re: [Algoritmi] Complessità Ricerca Binaria

Messaggioda stefano86 » 06/03/2015, 18:55

good91 ha scritto:Generalmente alla $ i-esima $ iterazione la distanza è pari a $ n/2^(i-1) $.
Il ciclo quindi si arresta al passo $ i $ successivo a quello in cui $ n/2^(i-1)=1 $
Quindi $ i=log_2 n +1 $. Visto che ad ogni passo si effettua solo un confronto, il numero massimo di confronti è:
$ log_2 n +1 $ $ ~$ $ log_2 n $

Ciao, grazie mille per la risposta.. Cosa intendi con distanza?
stefano86
Junior Member
Junior Member
 
Messaggio: 66 di 266
Iscritto il: 09/08/2014, 17:56

Re: [Algoritmi] Complessità Ricerca Binaria

Messaggioda stefano86 » 11/03/2015, 21:49

Scusate ma non ho ancora capito.. So che è una cosa stupida ma non ci arrivo :(
stefano86
Junior Member
Junior Member
 
Messaggio: 67 di 266
Iscritto il: 09/08/2014, 17:56


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite