Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [Algoritmi] Complessità Ricerca Binaria

    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/22 → (n/22 )/2=n/22 *1/2=n/23 -> ...


    Ovvero:
    n → n/21 → n/22 → n/23 → ⋯ → n/2i → ⋯


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


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


    Come si arriva a log2n da n → n/21 → n/22 → n/23 → ⋯ → n/2i → ⋯?


    So che il logaritmo si definisce in questo modo: x=ay → y=logax.


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


    Grazie mille :-)

  2. #2
    L'algoritmo si ferma quando arrivi a considerare un intervallo lungo 1, ovvero quando sei a
    n/2i = 1
    n = 2i
    log2(n) = log2(2i)
    log2(n) = i
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Grazie infinite! Finalmente ho capito. Grazie

  4. #4
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.