Tải bản đầy đủ (.pdf) (33 trang)

slike bài giảng cấu trúc dữ liệu và giải thuật - đỗ bích diệp chương 8 tìm kiếm – phần ii

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (463.2 KB, 33 trang )

1
Chương VII: Tìm kiếm-II
Tìm kiếm–PhầnII
z Nội dung
– Các dạng cây đặcbiệtsử dụng trong tìm kiếm
z Cây tìm kiếm đa nhánh
z Cây 2:3
z Cây nhị phân tìm kiếmtối ưu
– CấutrúcBảng băm (Hash Table)
– Tìm kiếmxâumẫu (Pattern Matching)
2
Cây 2-3
z Cây tìm kiếm đặcbiệt
– Một nút nhánh có 2 hoặc3 con
– Tấtcả các đường đitừ nút gốctới nút lá đềucóđộ dài
bằng nhau
– Cây có mộtnútlàtrường hợp đặcbiệtcủacây2-3
z Cấutrúccủa các nút trong cây 2-3
– Chỉ có nút lá chứa các giá trị (Các phầntử ), các nút lá
chứa các giá trị tăng dần(xéttừ trái sang phải)
– Các nút nhánh chứa thông tin vềđường đihỗ trợ cho việc
tìm kiếm các giá trị
Cây 2-3
z Quy cách của nút lá trong cây 2-3
z Quy cách của nút nhánh củacây
VALUETYPE
LPTR LDATA MPTR MDATA RPTRTYPE
3
Cây2-3 –Vídụ
1 : 3
1


11
7:11
6:11
76
3
Tìm kiếm trên cây 2-3
Function SEARCH-2-3(T,X)
1. p:= T;
2. while TYPE(p) =1 do begin
if X <= LDATA(p) then p:= LPTR(p);
else if X <= MDATA(p) then p:= MPTR(p);
else if RPTR(p) < > NULL then p:= RPTR(p)
else SEARCH-2-3 := NULL;
end
3. {Tìm được đến 1 nút lá}
if VALUE(p) = X then SEARCH-2-3 := p; else SEARCH-2-3 := NULL;
4. return
4
Cây 2-3 : Bổ sung
z Bổ sung phải xét 4 trường hợp
– Cây ban đầurỗng
– Cây ban đầuchỉ có 1 nút: Sau khi bổ sung, cây có thêm
một nút nhánh
4: 9
9
44
Cây ban đầurỗng, bổ sung 4
Cây ban đầucó1 nút,
bổ sung thêm 9
Cây 2-3 : Bổ sung

– Cây ban đầucónhiều nút, nút mới đượcbổ sung thành
con củamột nút hiện đang có 2 con: So sánh giá trị của
nút mớivới 2 nút con để tìmravị trí đúng
4: 9
9
4
4: 7
9
4
7
Trướckhibổ sung
Sau khi bổ sung 7
5
Cây 2-3: Bổ sung
– Nút mới đượcbổ sung làm con củamộtnútN đãcó3
con: Tạomột nút nhánh mớiN2 –sẽ là nút anh em bên
phảicủaN, lấy 2 con cựcphảicủaN làmcon củaN2.
Việctáchcóthể sẽ diễnraở các mức cha củaN nữa.
4: 7
9
4 7
4: 7
9
4 7
11
4: 7
4
7
9: 11
119

7:11
Cây 2-3 : Bổ sung
3: 6
3
6
7: 11
12
7 11
13:16
13
16
6: 12
3: 6
3
6
7: 11
11
7 8
13:16
13
16
6: 12
12
Trướckhibổ sung
Ngay sau khi bổ sung 8
6
Cây 2-3: Bổ sung
3: 6
3
6

7: 8
11
7
8
13:16
13
16
6: 12
12
11:12
Sau khi tách nút lần1
Cây 2-3: Bổ sung
3: 6
3
6
7: 8
11
7
8
13:16
13
16
6: 8
12
11:12
12:
16
8: 16
Sau khi tách nút lần2
7

Các dạng cây khác trong tìm kiếm
K
1
K
2
K
3
keys < K
1
K
1
<= keys < K
2
K
2
<= keys < K
3
K
3
<= keys
Mộtcâydạng cây tìm kiếm đanhánh
Các dạng cây khác trong tìm kiếm
z Cây tìm kiếm đa nhánh(Multi-way Tree)
– Là một cây có bậcbấtkỳ nhưng có tính chấtthứ
tự tương tự như cây nhị phân
– Mỗi nút trong cây có chứa m-1 khóa và m con trỏ
trỏđến các cây con
– Các giá trị xuấthiện trong một cây con đượctrỏ
bởi con trỏ p
z Nhỏ hơngiátrị khóa bên phảicủap

z Lớnhơnhoặcbằng gía trị khóa bên trái p
8
Các dạng cây khác trong tìm kiếm
– Ví dụ cây tìm kiếm đa nhánh
50 100 150
35 45 85 95 125 135 175
60 70 90 110 120
75
Các dạng cây khác trong tìm kiếm
z Cây B – Cây tìm kiếm đa nhánh cân bằng
– Một cây tìm kiếm đa nhánh cân bằng bậcm có
các đặctrưng sau
z Gốccủacâylàmộtnútláhoặccóítnhất2 con
z Tấtcả các nút nhánh củacây(trừ nút gốc) có từ m/2
đến m con
z Các nút lá có từ m/2 -1 đếnm-1 giátrị khóa trong đó.
z Đường đitừ nút gốctớimộtnútlábấtkỳđềucóđộ dài
như nhau
9
Các dạng cây khác trong tìm kiếm
42
16 20 58 76 81 93
11 14
17 18 19 24
21 22 23
45 52 63 65 74 78 79 85 87 94 97
B- Tree vớim = 5
Cây nhị phân tìm kiếmtối ưu
– Cây nhị phân tìm kiếmtối ưu:
z Là cây nhị phân tìm kiếm có tính đếntrường hợpcác

khóa khác nhau trong mộttậpcóxácsuấtxuấthiện
khác nhau
z Khóa xuấthiệnnhiều thì tìm nhanh hơn Ù đường đitừ
đỉnh đếnvị trí củakhóacóđộ dài ngắnhơn
z Khái niệm: Giá trị của cây T

=
=
n
i
ii
hpTC
1
*)(
10
Cây nhị phân tìm kiếmtối ưu
z Ví dụ: Cây nhị phân tìm kiếm ứng với3 khóak
1
< k
2
< k
3
vớixácsuấtp
1
= 1/7; p
2
= 2/7, p
3
= 4/7
k3

k2
k1
C = 1 * 1/7 + 2*2/7 + 3*4/7 = 17/7
k3
k2
k1
C= 1*2/7 + 2 * 1/7 + 2*4/7 =12/7
Cây nhị phân tìm kiếmtối ưu
z Cây nhị phân tìm kiếmtối ưu: Là cây nhị phân tìm kiếm
ứng vớidãykhóak
1
< k
2
< ….< k
n
có xác suấtxuấthiện
lầnlượtlàp
1
, p
2
, …., p
n
mà cây đócógiátrị nhỏ nhất
z Ví dụ: Cây nhị phân tìm kiếmtối ưu ứng với3 khóak
1
<
k
2
< k
3

vớixácsuấtp
1
= 1/7; p
2
= 2/7, p
3
= 4/7
k2
k1
k3
11
Cây nhị phân tìm kiếmtối ưu
– Bài toán xây dựng cây tối ưu
z Đầuvào: Dãykhóak
1
< k
2
< ….< k
n
có xác suấtxuất
hiệnlầnlượtlàp
1
, p
2
, …., p
n
z Đầura: Xácđịnh cây nhị phân tìm kiếmtối ưuxáclập
đượctrênn núttương ứng vớin khóađãcho
Cây nhị phân tìm kiếmtối ưu
z Nhậnxét

– Cây T là cây nhị phân tìm kiếmtối ưugồm n khóa , k
r

gốccủacây
ÆCây T
1,r-1
gồm r-1 khóa đầu tiên, cây T
r+1,n
gồm n-r khóa
cuối cùng đềuphảilàcâynhị phân tìm kiếmtối ưu
ÆMuốndựng đượcT, cầnphảidựng từ hai cây con củanó
12
Cây nhị phân tìm kiếmtối ưu
z Tính giá trị củamộtcâyT
i,j
dựa vào giá trị các cây con
z T
i,j
là cây tạodựng đượctừ các khóa k
i
< k
i+1
< … < k
j
z r trongcôngthứcchotaxácđịnh đượckhóanàolàgốc
củacây

=
+−
=



+
+
=
j
ik
kji
jrrijiji
pp
jriCCpC
,
,11,,,
)()]min[(
Cây nhị phân tìm kiếmtối ưu
– Xác định cây tối ưuvới 4 nút, cầnphảithựchiện tính toán
các giá trị theo sơđồsau
C(1,4)
C(1,3) C(2,4)
C(1,2) C(2,3) C(3,4)
13
Cây nhị phân tìm kiếmtối ưu
z Ví dụ: Dãy bao gồm 5 khóa, vớixácsuấtnhư sau
Cây nhị phân tìm kiếmtối ưu
z Các giá trị p
i,j
( i<= j) đượcxácđịnh và thể hiệntrongma
trậnsau
P[i,j]=
.010000

.31.3000
.54.53.2300
.76.75.45.220
1.99.69.46.24
14
Cây nhị phân tìm kiếmtối ưu
z Kếtquả các giá trị củacáccâytối ưu
C[i,j]=
.010000
.32.3000
.78.76.2300
1.31.27.67.220
21.991.16.68.24
Cây nhị phân tìm kiếmtối ưu
C[i,j]=
.010000
.32.3000
.2300
.67.220
.68.24
C[1,2]=P[1,2]+min
r=1, C[2,2] Å.22
r=2, C[1,1] Å .24
r=1
C[2,3]=P[2,3]+min
r=2, C[3,3] Å.23
r=3, C[2,2] Å .22
r=3
……
P[i,j]=

.010000
.31.3000
.54.53.2300
.76.75.45.220
1.99.69.46.24
C[4,5]=P[4,5]+min
r=4, C[5,5] Å.01
r=5, C[4,4] Å .3
r=4
1
2
3
2
4
5
15
Cây nhị phân tìm kiếmtối ưu
C[i,j]=
.010000
.32.3000
.76.2300
1.27.67.220
1.16.68.24
C[1,3]=P[1,3]+min
r=1, C[2,3] Å.67
r=2, C[1,1]+C[3,3] Å .47
r=3, C[1,2] Å.68
r=2
P[i,j]=
.010000

.31.3000
.54.53.2300
.76.75.45.220
1.99.69.46.24
C[2,4]=P[2,4]+min
r=2, C[3,4] Å.76
r=3, C[2,2]+C[4,4] Å .52
r=4, C[2,3] Å.67
r=3
2
1
3
3
2
4
Cây nhị phân tìm kiếmtối ưu
C[1,5]=P[1,5]+min
r=1, C[2,5] Å1.3
r=2, C[1,1]+C[3,5] Å 1.02
r=3, C[1,2]+C[4,5] Å1
r=4, C[1,3]+C[5,5] Å 1.17
r=5, C[1,4] Å1.99
r=3
3
1,2
4,5
Cây kếtquả
16
Tìm kiếmdựatrênbảng băm
z Tìm kiếm không dựatrênso sánhgiátrị khóa mà dựa

vào bảnthângiátrị khóa
z Sử dụng mộtqui tắcbiến đổithamchiếumộtgiátrị khóa
sang một địachỉ (tương đối) lưutrữ phầntử dữ liệu
Tìm kiếmdựatrênbảng băm
John Adams100
Ray Black007
Vu Nguyen005
Sarah Trapp002
Harry Lee001
Khóa
Địachỉ
Vu Nguyen 102002
John Adams 107095
Sarah Trapp 111060
Hàm băm
005
100
002
17
Tìm kiếmdựatrênbảng băm
– Hàm băm h(k) thường có độ phứctạplàO(1)
z h: U Æ {0, 1, , m-1}
z Mộtphầntử có khóa k sẽ được tham chiếuvàomộtô được
đánh chỉ số là h(k) có giá trị từ 0-> m-1 trong bảng bămkích
thướcm
z Khi sử dụng bảng băm để tìm kiếm, thay vì quan tâm đến|U|
giá trị, chúngtachỉ quan tâm đến m ô trong bảng
– Đụng độ
z Hiệntượng xảy ra khi hai hay nhiều khóa khác nhau sau khi
bămchocùngmộtgiátrịđịachỉ tương đối

z Hai phương pháp giảiquyết đụng độ
– Phương pháp móc xích
– Phương pháp địachỉ mở
Hàm băm
z Hàm bămtốtlàmộthàmbăm đơngiảnvàcóthể tính
toán đượctrongthờigianngắn
z Mụctiêucủahàmbămlàphânbổ mộttậpcácgiátrị
khóa mộtcáchngẫunhiênvàđềutrênmộttập các ô
trong bảng
18
Hàm băm
z h(k) = k mod m
– m = 12 and k=100 Æ h(k) = 4
– Cầnphảitránhsử dung mộtsố giá trị cho m
z m không nên là mộtsố dạng 2
p
– Thông thường, m đượcchọnlàmộtsố nguyên tố không quá
gầnvớimộtgiátrị 2
P
– Ví dụ: n=2000, ta chấpnhậnkiểmtra3 phầntử khi thực
hiệnviệc tìm kiếm, ta có thể chọnm =701
vì 701 là mộtsố nguyên tố gầnvới 2000/3
h(k)=k mod 701
Hàm băm
– h(k) = ⎣m*(k*A mod 1)⎦
– A là mộtgiátrị nằm trong khoảng 0-1. Theo Knuth đề xuất
– Nhân k vớiA, lấyphầnsaudấuphẩy
– Nhân phầnsaudấuphẩy đóvới m , rồilấyphần nguyên
z Ví dụ :k=123456,m=10000,A=0.618
h(k)=floor(10000*(123456*0.618… mod 1))

=floor(10000*(76300.004151 mod 1))
=floor(10000*0.0041
151… )=41.
(
)
6180339887.02/15 =−≈A
19
Hàm băm
z h(k) = số tạobởimộtsố chữ sốởgiữacủa bình
phương củakhóa
z Ví dụ: k = 9452
– 9452 * 9452 = 89340304 → 3403
z Nếukhóalớn, có thể chỉ dùng mộtphầncủa khóa khi
tính bình phương
379452: 379 * 379 = 143641 → 364
121267: 121 * 121 = 014641 → 464
045128: 045 * 045 = 002025 → 202
Hàm băm
– Sử dụng phương pháp phân đoạn
z Khóa được chia thành nhiều đoạn, thường có độ dài
bằng độ dài địachỉ
z Áp dụng mộtsố kỹ thuậttrêncácđoạn để xác định địa
chỉ
– Ví dụ: Khóa = 123|456|789
kỹ thuậttách kỹ thuậtgấp
123 + 456 + 789 = 1368 321 + 456 + 987 = 1764
⇒ 368 ⇒ 764
20
Giải quyết đụng độ
– Các kỹ thuậtgiảiquyết đụng độ

z Phương pháp móc xích: Mỗiphầntử trong bảng bămlà
một danh sách móc nốichứacácphầntử
z Phương pháp địachỉ mở : Tìm trong bảng bămtheomột
qui tắcnàođó để xác định một ô trống lưuphầntử mới
nếucóđụng độ xảyra
– Thử tuyến tính
– Bămlại
Giải quyết đụng độ -Phương pháp móc xích
21
Giải quyết đụng độ -Phương pháp địachỉ mở
– Thử tuyến tính (Linear Probing)
z Nếucómộtbảnghimàđịachỉ bămtương ứng vớigiá
trị khóa đãbị chiếm, tìm mộtvítrítrống gầnnhất để lưu
trữ nó bằng cách duyệttuầntự các vị trí kế tiếp
z H(k,i) = (h’(k) + i ) mod m
– i nhậngiátrị từ 0 đến m-1 , thể hiệnsố lầnphảidịch
chuyển để xác định vị trí kế tiếp
Giải quyết đụng độ -Phương pháp địachỉ
mở
– h(k, i ) = (k mod 11 + i ) mod 11
22
Giải quyết đụng độ -Phương pháp địachỉ
mở
– Bămlại ( Double Hashing)
h(k,i) = (h
1
(k) + i*h
2
(k)) mod m (i = 0, 1,…, m-1)
z Thông thường m đượcchọnlàsố nguyên tố

z h
1 =
k mod m ; h
2
= 1+ k mod m’ vớim’< m vàm’rấtgầnvới
m
Giải quyết đụng độ -Phương pháp địachỉ
mở
– h(k,i) = (k mod 11 + i (1+k mod 9)) mod 11
23
Tìm kiếm xâu mẫu
z Bài toán
– Xâu
z Một dãy ký tự lấytừ mộtbảng chữ cái
z Ký hiệu T[i,j] là một xâu con củaT bắt đầutừ vị trí i kếtthúctại
vị trí j
– Thao tác đẩy
z Cho 2 xâu T
1
, T
2
có độ dài m, n vớim <= n
z T
1
xuấthiệnnhờđẩy đếnvị trí s trong T
2
nếuT
1
[0, m] = T
2

[s,
s+m]
– Vị trí khớp
z Cho 2 xâu T
1
, T
2
có độ dài m, n vớim <= n
z NếuT
1
xuấthiệnnhờđẩy đếnvị trí s trong T
2
thì s đượcgọilà
vị trí khớpcủaT
1
trong T
2
Tìm kiếm xâu mẫu
z Bài toán
– Tìm kiếmxâumẫu là tìm tấtcả các vị trí khớpcủamộtxâu
mẫu P trong mộtvănbảnT
z P có độ dài m, T có độ dài n
z T: “the rain in spain stays mainly on the plain”
z P: “ain ”
z
Ứng dụng
– Trong tìm kiếm thông tin
– Soạnthảovănbản
– Xử lý dữ liệusinhhọc(ADN)
24

Giảithuật đơngiản (Brute-Force alg.)
z Ý tưởng:
– So khớpmẫuvớivăn
bảnbằng cách so
khớplầnlượttừng ký
tự trong mẫutừ trái
sang phải
– Khi có mộtvị trí không
khớp đượcxácđịnh,
đẩytoànbộ mẫu sang
phải1 vị trí và tiếptục
so khớpvớivănbản
theo cách thức trên
z Độ phứctạpcủagiải
thuậttrongtrường hợp
xấunhấtO(m*n)
Algorithm Naive(T, P)
for s = 0 to n-m do
begin
j = 0;
while ( j< m && T[s+j] = P[j]) do j++;
if j = m then output(s) ;
end
Giảithuật đơngiản (Brute-Force alg.)
Khớp1000
1000


Khớp1000
1000

1000
1000
Khớp1000
1000
100010100010000
T
P
25
Giảithuật đơngiản
– Trường hợptồinhất
z T = aaaaaaaaa aaaab ( n ký tự)
z P = aa aab ( m-1 ký tự a và 1 ký tự b)
z Vị trí không khớpluônđượcxácđịnh sau m lầnso khớp
z Sự không khớpxảyran-mlần
z Vị trí khớpxácđịnh tạin-m+1
z Số các phép so sánh m*(n-m+1)
Giảithuật Knuth-Morris-Pratt (KMP)
– GiảithuậtKMP so khớpmẫuvớivănbảntừ trái
sang phảitheocơ chế giống giảithuật đơngiản
– Giảithuật KMP xác định phép đẩy thông minh
hơngiảithuậtcơ bản.

×