Ch2 Timkiem

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 13

A

B
C
D
F
G
E
H
K
CU TRC D LIU V
GII THUT
Chng II: Tm kim
2
Tm kim
nh ngha:
Cho trc mt phn t Item v mt dy X c n phn t x
1
, x
2
, ,
x
n
c cng kiu d liu. Tm kim l xem Item c mt trong dy X
hay khng? (Tng qut xem dy X c phn t no tha mt tnh
cht cho trc no hay khng)
Phn loi:
Tm kim ni (internal searching) (nghin cu trong chng ny)
Tm kim ngoi (external searching)
Ty theo d liu c sp xp hay cha m ta c 2 phng
php tm kim: tuyn tnh (tun t) v nh phn
3
Bi tan:
Input - Dy X={x
1
, x
2
, , x
n
}
- Item: mc d liu cn tm.
Tr v:
tr 0 nu khng thy Item trong X
v tr u tin i trong X sao cho x
i
=Item
4
Tm tun t (sequential search)
5
Target key
7 13 5 21 6 2 8 15
0 1 2 3 4 5 6 7
position = 3
return 3
S ln so snh: 3
5
Tm tun t - khng tm thy
9
Target key
7 13 5 21 6 2 8 15
0 1 2 3 4 5 6 7
return 0
S ln so snh: 8
6
Tm tun t - M C++
int sequential_search(mang x, int n, ElementType Item)
{
int Pos = 0;
while(Pos<n && x[Pos]!=Item)
Pos++;
if (Pos==n) return 0; //Khong tim thay
else return (Pos+1);
}
7
Tm tun t - nh gi
S ln so snh trn kha i vi danh sch c n
phn t:
Tm khng thnh cng: n.
Tm thnh cng, trng hp tt nht: 1.
Tm thnh cng, trng hp xu nht: n.
Tm thnh cng, trung bnh: (n + 1)/2.
Vy: T
tn
(n)=O(1), T
tb
(n)=T
xn
(n)=O(n)
8
Tm trn mng c th t
Dy c th t (ordered array):
Phn t ti v tr i c kha nh hn hoc bng phn
t ti v tr j (i<j).
Tm tun t c th kt thc sm hn:
Khi kha cn tm nh hn kha ca phn t hin ti.
Cch tm khc nhanh hn:
Tm kim nh phn !?
9
Tm nh phn (binary search)
tng:
So snh kha cn tm vi phn t gia.
Nu n nh hn th tm bn tri dy.
Ngc li tm bn phi dy.
Lp li ng tc ny.
Cn 2 ch mc top v bottom gii hn on
tm kim trn danh sch.
Kha cn tm nu c ch nm trong on ny.
10
Tm nh phn
10
Target key
2 5 8 10 12 13 15 18 21 24
0 1 2 3 4 5 6 7 8 9
bottom top middle
position = 4
return 4
S ln so snh: 3
Kha cn tm khng bng Kha cn tm nh hn Kha cn tm ln hn Kha cn tm bng
11
Tm nh phn
int binary_search(mang x, ElementType Item, int n)
{
int bottom=0, top= n -1;
while (bottom <= top)
{
int mid = (bottom + top)/2;
if (Item == x[mid]) return (mid);
else if(Item<x[mid]) top=mid-1;
else bottom=mid+1;
}
return 0;
}
12
Tm nh phn
Da trn tng tm kim nh phn vit gii
thut quy (bi tp).
13
Tm nh phn nh gi
phc tp ca thut tan:
T
tb
(n) = T
xn
(n) = O(lg(n))
T
tn
(n) = ?

You might also like