Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

Con sentinella

Precedente
SUPERIORE
Successiva

L'algoritmo di ricerca sequenziale con sentinella

Function RicSent(V: Vettore; N: Integer; K: Elemento): Integer;
Var
   I: Integer;
Begin
   I:=1;               (1)
   V[N+1]:=K;          (1') (1'')
   While(V[I] <> K) do (4)
      I:=I+1;          (5) (6)
   If(I > N) then      (7)
      RicSent:=0       (8)
   Else
      RicSent:=I       (9)
End;

Ripetendo i conteggi otteniamo

T = T1+T1'+T1''+[T4+T5+T6]x+T4+T7+T8|9= 6+3x

e quindi

bulletVettore vuoto: T1+T1'+T1''+T4+T7+T8 = 6
bulletElemento in 1° posizione: T1+T1'+T1''+T4+T7+T9 = 6
bulletElemento in 2° posizione: T1+T1'+T1''+(T4+T5+T6)+T4+T7+T9 = 6+3 = 9
bulletElemento in 2° posizione: T1+T1'+T1''+(T4+T5+T6)+(T4+T5+T6)+T4+T7+T9 = 6+3*2 = 12
bullet...
bulletElemento in ultima posizione: 6+3(n-1)
bulletElemento non presente: 6+3*n

Caso ottimo

bulletVettore vuoto, elemento in 1° posizione: T = 6

Caso pessimo

bulletElemento non presente: T = 6+3*n

Caso medio (con posizione da 1 a n...)

bulletT = 1/n*[6+(6+3)+(6+6)+...+6+3(n-1)] = 1/n*[6n+3(n-1)n/2 = 6+3(n-1)/2 = 4.5+1.5n = c1'+c2'n

I coefficienti della funzione lineare diventano più vantaggiosi (tranne che nei casi banali…)

Con sentinella - ApPuNtIdIuNiNfOrMaTiCo

Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

Precedente
SUPERIORE
Successiva