Sei sulla pagina 1di 13

Il problema della ricerca:

Dato un insieme L = {a1 ,a2 ,...,an } di n elementi


distinti e un elemento x, determinare se x appartiene
all'insieme.
I caso
l’elemento è presente 1 2 3 4 5

75 12 57 30 3

elemento da cercare = 57
1 2 3 4 5

Passo 1 i=1 75 12 57 30 3

Passo 2 i=2
confronto
Passo 3 75i con
= 3 57 sono diversi
sono diversi
L’elemento 57
confronto 12 con 57
sono uguali si trova
confronto 57 con 57
alla posizione
di indice 3
II caso
l’elemento non è 1 2 3 4 5
presente 75 12 57 30 3

elemento da cercare = 1
1 2 3 4 5

Passo 1 i=1 75 12 57 30 3

Passo 2 i=2
Passo
confronto
3 75i =con
3 1 sono diversi
Passo 4 125con
i = 14i = 5 sono diversi
L’elemento
confronto
Passo
6 1 >= nsono
= 5 diversi non è
confronto 57i =con
presente
confronto 30 con 1 sono diversi
confronto 3 con 1 sono diversi nell’insieme
start

i=1

elemento ≠ V [i]
and
i<=n

si
i = i+1
no
no si
i <=n

Elemento Elemento
Non trovato trovato in posizione i

end
valore da cercare: 10 primo ultimo

passo 1 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11
elemento di mezzo (10 < 23)

passo 2 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11
elemento di mezzo (10 > 5)

passo 3 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

elemento di mezzo (10 == 10)


start
min = 1

max = N

med = ⎣ (max+min)/2 ⎦

elemento ≠ V [med] no
and
min < max
si
no si
elemento > V [med]

max = med - 1 min = med + 1

no si
max > min
Elemento Elemento
Non trovato trovato in posizione med

end
valore da cercare: 8
passo 1 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11
elemento di mezzo (8 < 23)

passo 2 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11
elemento di mezzo (8 > 5)

passo 3 Nell’intervallo da considerare l’indice


1 3 5 10 15 23 31“primo”
47 è maggiore
47 56 64
di “ultimo”
1 2 3 4 5 6 7 8 9 10 11
L’elemento non è presente nel vettore
elemento di mezzo (8 < 10)

passo 4 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11
function pos=ricerca_bin(x, vet)
num_el = numel(vet);
inf=1;
sup=num_el;
med=0;
trovato=0;
while (~trovato & (inf<=sup))
med=floor((inf+sup)/2);
if vet(med) == x
trovato=1;
else
if vet(med)> x
sup = med-1;
else
inf=med+1;
end
end
end
if trovato == 1
pos=med;
else
pos=-1;
end

Potrebbero piacerti anche