Lu t này đậ ược ch ng minh nh sau... Sau đây chúng ta sẽ đánh giá th i gian trung bình cho các phép toán tờ ừđi n... Smith đã giành gi i thả ưởng Nobel vào năm 1978.
Trang 1PHÂN TÍCH THU T TOÁN Ậ
15.1 THU T TOÁN VÀ CÁC V N Đ LIÊN QUAN Ậ Ấ Ề
15.2 TÍNH HI U QU C A THU T TOÁN Ệ Ả Ủ Ậ
15.3 KÝ HI U Ô L N VÀ BI U DI N TH I GIAN CH Y B I Ệ Ớ Ể Ễ Ờ Ạ Ở
KÝ HI U Ô L N Ệ Ớ
15.4 ĐÁNH GIÁ TH I GIAN CH Y C A THU T TOÁN Ờ Ạ Ủ Ậ
V i m t v n đ đ t ra có th có nhi u thu t toán gi i, ch ng h nớ ộ ấ ề ặ ể ề ậ ả ẳ ạ
người ta đã tìm ra r t nhi u thu t toán s p x p m t m ng d li u (chúngấ ề ậ ắ ế ộ ả ữ ệ
ta sẽ nghiên c u các thu t toán s p x p này trong chứ ậ ắ ế ương 17) Trong các
trường h p nh th , khi c n s d ng thu t toán ngợ ư ế ầ ử ụ ậ ười ta thường ch nọthu t toán có th i gian th c hi n ít h n các thu t toán khác M t khác, khiậ ờ ự ệ ơ ậ ặ
b n đ a ra m t thu t toán đ gi i quy t m t v n đ thì m t câu h i đ tạ ư ộ ậ ể ả ế ộ ấ ề ộ ỏ ặ
ra là thu t toán đó có ý nghĩa th c t không? N u thu t toán đó có th iậ ự ế ế ậ ờgian th c hi n quá l n ch ng h n hàng năm, hàng th k thì đự ệ ớ ẳ ạ ế ỷ ương nhiênkhông th áp d ng thu t toán này trong th c t Nh v y chúng ta c nể ụ ậ ự ế ư ậ ầđánh giá th i gian th c hi n thu t toán Phân tích thu t toán, đánh giá th iờ ự ệ ậ ậ ờgian ch y c a thu t toán là m t lĩnh v c nghiên c u quan trong c a khoaạ ủ ậ ộ ự ứ ủ
h c máy tính Trong chọ ương này, chúng ta sẽ nghiên c u phứ ương phápđánh giá th i gian ch y c a thu t toán b ng cách s d ng ký hi u ô l n, vàờ ạ ủ ậ ằ ử ụ ệ ớ
ch ra cách đánh gía th i gian ch y thu t toán b ng ký hi u ô l n Trỉ ờ ạ ậ ằ ệ ớ ướckhi đi t i m c tiêu trên, chúng ta sẽ th o lu n ng n g n m t s v n đ liênớ ụ ả ậ ắ ọ ộ ố ấ ềquan đ n thu t toán và tính hi u qu c a thu t toán.ế ậ ệ ả ủ ậ
15.1 THU T TOÁN VÀ CÁC V N Đ LIÊN QUAN Ậ Ấ Ề
Thu t toán đậ ược hi u là s đ c t chính xác m t dãy các bể ự ặ ả ộ ước có thể
th c hi n đự ệ ược m t cách máy móc đ gi i quy t m t v n đ C n nh nộ ể ả ế ộ ấ ề ầ ấ
m nh r ng, m i thu t toán có m t d li u vào (Input) và m t d li u raạ ằ ỗ ậ ộ ữ ệ ộ ữ ệ(Output); khi th c hi n thu t toán (th c hi n các bự ệ ậ ự ệ ước đã mô t ), thu tả ậtoán c n cho ra các d li u ra tầ ữ ệ ương ng v i các d li u vào.ứ ớ ữ ệ
Bi u di n thu t toán Đ đ m b o tính chính xác, ch có th hi uể ễ ậ ể ả ả ỉ ể ể
m t cách duy nh t, th ât toán c n độ ấ ụ ầ ược mô t trong m t ngôn ng l pả ộ ữ ậtrình thành m t chộ ương trình (ho c m t hàm, m t th t c), t c là thu tặ ộ ộ ủ ụ ứ ậtoán c n đầ ược mô t dả ướ ại d ng mã (code) Tuy nhiên, khi trình bày m tộthu t toán đ cho ng n g n nh ng v n đ m b o đ chính xác, ngậ ể ắ ọ ư ẫ ả ả ủ ười ta
thường bi u di n thu t toán dể ễ ậ ướ ại d ng gi mã (pseudo code) Trong cáchả
bi u di n này, ngể ễ ười ta s d ng các câu l nh trong m t ngôn ng l p trìnhử ụ ệ ộ ữ ậ(pascal ho c C++) và c các ký hi u toán h c, các m nh đ trong ngôn ngặ ả ệ ọ ệ ề ữ
Trang 2t nhiên (ti ng Anh ho c ti ng Vi t ch ng h n) T t c các thu t toánự ế ặ ế ệ ẳ ạ ấ ả ậ
được đ a ra trong sách này đ u đư ề ược trình bày theo cách này Trong m tộ
s trố ường h p, đ ngợ ể ườ ọi đ c hi u để ược ý tưởng khái quát c a thu t toán,ủ ậ
người ta có th bi u di n thu t toán dể ể ễ ậ ướ ại d ng s đ (thơ ồ ường được g i làọ
s đ kh i).ơ ồ ố
Tính đúng đ n (correctness) c a thu t toán Đòi h i tru c h t đ iắ ủ ậ ỏ ớ ế ố
v i thu t toán là nó ph i đúng đ n, t c là khi th c hi n nó ph i cho ra cácớ ậ ả ắ ứ ự ệ ả
d li u mà ta mong mu n tữ ệ ố ương ng v i các d li u vào Ch ng h n n uứ ớ ữ ệ ẳ ạ ếthu t toán đậ ược thi t k đ tìm ế ế ể ước chung l n nh t c a 2 s nguyênớ ấ ủ ố
dương, thì khi đ a vào 2 s nguyên dư ố ương (d li u vào) và th c hi n thu tữ ệ ự ệ ậtoán ph i cho ra m t s nguyên dả ộ ố ương (d li u ra) là ữ ệ ước chung l n nh tớ ấ
Ch ng minh m t cách ch t chẽ (b ng toán h c) tính đúng đ n c a thu tứ ộ ặ ằ ọ ắ ủ ậtoán là m t công vi c r t khó khăn Tuy nhiên đ i v i ph n l n các thu tộ ệ ấ ố ớ ầ ớ ậtoán được trình bày trong sách này, chúng ta có th th y (b ng cách l pể ấ ằ ậ
lu n không hoàn toàn ch t chẽ) các thu t toán đó là đúng đ n, và do đóậ ặ ậ ắchúng ta không đ a ra ch ng minh ch t chẽ b ng toán h c M t tính ch tư ứ ặ ằ ọ ộ ấquan trong khác c a thu t toán là tính hi u qu (efficiency), chúng ta sẽủ ậ ệ ả
th o lu n v tính hi u qu c a thu t toán trong m c ti p theo.ả ậ ề ệ ả ủ ậ ụ ế
Đ n đây chúng ta có th đ t câu h i: có ph i đ i v i b t kỳ v n đế ể ặ ỏ ả ố ớ ấ ấ ềnào cũng có thu t toán gi i (có th tìm ra l i gi i b ng thu t toán)? câuậ ả ể ờ ả ằ ậ
tr l i là không Ngả ờ ười ta đã phát hi n ra m t s v n đ không th đ a raệ ộ ố ấ ề ể ưthu t toán đ gi i quy t nó Các v n đ đó đậ ể ả ế ấ ề ược g i là các v n đ khôngọ ấ ề
gi i đả ược b ng thu t toán.ằ ậ
15.2 TÍNH HI U QU C A THU T TOÁN Ệ Ả Ủ Ậ
Người ta thường xem xét thu t toán, l a ch n thu t toán đ áp d ngậ ự ọ ậ ể ụ
d a vào các tiêu chí sau:ự
1 Thu t toán đ n gi n, d hi u.ậ ơ ả ễ ể
2 Thu t toán d cài đ t (d vi t chậ ễ ặ ễ ế ương trình)
3 Thu t toán c n ít b nhậ ầ ộ ớ
4 Thu t toán ch y nhanhậ ạ
Khi cài đ t thu t toán ch đ s d ng m t s ít l n, ngặ ậ ỉ ể ử ụ ộ ố ầ ười ta thường
l a ch n thu t toán theo tiêu chí 1 và 2 Tuy nhiên, có nh ng thu t toánự ọ ậ ữ ậ
được s d ng r t nhi u l n, trong nhi u chử ụ ấ ề ầ ề ương trình, ch ng h n cácẳ ạthu t toán s p x p, các thu t toán tìm ki m, các thu t toán đ th … Trongậ ắ ế ậ ế ậ ồ ịcác trường h p nh th ngợ ư ế ười ta l a ch n thu t toán đ s d ng theo tiêuự ọ ậ ể ử ụchí 3 và 4 Hai tiêu chí này được nói t i nh là tính hi u qu c a thu tớ ư ệ ả ủ ậtoán Tính hi u qu c a thu t toán g m hai y u t : dung lệ ả ủ ậ ồ ế ố ượng b nh màộ ớ
Trang 3thu t toánậ đòi h i và th i gian th c hi n thu t toán Dung lỏ ờ ự ệ ậ ượng b nhộ ớ
g m b nh dùng đ l u d li u vào, d li u ra, và các k t qu trung gianồ ộ ớ ể ư ữ ệ ữ ệ ế ảkhi th c hi n thu t toán; dung lự ệ ậ ượng b nh mà thu t toán đòi h i cònộ ớ ậ ỏ
được g i là đ ph c t p không gian c a thu t toán Th i gian th c hi nọ ộ ứ ạ ủ ậ ờ ự ệthu t toán đậ ược nói t i nh là th i gian ch y (running time) ho c đ ph cớ ư ờ ạ ặ ộ ứ
t p th i gian c a thu t toán Sau này chúng ta ch quan tâm t i đánh giáạ ờ ủ ậ ỉ ớ
th i gian ch y c a thu t toán.ờ ạ ủ ậ
Đánh giá th i gian ch y c a thu t toán b ng cách nào? V i cách ti pờ ạ ủ ậ ằ ớ ế
c n th c nghi m chúng ta có th cài đ t thu t toán và cho ch y chậ ự ệ ể ặ ậ ạ ươngtrình trên m t máy tính nào đó v i m t s d li u vào Th i gian ch y màộ ớ ộ ố ữ ệ ờ ạ
ta thu được sẽ ph thu c vào nhi u nhân t :ụ ộ ề ố
• Kỹ năng c a ngủ ườ ậi l p trình
• Chương trình d chị
• T c đ th c hi n các phép toán c a máy tínhố ộ ự ệ ủ
• D li u vàoữ ệ
Vì v y, trong cách ti p c n th c nghi m, ta không th nói th i gianậ ế ậ ự ệ ể ờ
ch y c a thu t toán là bao nhiêu đ n v th i gian Ch ng h n câu nói “th iạ ủ ậ ơ ị ờ ẳ ạ ờgian ch y c a thu t toán là 30 giây” là không th ch p nh n đạ ủ ậ ể ấ ậ ược N u cóếhai thu t toán A và B gi i quy t cùng m t v n đ , ta cũng không th dùngậ ả ế ộ ấ ề ể
phương pháp th c nghi m đ k t lu n thu t toán nào ch y nhanh h n,ự ệ ể ế ậ ậ ạ ơ
b i vì ta m i ch ch y chở ớ ỉ ạ ương trình v i m t s d li u vào.ớ ộ ố ữ ệ
M t cách ti p c n khác đ đánh giá th i gian ch y c a thu t toán làộ ế ậ ể ờ ạ ủ ậ
phương pháp phân tích s d ng các công c toán h c Chúng ta mongử ụ ụ ọ
mu n có k t lu n v th i gian ch y c a m t thu t toán mà nó không phố ế ậ ề ờ ạ ủ ộ ậ ụthu c vào s cài đ t c a thu t toán, không ph thu c vào máy tính mà trênộ ự ặ ủ ậ ụ ộ
đó thu t toán đậ ược th c hi n.ự ệ
Đ phân tích thu t toán chúng ta c n s d ng khái ni m c (size)ể ậ ầ ử ụ ệ ỡ
c a d li u vào C c a d li u vào đủ ữ ệ ỡ ủ ữ ệ ược xác đ nh ph thu c vào t ngị ụ ộ ừthu t toán Ví d , trong thu t toán tính đ nh th c c a ma tr n vuông c p n,ậ ụ ậ ị ứ ủ ậ ấ
ta có th ch n c c a d li u vào là c p n c a ma tr n; còn đ i v i thu tể ọ ỡ ủ ữ ệ ấ ủ ậ ố ớ ậtoán s p x p m ng c n thì c c a d li u vào chính là c n c a m ng.ắ ế ả ỡ ỡ ủ ữ ệ ỡ ủ ả
Đương nhiên là có vô s d li u vào cùng m t c Nói chung trong ph nố ữ ệ ộ ỡ ầ
l n các thu t toán, c c a d li u vào là m t s nguyên dớ ậ ỡ ủ ữ ệ ộ ố ương n Th i gianờ
ch y c a thu tạ ủ ậ toán ph thu c vào c c a d li u vào; ch ng h n tínhụ ộ ỡ ủ ữ ệ ẳ ạ
đ nh th c c a ma tr n c p 20 đòi h i th i gian ch y nhi u h n tính đ nhị ứ ủ ậ ấ ỏ ờ ạ ề ơ ị
th c c a ma tr n c p 10.ứ ủ ậ ấ Nói chung, c c a d li u càng l n thì th i gianỡ ủ ữ ệ ớ ờ
th c hi n thu t toán càng l n Nh ng th i gian th c hi n thu t toán khôngự ệ ậ ớ ư ờ ự ệ ậ
ch ph thu c vào c c a d li u vào mà còn ph thu c vào chính d li uỉ ụ ộ ỡ ủ ữ ệ ụ ộ ữ ệ
Trang 4vào Trong s các d li u vào cùng m t c , th i gian ch y c a thu t toánố ữ ệ ộ ỡ ờ ạ ủ ậcũng thay đ i Ch ng h n, xét bài toán tìm xem đ i tổ ẳ ạ ố ượng a có m t trongặdanh sách (a 1,… , a i,…, a n ) hay không Thu t toán đậ ược s d ng là thu tử ụ ậtoán tìm ki m tu n t : Xem xét l n lế ầ ự ầ ượ ừt t ng ph n t c a danh sách choầ ử ủ
t i khi phát hi n ra đ i tớ ệ ố ượng c n tìm thì d ng l i, ho c đi h t danh sáchầ ừ ạ ặ ế
mà không g p ph n t nào b ng a đây c c a d li u vào là n, n u m tặ ầ ử ằ Ở ỡ ủ ữ ệ ế ộdanh sách v i a là ph n t đ u tiên, ta ch c n m t l n so sánh và đây làớ ầ ử ầ ỉ ầ ộ ầ
trường h p t t nh t, nh ng n u m t danh sách mà a xu t hi n v tríợ ố ấ ư ế ộ ấ ệ ở ị
cu i cùng ho c a không có trong danh sách, ta c n n l n so sánh a v i t ngố ặ ầ ầ ớ ừ
a i (i=1,2,…,n), trường h p này là trợ ường h p x u nh t Vì v y, chúng taợ ấ ấ ậ
c n đ a vào khái ni m th i gian ch y trong trầ ư ệ ờ ạ ường h p x u nh t và th iợ ấ ấ ờgian ch y trung bình.ạ
Th i gian ch y trong trờ ạ ường h p x u nh t (worst-case runningợ ấ ấtime) c a m t thu t toán là th i gian ch y l n nh t c a thu t toán đó trênủ ộ ậ ờ ạ ớ ấ ủ ậ
t t c các d li u vào cùng c Chúng ta sẽ ký hi u th i gian ch y trongấ ả ữ ệ ỡ ệ ờ ạ
trường h p x u nh t là T(n), trong đó n là c c a d li u vào Sau này khiợ ấ ấ ỡ ủ ữ ệnói t i th i gian ch y c a thu t toán chúng ta c n hi u đó là th i gianớ ờ ạ ủ ậ ầ ể ờ
ch y trong trạ ường h p x u nh t S d ng th i gian ch y trong trợ ấ ấ ử ụ ờ ạ ường h pợ
x u nh t đ bi u th th i gian ch y c a thu t toán có nhi u u đi m.ấ ấ ể ể ị ờ ạ ủ ậ ề ư ể
Trước h t, nó đ mế ả b o r ng, thu t toán không khi nào tiêu t n nhi u th iả ằ ậ ố ề ờgian h n th i gian ch y đó H n n a, trong các áp d ng, trơ ờ ạ ơ ữ ụ ường h p x uợ ấ
nh t cũng thấ ường xuyên x y ra.ả
Chúng ta xác đ nh th i gian ch y trung bình (average running time)ị ờ ạ
c a thu t toán là s trung bình c ng c a th i gian ch y c a thu t toán đóủ ậ ố ộ ủ ờ ạ ủ ậtrên t t c các d li u vào cùng c n Th i gian ch y trung bình c a thu tấ ả ữ ệ ỡ ờ ạ ủ ậtoán sẽ được ký hi u là T tb (n) Đánh giá th i gian ch y trung bình c aệ ờ ạ ủthu t toán là công vi c r t khó khăn, c n ph i s d ng các công c c a xácậ ệ ấ ầ ả ử ụ ụ ủ
su t, th ng kê và c n ph i bi t đấ ố ầ ả ế ược phân ph i xác su t c a các d li uố ấ ủ ữ ệvào R t khó bi t đấ ế ược phân ph i xác su t c a các d li u vào Các phânố ấ ủ ữ ệtích thường ph i d a trên gi thi t các d li u vào có phân ph i xác su tả ự ả ế ữ ệ ố ấ
đ u Do đó, sau này ít khi ta đánh giá th i gian ch y trung bình.ề ờ ạ
Đ có th phân tích đ a ra k t lu n v th i gian ch y c a thu t toánể ể ư ế ậ ề ờ ạ ủ ậ
đ c l p v i s cài đ t thu t toán trong m t ngôn ng l p trình, đ c l p v iộ ậ ớ ự ặ ậ ộ ữ ậ ộ ậ ớmáy tính đượ ử ục s d ng đ th c hi n thu t toán, chúng ta đo th i gian ch yể ự ệ ậ ờ ạ
c a thu t toán b i s phép toán s c p c n ph i th c hi n khi ta th củ ậ ở ố ơ ấ ầ ả ự ệ ự
hi n thu t toán C n chú ý r ng, các phép toán s c p là các phép toán sệ ậ ầ ằ ơ ấ ố
h c, các phép toán logic, các phép toán so sánh,…, nói chung, các phép toánọ
s c p c n đơ ấ ầ ược hi u là các phép toán mà khi th c hi n ch đòi h i m tể ự ệ ỉ ỏ ộ
th i gian c đ nh nào đó (th i gian này nhi u hay ít là ph thu c vào t cờ ố ị ờ ề ụ ộ ố
đ c a máy tính) Nh v y chúng ta xác đ nh th i gian ch y T(n) là s phépộ ủ ư ậ ị ờ ạ ố
Trang 5toán s c p mà thu t toán đòi h i, khi th c hi n thu t toán trên d li uơ ấ ậ ỏ ự ệ ậ ữ ệvào c n.ỡ
Tính ra bi u th c mô t hàm T(n) để ứ ả ược xác đ nh nh trên là khôngị ư
đ n gi n, và bi u th c thu đơ ả ể ứ ược có th r t ph c t p Do đó, chúng ta sẽ chể ấ ứ ạ ỉquan tâm t i t c đ tăng (rate of growth) c a hàm T(n), t c là t c đ tăngớ ố ộ ủ ứ ố ộ
c a th i gian ch y khi c d li u vào tăng Ví d , gi s th i gian ch y c aủ ờ ạ ỡ ữ ệ ụ ả ử ờ ạ ủthu t toán là T(n) = 3nậ 2 + 7n + 5 (phép toán s c p) Khi c n tăng, h ngơ ấ ỡ ạ
đ nh t c đ tăng c a hàm T(n), nên ta có th b qua các h ng th c khác vàị ố ộ ủ ể ỏ ạ ứ
có th nói r ng th i gian ch y c a thu t toán t l v i bình phể ằ ờ ạ ủ ậ ỉ ệ ớ ương c a củ ỡ
d li u vào Trong m c ti p theo chúng ta sẽ đ nh nghĩa ký hi u ô l n và sữ ệ ụ ế ị ệ ớ ử
d ng ký hi u ô l n đ bi u di n th i gian ch y c a thu t toán.ụ ệ ớ ể ể ễ ờ ạ ủ ậ
v i m i n >= nớ ọ 0
Nh v y, f(n) = O(g(n)) có nghĩa là hàm f(n) b ch n trên b i hàmư ậ ị ặ ởg(n) v i m t nhân t h ng nào đó khi n đ l n Mu n ch ng minh đớ ộ ử ằ ủ ớ ố ứ ượcf(n) = O(g(n)), chúng ta c n ch ra nhân t h ng c , s nguyên dầ ỉ ử ằ ố ương n 0 và
ch ng minh đứ ược f(n) <= cg(n) v i m i n >= nớ ọ o
Ví d Gi s f(n) = 5nụ ả ử 3 + 2n 2 + 13n + 6 , ta có: f(n) = 5n 3 + 2n 2 + 13n+ 6 <= 5n 3 + 2n 3 + 13n 3 + 6n 3 = 26n 3
Trang 6• N u f(n) = O(g(n)) thì f(n) = O(d.g(n)), trong đó d là h ng s dế ằ ố ương
có vô s hàm là c n trên (v i m t nhân t h ng nào đó) c a hàm f(n).ố ậ ớ ộ ử ằ ủ
M t nh n xét quan tr ng n a là, ký hi u O(g(n)) xác đ nh m t t pộ ậ ọ ữ ệ ị ộ ậ
h p vô h n các hàm b ch n trên b i hàm g(n), cho nên ta vi t f(n) =ợ ạ ị ặ ở ếO(g(n)) ch có nghĩa f(n) là m t trong các hàm đó.ỉ ộ
15.3.2 Bi u di n th i gian ch y c a thu t toán ể ễ ờ ạ ủ ậ
Th i gian ch y c a thu t toán là m t hàm c a c d li u vào: hàmờ ạ ủ ậ ộ ủ ỡ ữ ệT(n) Chúng ta sẽ bi u di n th i gian ch y c a thu t toán b i ký hi u ôể ễ ờ ạ ủ ậ ở ệ
l n: T(n) = O(f(n)), bi u di n này có nghĩa là th i gian ch y T(n) b ch nớ ể ễ ờ ạ ị ặtrên b i hàm f(n) Th nh ng nh ta đã nh n xét, m t hàm có vô s c nở ế ư ư ậ ộ ố ậtrên Trong s các c n trên c a th i gian ch y, chúng ta sẽ l y c n trênố ậ ủ ờ ạ ấ ậ
ch t (tight bound) đ bi u di n th i gian ch y c a thu t toán.ặ ể ể ễ ờ ạ ủ ậ
Đ nh nghĩa Ta nói f(n) là c n trên ch t c a T(n) n uị ậ ặ ủ ế
• T(n) = O(f(n)), và
• N u T(n) = O(g(n)) thì f(n) = O(g(n)).ế
Nói m t cách khác, f(n) là c n trên ch t c a T(n) n u nó là c n trênộ ậ ặ ủ ế ậ
c a T(n) và ta không th tìm đủ ể ược m t hàm g(n) là c n trên c a T(n) màộ ậ ủ
th i gian ch y h ng N u T(n) = O(n), thì th i gian ch y c a thu t toán bờ ạ ằ ế ờ ạ ủ ậ ị
ch n trên b i hàm tuy n tính, và do đó ta nói th i gian ch y c a thu t toánặ ở ế ờ ạ ủ ậ
là tuy n tính Các c p đ th i gian ch y c a thu t toán và tên g i c aế ấ ộ ờ ạ ủ ậ ọ ủchúng được li t kê trong b ng sau:ệ ả
Đ i v i m t thu t toán, chúng ta sẽ đánh giá th i gian ch y c a nóố ớ ộ ậ ờ ạ ủthu c c p đ nào trong các c p đ đã li t kê trên Trong b ng trên, chúngộ ấ ộ ấ ộ ệ ả
ta đã s p x p các c p đ th i gian ch y theo th t tăng d n, ch ng h nắ ế ấ ộ ờ ạ ứ ự ầ ẳ ạthu t toán có th i gian ch y là O(logn) ch y nhanh h n thu t toán có th iậ ờ ạ ạ ơ ậ ờgian ch y là O(n), Các thu t toán có th i gian ch y là O(nạ ậ ờ ạ k ), v i k =ớ
Trang 71,2,3, , được g i là các thu t toán th i gian ch y đa th c (polynimial-timeọ ậ ờ ạ ứalgorithm) Đ so sánh th i gian ch y c a các thu t toán th i gian đa th cể ờ ạ ủ ậ ờ ứ
và các thu t toán th i gian mũ, chúng ta hãy xem xét b ng sau:ậ ờ ả
Trong b ng trên, ta gi thi t r ng m i phép toán s c p c n 1 microả ả ế ằ ỗ ơ ấ ầgiây đ th c hi n Thu t toán có th i gian ch y nể ự ệ ậ ờ ạ 2 , v i c d li u vào n =ớ ỡ ữ ệ
20, nó đòi h i th i gian ch y là 20ỏ ờ ạ 2 x10 -6 = 0,004 giây Đ i v i các thu tố ớ ậtoán th i gian mũ, ta th y r ng th i gian ch y c a thu t toán là ch p nh nờ ấ ằ ờ ạ ủ ậ ấ ậ
được ch v i các d li u vào có c r t khiêm t n, n < 30; khi c d li u vàoỉ ớ ữ ệ ỡ ấ ố ỡ ữ ệtăng, th i gian ch y c a thu t toán tăng lên r t nhanh và tr thành con sờ ạ ủ ậ ấ ở ố
kh ng l Ch ng h n, thu t toán v i th i gian ch y 3ổ ồ ẳ ạ ậ ớ ờ ạ n , đ tính ra k t quể ế ả
v i d li u vào c 60, nó đòi h i th i gian là 1,3x10ớ ữ ệ ỡ ỏ ờ 13 th k ! Đ th y conế ỷ ể ấ
s này kh ng l đ n m c nào, ta hãy liên tố ổ ồ ế ứ ưởng t i v n “big-bang”, “big-ớ ụ ổbang” đượ ước c tính là x y ra cách đây 1,5x10ả 8 th k Chúng ta không hyế ỷ
v ng có th áp d ng các thu t toán có th i gian ch y mũ trong tọ ể ụ ậ ờ ạ ương lai
nh tăng t c đ máy tính, b i vì không th tăng t c đ máy tính lên mãiờ ố ộ ở ể ố ộ
được, do s h n chự ạ ế c a các quy lu t v t lý Vì v y nghiên c u tìm ra cácủ ậ ậ ậ ứthu t toán hi u qu (ch y nhanh) cho các v n đ có nhi u ng d ng trongậ ệ ả ạ ấ ề ề ứ ụ
th c ti n luôn luôn là s mong mu n c a các nhà tin h c.ự ễ ự ố ủ ọ
15.4 ĐÁNH GIÁ TH I GIAN CH Y C A THU T TOÁN Ờ Ạ Ủ Ậ
M c này trình bày các kỹ thu t đ đánh giá th i gian ch y c a thu tụ ậ ể ờ ạ ủ ậtoán b i ký hi u ô l n C n l u ý r ng, đánh giá th i gian ch y c a thu tở ệ ớ ầ ư ằ ờ ạ ủ ậtoán là công vi c r t khó khăn, đ c bi t là đ i v i các thu t toán đ quy.ệ ấ ặ ệ ố ớ ậ ệTuy nhiên các kỹ thu t đ a ra trong m c này cho phép đanh giá đậ ư ụ ược th iờgian ch y c a h u h t các thu t toán mà ta g p trong th c t Trạ ủ ầ ế ậ ặ ự ế ước h tếchúng ta c n bi t cách thao tác trên các ký hi u ô l n Quy t c “c ng các kýầ ế ệ ớ ắ ộ
hi u ô l n” sau đây đệ ớ ượ ử ục s d ng thường xuyên nh t.ấ
15.4.1 Lu t t ng ậ ổ
Gi s thu t toán g m hai ph n (ho c nhi u ph n), th i gian ch yả ử ậ ồ ầ ặ ề ầ ờ ạ
c a ph n đ u là Tủ ầ ầ 1 (n), ph n sau là Tầ 2 (n) Khi đó th i gian ch y c a thu tờ ạ ủ ậtoán là T 1 (n) + T 2 (n) sẽ được suy ra t s đánh giá c a Từ ự ủ 1 (n) và T 2 (n)theo lu t sau:ậ
Lu t t ng Gi s Tậ ổ ả ử 1 (n) = O(f(n)) và T 2 (n) = O(g(n)) N u hàm f(n)ếtăng nhanh h n hàm g(n), t c là g(n) = O(f(n)), thì Tơ ứ 1 (n) + T 2 (n) = O(f(n))
Lu t này đậ ược ch ng minh nh sau Theo đ nh nghĩa ký hi u ô l n, ta tìmứ ư ị ệ ớ
được các h ng s cằ ố 1 , c 2 , c 3 và n 1 , n 2 , n 3 sao cho
Trang 8Ví d Gi s thu t toán g m ba ph n, th i gian ch y c a t ng ph nụ ả ử ậ ồ ầ ờ ạ ủ ừ ầ
được đánh giá là T 1 (n) = O(nlogn), T 2 (n) = O(n 2 ) và T 3 (n) = O(n) Khi đó
th i gian ch y c a toàn b thu t toán là T(n) = Tờ ạ ủ ộ ậ 1 (n) + T 2 (n) + T 3 (n) =O(n 2 ), vì hàm n 2 tăng nhanh h n các hàm nlogn và n.ơ
15.4.2 Th i gian ch y c a các l nh ờ ạ ủ ệ
Các thu t toán đậ ược đ a ra trong sách này sẽ đư ược trình bày dưới
d ng gi mã s d ng các câu l nh trong C/C++ D a vào lu t t ng, đánhạ ả ử ụ ệ ự ậ ổgiá th i gian ch y c a thu t toán đờ ạ ủ ậ ược quy v đánh giá th i gian ch y c aề ờ ạ ủ
Th i gian ch y c a l nh gán là th i gian th c hi n bi u th c Trờ ạ ủ ệ ờ ự ệ ể ứ ường
h p hay g p nh t là bi u th c ch ch a các phép toán s c p, và th i gianợ ặ ấ ể ứ ỉ ứ ơ ấ ờ
Trong đó, đi u ki n là m t bi u th c c n đề ệ ộ ể ứ ầ ược đánh giá, n u đi uế ề
ki n đúng thì l nh 1 đệ ệ ược th c hi n, n u không thì l nh 2 đự ệ ế ệ ược th c hi n.ự ệ
Gi s th i gian đánh giá đi u ki n là Tả ử ờ ề ệ 0 (n), th i gian th c hi n l nh 1 làờ ự ệ ệ
T 1 (n), th i gian th c hi n l nh 2 là Tờ ự ệ ệ 2 (n) Th i gian th c hi n l nh l aờ ự ệ ệ ự
ch n if-else sẽ là th i gian l n nh t trong các th i gian Tọ ờ ớ ấ ờ 0 (n) + T 1 (n) và
Trường h p hay g p là ki m tra đi u ki n ch c n O(1) Khi đó n u Tợ ặ ể ề ệ ỉ ầ ế 1 (n)
= O(f(n)), T 2 (n) = O(g(n)) và f(n) tăng nhanh h n g(n) thì th i gian ch yơ ờ ạ
c a l nh if-else là O(f(n)); còn n u g(n) tăng nhanh h n f(n) thì l nh if-elseủ ệ ế ơ ệ
c n th i gian O(g(n)).ầ ờ
Th i gian ch y c a l nh l a ch n switch đờ ạ ủ ệ ự ọ ược đánh giá tương tự
nh l nh if-else, ch c n l u ý r ng, l nh if-else có hai kh năng l a ch n,ư ệ ỉ ầ ư ằ ệ ả ự ọcòn l nh switch có th có nhi u h n hai kh năng l a ch n.ệ ể ề ơ ả ự ọ
3 Các l nh l p ệ ặ
Các l nh l p: for, while, do-whileệ ặ
Đ đánh giá th i gian th c hi n m t l nh l p, trể ờ ự ệ ộ ệ ặ ước h t ta c n đánhế ầgiá s t i đa các l n l p, gi s đó là L(n) Sau đó đánh giá th i gian ch yố ố ầ ặ ả ử ờ ạ
c a m i l n l p, chú ý r ng th i gian th c hi n thân c a m t l nh l p ủ ỗ ầ ặ ằ ờ ự ệ ủ ộ ệ ặ ở
Trang 9các l n l p khác nhau có th khác nhau, gi s th i gian th c hi n thânầ ặ ể ả ử ờ ự ệ
l nh l p l n th i (i=1,2, , L(n)) là Tệ ặ ở ầ ứ i (n) M i l n l p, chúng ta c n ki mỗ ầ ặ ầ ểtra đi u ki n l p, gi s th i gian ki m tra là Tề ệ ặ ả ử ờ ể 0 (n) Nh v y th i gianư ậ ờ
ch y c a l nh l p là:ạ ủ ệ ặ
Công đo n khó nh t trong đánh giá th i gian ch y c a m t l nh l pạ ấ ờ ạ ủ ộ ệ ặ
là đánh giá s l n l p Trong nhi u l nh l p, đ c bi t là trong các l nh l pố ầ ặ ề ệ ặ ặ ệ ệ ặfor, ta có th th y ngay s l n l p t i đa là bao nhiêu Nh ng cũng không ítể ấ ố ầ ặ ố ưcác l nh l p, t đi u ki n l p đ suy ra s t i đa các l n l p, c n ph i ti nệ ặ ừ ề ệ ặ ể ố ố ầ ặ ầ ả ếhành các suy di n không đ n gi n.ễ ơ ả
Trường h p hay g p là: ki m tra đi u ki n l p (thông thợ ặ ể ề ệ ặ ường làđánh giá m t bi u th c) ch c n th i gian O(1), th i gian th c hi n các l nộ ể ứ ỉ ầ ờ ờ ự ệ ầ
l p là nh nhau và gi s ta đánh giá đặ ư ả ử ược là O(f(n)); khi đó, n u đánh giáế
đượ ố ầ ặc s l n l p là O(g(n)), thì th i gian ch y c a l nh l p là O(g(n)f(n)).ờ ạ ủ ệ ặ
ch yạ
CÂY TÌM KI M NH PHÂN Ế Ị
M t trong các ng d ng quan tr ng nh t c a cây nh phân là s d ngộ ứ ụ ọ ấ ủ ị ử ụcây nh phân đ t ch c d li u Trong các chị ể ổ ứ ữ ệ ương trình, thông thườngchúng ta c n ph i l u m t t p các d li u, r i thầ ả ư ộ ậ ữ ệ ồ ường xuyên ph i th cả ự
hi n cá phép toán: tìm ki m d li u, c p nh t d li u Trong các chệ ế ữ ệ ậ ậ ữ ệ ương
4 và 5, chúng ta đã nghiên c u s cài đ t KDLTT t p đ ng (m t t p d li uứ ự ặ ậ ộ ộ ậ ữ ệ
v i các phép toán tìm ki m, xen, lo i ) b i danh sách N u t p d li uớ ế ạ ở ế ậ ữ ệ
Trang 10đượ ưc l u trong DSLK thì các phép toán tìm ki m, xen, lo i, đòi h i th iế ạ ỏ ờgian O(n), trong đó n là s d li u N u t p d li u đố ữ ệ ế ậ ữ ệ ược s p x p thànhắ ế
m t danh sách theo th t tăng (gi m) theo khóa tìm ki m, và danh sáchộ ứ ự ả ếnày đượ ưc l u trong m ng, thì phép toán tìm ki m ch đòi h i th i gianả ế ỉ ỏ ờO(logn) n u s d ng kỹ thu t tìm ki m nh phân (m c 4.4), nh ng cácế ử ụ ậ ế ị ụ ưphép toán xen, lo i v n c n th i gian O(n) Trong m c này, chúng ta sẽạ ẫ ầ ờ ụnghiên c u cách t ch c m t t p d li u dứ ổ ứ ộ ậ ữ ệ ướ ại d ng cây nh phân, các dị ữ
li u đệ ược ch a trong các đ nh c a cây nh phân theo m t tr t t xác đ nh,ứ ỉ ủ ị ộ ậ ự ị
c u trúc d li u này cho phép ta cài đ t các phép toán tìm ki m, xen, lo i, ấ ữ ệ ặ ế ạ
ch trong th i gian O(h), trong đó h là đ cao c a cây nh phân.ỉ ờ ộ ủ ị
l n h n các giá tr khóa c a t t c các đ nh cây con trái c a đ nh đó vàớ ơ ị ủ ấ ả ỉ ở ủ ỉ
nh h n các giá tr khóa c a t t c các đ nh cây con ph i c a đ nh đó Doỏ ơ ị ủ ấ ả ỉ ở ả ủ ỉ
đó, chúng ta có đ nh nghĩa sau:ị Cây tìm ki m nh phân (binary search tree)ế ị
là cây nh phân th a mãn tính ch t sau: đ i v i m i đ nh x trong cây, n u yị ỏ ấ ố ớ ỗ ỉ ế
là đ nh b t kỳ cây con trái c a x thì khóa c a x l n h n khóa c a y, cònỉ ấ ở ủ ủ ớ ơ ủ
n u y là đ nh b t kỳ cây con ph i c a x thì khóa c a x nh h n khóa c aế ỉ ấ ở ả ủ ủ ỏ ơ ủ
y Ví d Chúng ta xét các cây nh phân v i các giá tr khoá c a các đ nh làụ ị ớ ị ủ ỉcác s nguyên Các cây nh phân trong hình 8.11 là các cây tìm ki m nhố ị ế ịphân Chúng ta có nh n xét r ng, các cây tìm ki m nh phân trong hình 8.11ậ ằ ế ị
bi u di n cùng m t t p h p d li u, nh ng cây trong hình 8.11a có đ caoể ễ ộ ậ ợ ữ ệ ư ộ
là 3, cây trong hình 8.11b có đ cao là 4, còn cây trong hình 8.11c có t t cộ ấ ảcác cây con trái c a các đ nh đ u r ng và nó có đ cao là 6 M t nh n xétủ ỉ ề ỗ ộ ộ ậquan tr ng khác là, n u chúng ta duy t cây tìm ki m nh phân theo th tọ ế ệ ế ị ứ ựtrong, chúng ta sẽ nh n đậ ược m t dãy d li u độ ữ ệ ược s p x p theo th tắ ế ứ ựkhóa tăng d n Ch ng h n, v i các cây tìm ki m nh phân trong hình 8.11,ầ ẳ ạ ớ ế ị
ta có dãy các giá tr khóa là 1, 3, 4, 5,7, 9.ị
Hình 11 Các cây tìm ki m nh phânế ị
Chúng ta cũng có th đ nh nghĩa cây tìm ki m nh phân b i đ quyể ị ế ị ở ệ
nh sau:ư
• Cây nh phân r ng là cây tìm ki m nh phânị ỗ ế ị
• Cây nh phân không r ng T là cây tìm ki m nh phân n u:ị ỗ ế ị ế
1 Khóa c a g c l n h n khóa c a t t c các đ nh cây con trái Tủ ố ớ ơ ủ ấ ả ỉ ở Lvà
nh h n khóa c a t t c các đ nh cây con ph i Tỏ ơ ủ ấ ả ỉ ở ả R.
Trang 112 Cây con trái TL và cây con ph i Tả R là các cây tìm ki m nh phân.ế ị
S d ng đ nh nghĩa đ quy này, chúng ta d dàng đ a ra các thu t toán đử ụ ị ệ ễ ư ậ ệquy th c hi n các phép toán trên cây tìm ki m nh phân, nh chúng ta sẽự ệ ế ị ư
th y trong m c sau đây.ấ ụ
8.4.2 Các phép toán t p đ ng trên cây tìm ki m nh phân ậ ộ ế ị
Bây gi chúng ta xét xem các phép toán t p đ ng (tìm ki m, xen, lo i,ờ ậ ộ ế ạ ) sẽ được th c hi n nh th nào khi mà t p d li u đự ệ ư ế ậ ữ ệ ược cài đ t b i câyặ ởtìm ki m nh phân Chúng ta sẽ ch ra r ng, các phép toán t p đ ng trên câyế ị ỉ ằ ậ ộtìm ki m nh phân ch đòi h i th i gian O(h), trong đó h là đ cao c a cây.ế ị ỉ ỏ ờ ộ ủ
Nh đ c gi đã th y trong hình 8.12, m t t p d li u có th l u trong cácư ộ ả ấ ộ ậ ữ ệ ể ưcây tìm ki m nh phân có đ cao c a cây có th là n, trong đó n là s dế ị ộ ủ ể ố ữ
li u Nh v y, trong trệ ư ậ ường h p x u nh t th i gian th c hi n các phépợ ấ ấ ờ ự ệtoán t p đ ng trên cây tìm ki m nh phân là O(n) Tuy nhiên, trong m c 8.5ậ ộ ế ị ụchúng ta sẽ ch ng t r ng, n u cây tìm ki m nh phân đứ ỏ ằ ế ế ị ượ ạc t o thành
b ng cách xen vào các d li u đằ ữ ệ ượ ấc l y ra t t p d li u m t cách ng uừ ậ ữ ệ ộ ẫnhiên, thì th i gian trung bình c a các phép toán t p đ ng là O(logn) H nờ ủ ậ ộ ơ
n a, b ng cách áp d ng các kỹ thu t h n ch đ cao c a cây, chúng ta cóữ ằ ụ ậ ạ ế ộ ủ
th đ m b o th i gian logarit cho các phép toán t p đ ng trên cây tìmể ả ả ờ ậ ộ
ki m nh phân (xem chế ị ương 11)
Dưới đây chúng ta sẽ đ a ra các thu t toán th c hi n các phép toánư ậ ự ệ
t p đ ng trên cây tìm ki m nh phân Chúng ta sẽ mô t các thu t toán b iậ ộ ế ị ả ậ ởcác hàm dướ ại d ng gi mã Trong các thu t toán, chúng ta sẽ s d ng cácả ậ ử ụ
ký hi u sau đây: T là cây tìm ki m nh phân có g c là root, d li u ch a ệ ế ị ố ữ ệ ứ ở
g c đố ược ký hi u là rootData, cây con trái c a g c là Tệ ủ ố L , cây con ph i c aả ủ
g c là Tố R ; v là m t đ nh, d li u ch a trong đ nh v độ ỉ ữ ệ ứ ỉ ược ký hi u là data(v),ệ
đ nh con trái c a v là leftChild(v), đ nh con ph i là rightChild(v); d li uỉ ủ ỉ ả ữ ệtrong các đ nh có ki u Item, khóa c a d li u d đỉ ể ủ ữ ệ ược ký hi u là d.key.ệ
Phép toán tìm ki m ế Cho cây tìm ki m nh phân T, đ tìm xem cây Tế ị ể
có ch a d li u v i khóa k cho trứ ữ ệ ớ ước hay không, chúng ta ki m tra xem g cể ố
có ch a d li u v i khóa k hay không N u không, gi s k < rootData.key,ứ ữ ệ ớ ế ả ửkhi đó do tính ch t c a cây tìm ki m nh phân, d li u v i khóa k ch cóấ ủ ế ị ữ ệ ớ ỉ
th ch a trong cây con trái c a g c, và do đó, ta ch c n ti p t c tìm ki mể ứ ủ ố ỉ ầ ế ụ ếtrong cây con trái c a g c Tủ ố ương t , n u k > rootData.key, s tìm ki mự ế ự ế
được h n ch trong ph m vi cây con ph i c a g c T đó, ta có thu t toánạ ế ạ ả ủ ố ừ ậtìm ki m đ quy sau:ế ệ
bool Search(T, k)
// Tìm d li u v i khóa k trong cây tìm ki m nh phânữ ệ ớ ế ị
// Hàm tr v true (false) n u tìm th y (không tìm th y)ả ề ế ấ ấ
{
if (T r ng)ỗ
return false;
Trang 12đ u t g c Khi v là m t đ nh nào đó c a cây T, chúng ta ki m tra xem đ nhầ ừ ố ộ ỉ ủ ể ỉ
v có ch a d li u v i khóa k hay không N u không, tùy theo khóa k nhứ ữ ệ ớ ế ỏ
h n (l n h n) khóa c a d li u trong đ nh v mà chúng ta đi xu ng đ nh conơ ớ ơ ủ ữ ệ ỉ ố ỉtrái (con ph i) c a v Thu t toán tìm ki m không đ quy là nh sau:ả ủ ậ ế ệ ư
Các đ nh mà bi n v ch y qua t o thành m t đỉ ế ạ ạ ộ ường đi t g c hừ ố ướng
t i m t lá c a cây Trong trớ ộ ủ ường h p x u nh t, bi n v sẽ d ng l i m tợ ấ ấ ế ừ ạ ở ộ
B i vì đ cao c a cây là đ dài c a đở ộ ủ ộ ủ ường đi dài nh t t g c t i lá, do đóấ ừ ố ớ
th i gian c a phép toán Search là O(h) Chúng ta nh n th y có s tờ ủ ậ ấ ự ương tự
gi a kỹ thu t tìm ki m nh phân (xem 4.4) và kỹ thu t tìm ki m trên câyữ ậ ế ị ậ ếtìm ki m nh phân Trong quá trình tìm ki m trên cây tìm ki m nh phân ,ế ị ế ế ị
t i m i th i đi m chúng ta h n ch tìm ki m cây con trái ho c cây conạ ỗ ờ ể ạ ế ế ở ặ ở
ph i; còn trong tìm ki m nh phân chúng ta ti p t c tìm ki m n a bênả ế ị ế ụ ế ở ử
Trang 13trái hay n a bên ph i c a m ng Tuy nhiên trong tìm ki m nh phân, t iử ả ủ ả ế ị ạ
m i th i đi m không gian tìm ki m (m ng) đỗ ờ ể ế ả ược chia đôi, n a bên trái vàử
n a bên ph i b ng nhau; đi u đó đ m b o th i gian trong tìm ki m nhử ả ằ ề ả ả ờ ế ịphân là O(logn) Nh ng trong cây tìm ki m nh phân, cây con trái và cây conư ế ị
ph i có th có s đ nh r t khác nhau, do đó nói chung th i gian tìm ki mả ể ố ỉ ấ ờ ếtrên cây tìm ki m nh phân không ph i là O(logn), ch có th i gian này khiế ị ả ỉ ờ
ki m nh phân đế ị ược xây d ng “cân b ng” t i m i đ nh.ự ằ ạ ọ ỉ
B NG BĂM, PH Ả ƯƠ NG PHÁP BĂM, HÀM BĂM, CÀI Đ T B NG Ặ Ả BĂM
• Phương pháp băm và hàm băm
• Các chi n lế ược gi i quy t s va ch m.ả ế ự ạ
• Cài đ t KDLTT t đi n b i b ng băm.ặ ừ ể ở ả
9.1 PH ƯƠ NG PHÁP BĂM
V n đ đấ ề ược đ t ra là, chúng ta có m t t p d li u, chúng ta c n đ aặ ộ ậ ữ ệ ầ ư
ra m t CTDL cài đ t t p d li u này sao cho các phép toán tìm ki m, xen,ộ ặ ậ ữ ệ ế
lo i đạ ược th c hi n hi u qu Trong các chự ệ ệ ả ương trước, chúng ta đã trìnhbày các phương pháp cài đ t KDLTT t p đ ng (t đi n là trặ ậ ộ ừ ể ường h p riêngợ
c a t p đ ng khi mà chúng ta ch quan tâm t i ba phép toán tìm ki m, xen,ủ ậ ộ ỉ ớ ế
lo i).ạ
Sau đây chúng ta trình bày m t kỹ thu t m i đ l u gi m t t p d li u,ộ ậ ớ ể ư ữ ộ ậ ữ ệ
đó là phương pháp băm
N u nh các giá tr khoá c a các d li u là s nguyên không âm vàế ư ị ủ ữ ệ ố
n m trong kho ng [0 SIZE-1], chúng ta có th s d ng m t m ng data cóằ ả ể ử ụ ộ ả
c SIZE đ l u t p d li u đó D li u có khoá là k sẽ đỡ ể ư ậ ữ ệ ữ ệ ượ ưc l u trong thành
ph n data[k] c a m ng B i vì m ng cho phép ta truy c p tr c ti p t iầ ủ ả ở ả ậ ự ế ớ
t ng thành ph n c a m ng theo ch s , do đó các phép toán tìm ki m, xen,ừ ầ ủ ả ỉ ố ế
lo i đạ ược th c hi n trong th i gian O(1) Song đáng ti c là, khoá có thự ệ ờ ế ểkhông ph i là s nguyên, thông thả ố ường khoá còn có th là s th c, là ký tể ố ự ự
ho c xâu ký t Ngay c khoá là s nguyên, thì các giá tr khoá nói chungặ ự ả ố ị
Trong trường h p t ng quát, khi khoá không ph i là các s nguyên trongợ ổ ả ốkho ng [0 SIZE-1], chúng ta cũng mong mu n l u t p d li u b i m ng,ả ố ư ậ ữ ệ ở ả
đ l i d ng tính u vi t cho phép truy c p tr c ti p c a m ng Gi sể ợ ụ ư ệ ậ ự ế ủ ả ả ửchúng ta mu n l u t p d li u trong m ng T v i c là SIZE Đ làm đố ư ậ ữ ệ ả ớ ỡ ể ược
đi u đó, v i m i d li u chúng ta c n đ nh v đề ớ ỗ ữ ệ ầ ị ị ược v trí trong m ng t i đóị ả ạ
d li u đữ ệ ượ ưc l u gi N u chúng ta đ a ra đữ ế ư ược cách tính ch s m ng t iỉ ố ả ạ
đó l u d li u thì chúng ta có th l u t p d li u trong m ng theo s đư ữ ệ ể ư ậ ữ ệ ả ơ ồhình 9.1
Trang 14Hình 9.1 Lược đ phồ ương pháp băm
Trong lược đ hình 9.1, khi cho m t d li u có khoá là k, n u tính đ aồ ộ ữ ệ ế ị
ch theo k ta thu đỉ ược ch s i, 0 <= i <= SIZE-1, thì d li u sẽ đỉ ố ữ ệ ượ ưc l utrong thành ph n m ng T[i].ầ ả
M t hàm ng v i m i giá tr khoá c a d li u v i m t đ a ch (ch s )ộ ứ ớ ỗ ị ủ ữ ệ ớ ộ ị ỉ ỉ ố
c a d li u trong m ng đủ ữ ệ ả ược g i là hàm băm (hash function) Phọ ươngpháp l u t p d li u theo lư ậ ữ ệ ược đ trên đồ ược g i là phọ ương pháp băm(hashing) Trong lược đ 9.1, m ng T đồ ả ượ ọc g i là b ng băm (hash table).ả
Nh v y, hàm băm là m t ánh x h t t p các giá tr khoá c a d li uư ậ ộ ạ ừ ậ ị ủ ữ ệvào t p các s nguyên {0,1,…, SIZE-1}, trong đó SIZE là c c a m ng dùngậ ố ỡ ủ ả
đ l u t p d li u, t c là: h : K Æ {0,1,…,SIZE-1}ể ư ậ ữ ệ ứ v i K là t p các giá trớ ậ ịkhoá Cho m t d li u có khoá là k, thì h(k) độ ữ ệ ược g i là giá tr băm c aọ ị ủkhoá k, và d li u đữ ệ ượ ưc l u trong T[h(k)]
N u hàm băm cho phép ng các giá tr khoá khác nhau v i các ch sế ứ ị ớ ỉ ốkhác nhau, t c là n u k 1 ≠ k 2 thì h(k 1 ) ≠ h(k 2 ), và vi c tính ch s h(k)ứ ế ệ ỉ ố
ng v i m i khoá k ch đòi h i th i gian h ng, thì các phép toán tìm ki m,
Nh v y, m t hàm băm nh th nào thì đư ậ ộ ư ế ược xem là t t T nh ngố ừ ữ
đi u đã nêu trên, chúng ta đ a ra các tiêu chu n đ thi t k m t hàm bămề ư ẩ ể ế ế ộ
t t nh sau:ố ư
1 Tính được d dàng và nhanh đ a ch ng v i m i khoá.ễ ị ỉ ứ ớ ỗ
2 Đ m b o ít x y ra va ch m.ả ả ả ạ
9.2 CÁC HÀM BĂM
Trong các hàm băm được đ a ra dư ưới đây, chúng ta sẽ ký hi u k làệ
m t giá tr khoá b t kỳ và SIZE là c c a b ng băm Trộ ị ấ ỡ ủ ả ước h t chúng ta sẽếxét trường h p các giá tr khoá là các s nguyên không âm N u không ph iợ ị ố ế ả
là trường h p này (ch ng h n, khi các giá tr khoá là các xâu ký t ), chúngợ ẳ ạ ị ự
ta ch c n chuy n đ i các giá tr khoá thành các s nguyên không âm, sauỉ ầ ể ổ ị ố
Trang 15đó băm chúng b ng m t phằ ộ ương pháp cho trường h p khoá là s nguyên.ợ ố
Có nhi u phề ương pháp thi t k hàm băm đã đế ế ược đ xu t, nh ng đề ấ ư ượ ửc s
d ng nhi u nh t trong th c t là các phụ ề ấ ự ế ương pháp được trình bày sau đây:
9.2.1 Ph ươ ng pháp chia
Phương pháp này đ n gi n là l y ph n d c a phép chia khoá k choơ ả ấ ầ ư ủ
c b ng băm SIZE làm giá tr băm: h(k) = k mod SIZEỡ ả ị
B ng cách này, giá tr băm h(k) là m t trong các s 0,1,…, SIZE-1 Hàm bămằ ị ộ ốnày được cài đ t trong C++ nh sau:ặ ư
unsigned int hash(int k, int SIZE)
9.2.2 Ph ươ ng pháp nhân
Phương pháp chia có u đi m là r t đ n gi n và d dàng tính đư ể ấ ơ ả ễ ượcgiá tr băm, song đ i v i s va ch m nó l i r t nh y c m v i c c a b ngị ố ớ ự ạ ạ ấ ạ ả ớ ỡ ủ ảbăm Đ h n ch s va ch m, chúng ta có th s d ng phể ạ ế ự ạ ể ử ụ ương pháp nhân,
phương pháp này có u đi m là ít ph thu c vào c c a b ng băm.ư ể ụ ộ ỡ ủ ả
Phương pháp nhân tính giá tr băm c a khoá k nh sau Đ u tiên, taị ủ ư ầtính tích c a khoá k v i m t h ng s th c , 0 < <1 Sau đó l y ph nủ ớ ộ ằ ố ự α α ấ ầ
th p phân c a tích k nhân v i SIZE, ph n nguyên c a tích này đậ ủ α ớ ầ ủ ượ ấc l ylàm giá tr băm c a khoá k T c là:ị ủ ứ
h(k) = ⎣(αk - ⎣αk⎦) SIZE⎦
(Ký hi u ệ ⎣x⎦ chỉ phần nguyên của số thực x, tức là số nguyên lớn nhất
<=x, chẳng hạn ⎣3⎦ = 3, ⎣3.407⎦ = 3)
Chú ý r ng, ph n th p phân c a tích k, t c là k - ằ ầ ậ ủ α ứ α ⎣αk⎦, là số thựcdương nhỏ hơn 1 Do đó tích của phần thập phân với SIZE là số dương nhỏ
h n SIZE T đó, giá tr băm h(k) là m t trong các s nguyên 0,1,…, SIZE- 1.ơ ừ ị ộ ố
Đ có th phân ph i đ u các giá tr khoá vào các v trí trong b ng băm,ể ể ố ề ị ị ảtrong th c t ngự ế ười ta thường ch n h ng s nh sau:ọ ằ ố α ư
Trang 169.2.3 Hàm băm cho các giá tr khoá là xâu ký t ị ự
Đ băm các xâu ký t , trể ự ước h t chúng ta chuy n đ i các xâu ký tế ể ổ ựthành các s nguyên Các ký t trong b ng mã ASCII g m 128 ký t đố ự ả ồ ự ượcđánh s t 0 đ n 127, đo đó m t xâu ký t có th xem nh m t s trongố ừ ế ộ ự ể ư ộ ố
h đ m c s 128 Áp d ng phệ ế ơ ố ụ ương pháp chuy n đ i m t s trong hể ổ ộ ố ệ
đ m b t kỳ sang m t s trong h đ m c s 10, chúng ta sẽ chuy n đ iế ấ ộ ố ệ ế ơ ố ể ổ
được m t xâu ký t thành m t s nguyên Ch ng h n, xâu “NOTE” độ ự ộ ố ẳ ạ ược
“NOTE” -> ‘N’.128 3 + ‘O’.128 2 + ‘T’.128 + ‘E’ = = 78.128 3 + 79.128 2 + 84.128+ 69
V n đ n y sinh v i cách chuy n đ i này là, chúng ta c n tính các luỹấ ề ả ớ ể ổ ầ
th a c a 128, v i các xâu ký t từ ủ ớ ự ương đ i dài, k t qu nh n đố ế ả ậ ược sẽ là m tộ
s nguyên c c l n vố ự ớ ượt quá kh năng bi u di n c a máy tính.ả ể ễ ủTrong th c t , thông thự ế ường m t xâu ký t độ ự ượ ạc t o thành t 26 ch cái vàừ ữ
10 ch s , và m t vài ký t khác Do đó chúng ta thay 128 b i 37 và tính sữ ố ộ ự ở ốnguyên ng v i xâu ký t theo lu t Horner Ch ng h n, s nguyên ng v iứ ớ ự ậ ẳ ạ ố ứ ớxâu ký t “NOTE” đự ược tính nh sau: “NOTE” Æ 78.37 3 + 79.37 2 + 84.37 +ư69= = ((78.37 + 79).37 +84).37 +69
Sau khi chuy n đ i xâu ký t thành s nguyên b ng phể ổ ự ố ằ ương pháptrên, chúng ta sẽ áp d ng phụ ương pháp chia đ tính giá tr băm Hàm bămể ịcác xâu ký t đự ược cài đ t nh sau:ặ ư
unsigned int hash(const string & k, int SIZE) {
unsigned int value = 0;
for (int i = 0; i < k.length(); i++)
value = 37 * value + k[i];
return value % SIZE;
M t phộ ương pháp khác là, chúng ta t o ra m t c u trúc d li u l u gi t tạ ộ ấ ữ ệ ư ữ ấ
c các d li u đả ữ ệ ược băm vào cùng m t v trí trong b ng và “g n” c u trúcộ ị ả ắ ấ
d li u này vào v trí đó trong b ng.ữ ệ ị ả
Trang 179.3.1 Ph ươ ng pháp đ nh đ a ch m ị ị ỉ ở
Trong phương pháp này, các d li u đữ ệ ượ ưc l u trong các thành ph nầ
c a m ng, m i thành ph n ch ch a đủ ả ỗ ầ ỉ ứ ược m t d li u Vì th , m i khi c nộ ữ ệ ế ỗ ầxen m t d li u m i v i khoá k vào m ng, nh ng t i v trí h(k) đã ch a dộ ữ ệ ớ ớ ả ư ạ ị ứ ữ
li u, chúng ta sẽ ti n hành thăm dò m t s v trí khác trong m ng đ tìm raệ ế ộ ố ị ả ể
m t v trí còn tr ng và đ t d li u m i vào v trí đó Phộ ị ố ặ ữ ệ ớ ị ương pháp ti nếhành thăm dò đ phát hi n ra v trí tr ng để ệ ị ố ược g i là phọ ương pháp đ nhị
Gi s v trí mà hàm băm xác đ nh ng v i khoá k là i, i=h(k) T v trí nàyả ử ị ị ứ ớ ừ ịchúng ta l n lầ ượt xem xét các v trí iị 0 , i 1 , i 2 ,…, i m ,…Trong đó i 0 = i, i m (m=0,1,2,…) là v trí thăm dò l n th m Dãy các v tríị ở ầ ứ ịnày sẽ được g i là dãy thăm dò V n đ đ t ra là, xác đ nh dãy thăm dò nhọ ấ ề ặ ị ư
th nào? Sau đây chúng ta sẽ trình bày m t s phế ộ ố ương pháp thăm dò vàphân tích u khuy t đi m c a m i phư ế ể ủ ỗ ương pháp
Thăm dò tuy n tính ế
Đây là phương pháp thăm dò đ n gi n và d cài đ t nh t V i khoá k,ơ ả ễ ặ ấ ớ
gi s v trí đả ử ị ược xác đ nh b i hàm băm là i=h(k), khi đó dãy thăm dò là i ,ị ởi+1, i+2 , …Nh v y thăm dò tuy n tính có nghĩa là chúng ta xem xét các vư ậ ế ịtrí ti p li n nhau k t v trí ban đ u đế ề ể ừ ị ầ ược xác đ nh b i hàm băm Khi c nị ở ầxen vào m t d li u m i v i khoá k, n u v trí i = h(k) đã b chi m thì taộ ữ ệ ớ ớ ế ị ị ếtìm đ n các v trí đi li n sau đó, g p v trí còn tr ng thì đ t d li u m i vàoế ị ề ặ ị ố ặ ữ ệ ớđó
Ví d Gi s c c a m ng SIZE = 11 Ban đ u m ng T r ng, và ta c nụ ả ử ỡ ủ ả ầ ả ỗ ầxen l n lầ ượt các d li u v i khoá là 388, 130, 13, 14, 926 vào m ng.ữ ệ ớ ảBăm khoá 388, h(388) = 3, vì v y 388 đậ ược đ t vào T[3]; h(130) = 9, đ tặ ặ
130 vào T[9]; h(13) = 2, đ t 13 trong T[2] Xét ti p d li u v i khoá 14,ặ ế ữ ệ ớh(14) = 3, x y ra va ch m (vì T[3] đã b chi m b i 388), ta tìm đ n v tríẩ ạ ị ế ở ế ị
ti p theo là 4, v trí này tr ng và 14 đế ị ố ược đ t vào T[4] Tặ ương t , khi xenựvào 926 cũng x y ra va ch m, h(926) = 2, tìm đ n các v trí ti p theo 3, 4, 5ả ạ ế ị ế
và 92 được đ t vào T[5] K t qu là chúng ta nh n đặ ế ả ậ ược m ng T nh trongả ưhình 9.2
Hình 9.2 B ng băm sau khi xen vào các d li u 38, 130, 13, 14 và 926ả ữ ệBây gi chúng ta xét xem, n u l u t p d li u trong m ng b ngờ ế ư ậ ữ ệ ả ằ
phương pháp đ nh đ a ch m thì các phép toán tìm ki m, xen, lo i đị ị ỉ ở ế ạ ược
ti n hành nh th nào Các kỹ thu t tìm ki m, xen, lo i đế ư ế ậ ế ạ ược trình bày
dưới đây có th s d ng cho b t kỳ phể ử ụ ấ ương pháp thăm dò nào Trước h tế
c n l u ý r ng, đ tìm, xen, lo i chúng ta ph i s d ng cùng m t phầ ư ằ ể ạ ả ử ụ ộ ươngpháp thăm dò, ch ng h n thăm dò tuy n tính Gi s chúng ta c n tìm dẳ ạ ế ả ử ầ ữ
li u v i khoá là k Đ u tiên c n băm khoá k, gi s h(k)=i N u trong b ngệ ớ ầ ầ ả ử ế ả
ta ch a m t l n nào th c hi n phép toán lo i, thì chúng ta xem xét các dư ộ ầ ự ệ ạ ữ
Trang 18li u ch a trong m ng t i v trí i và các v trí ti p theo trong dãy thăm dò,ệ ứ ả ạ ị ị ếchúng ta sẽ phát hi n ra d li u c n tìm t i m t v trí nào đó trong dãyệ ữ ệ ầ ạ ộ ịthăm dò, ho c n u g p m t v trí tr ng trong dãy thăm dò thì có th d ngặ ế ặ ộ ị ố ể ừ
l i và k t lu n d li u c n tìm không có trong m ng Ch ng h n chúng taạ ế ậ ữ ệ ầ ả ẳ ạ
mu n tìm xem m ng trong hình 9.2 có ch a d li u v i khoá là 47? B i vìố ả ứ ữ ệ ớ ởh(47) = 3, và d li u đữ ệ ượ ưc l u theo phương pháp thăm dò tuy n tính, nênếchúng ta l n lầ ượt xem xét các v trí 3, 4, 5 Các v trí này đ u ch a d li uị ị ề ứ ữ ệkhác v i 47 Đ n v trí 6, m ng tr ng V y ta k t lu n 47 không có trongớ ế ị ả ố ậ ế ậ
m ng.ả
Đ lo i d li u v i khoá k, trể ạ ữ ệ ớ ước h t chúng ta c n áp d ng th t cế ầ ụ ủ ụtìm ki m đã trình bày trên đ đ nh v d li u trong m ng Gi s dế ở ể ị ị ữ ệ ở ả ả ử ữ
li u đệ ượ ưc l u trong m ng t i v trí p Lo i d li u v trí p b ng cách nào?ả ạ ị ạ ữ ệ ở ị ằ
N u đ t v trí p là v trí tr ng, thì khi tìm ki m n u thăm dò g p v tríế ặ ị ị ố ế ế ặ ị
tr ng ta không th d ng và đ a ra k t lu n d li u không có trong m ng.ố ể ừ ư ế ậ ữ ệ ả
Ch ng h n, trong m ng hình 9.2, ta lo i d li u 388 b ng cách xem v trí 3ẳ ạ ả ạ ữ ệ ằ ị
là tr ng, sau đó ta tìm d li u 926, vì h (926) = 2 và T[2] không ch a 926,ố ữ ệ ứtìm đ n v trí 3ế ị là tr ng, nh ng ta không th k t lu n 926 không có trongố ư ể ế ậ
m ng Th c t 926 v trí 5, vì lúc đ a 926 vào m ng các v trí 2, 3, 4 đã bả ự ế ở ị ư ả ị ịchi m Vì v y đ đ m b o th t c tìm ki m đã trình bày trên v n cònế ậ ể ả ả ủ ụ ế ở ẫđúng cho trường h p đã th c hi n phép toán lo i, khi lo i d li u v trí pợ ự ệ ạ ạ ữ ệ ở ịchúng ta đ t v trí p là v trí đã lo i b Nh v y, chúng ta quan ni m m i vặ ị ị ạ ỏ ư ậ ệ ỗ ịtrí i trong m ng (0 <= i <= SIZE-1) có th là v trí tr ng (EMPTY), v trí đãả ể ị ố ị
lo i b (DELETED), ho c v trí ch a d li u (ACTIVE) Đạ ỏ ặ ị ứ ữ ệ ương nhiên là khixen vào d li u m i,ữ ệ ớ chúng ta có th đ t nó vào v trí đã lo i b ể ặ ị ạ ỏ
Vi c xen vào m ng m t d li u m i đệ ả ộ ữ ệ ớ ược ti n hành b ng cách l n lế ằ ầ ượtxem xét các v trí trong dãy thăm dò ng v i m i khoá c a d li u, khi g pị ứ ớ ỗ ủ ữ ệ ặ
m t v trí tr ng ho c v trí đã độ ị ố ặ ị ược lo i b thì đ t d li u vào đó Sau đâyạ ỏ ặ ữ ệ
Phương pháp thăm dò tuy n tính có u đi m là cho phép ta xem xétế ư ể
t t c các v trí trong m ng, và do đó phép toán xen vào luôn luôn th cấ ả ị ả ự
hi n đệ ược, tr khi m ng đ y Song nhừ ả ầ ược đi m c a phể ủ ương pháp này làcác d li u t p trung thành t ng đo n, trong quá trình xen các d li u m iữ ệ ậ ừ ạ ữ ệ ớvào, các đo n có th g p thành đo n dài h n Đi u đó làm cho các phépạ ể ộ ạ ơ ề
Trang 19toán kém hi u qu , ch ng h n n u i = h(k) đ u m t đo n, đ tìm dệ ả ẳ ạ ế ở ầ ộ ạ ể ữ
li u v i khoá k chúng ta c n xem xét c m t đo n dài.ệ ớ ầ ả ộ ạ
Thăm dò bình ph ươ ng
Đ kh c ph c tình tr ng d li u tích t thành t ng c m trongể ắ ụ ạ ữ ệ ụ ừ ụ
phương pháp thăm dò tuy n tính, chúng ta không thăm dò các v trí k ti pế ị ế ế
li n nhau, mà thăm dò b ch theo m t quy lu t nào đó.ề ỏ ỗ ộ ậTrong thăm dò bình phương, n u v trí ng v i khoá k là i = h(k), thì dãyế ị ứ ớthăm dò là: i , i + 1 2 , i + 2 2 ,… , i + m 2 ,…
Ví d N u c c a m ng SIZE = 11, và i = h(k) = 3, thì thăm dò bìnhụ ế ỡ ủ ả
phương cho phép ta tìm đ n các đ a ch 3, 4, 7, 1, 8 và 6.ế ị ỉ
Phương pháp thăm dò bình phương tránh được s tích t d li u thànhự ụ ữ ệ
t ng đo n và tránh đừ ạ ược s tìm ki m tu n t trong các đo n Tuy nhiênự ế ầ ự ạ
nhược đi m c a nó là không cho phép ta tìm đ n t t c các v trí trongể ủ ế ấ ả ị
m ng, ch ng h n trong ví d trên, trong s 11 v trí t 0, 1, 2, …, 10, ta chả ẳ ạ ụ ố ị ừ ỉtìm đ n các v trí 3, 4, 7, 1, 8 và 6 H u qu c a đi u đó là, phép toán xenế ị ậ ả ủ ềvào có th không th c hi n để ự ệ ược, m c d u trong m ng v n còn các v tríặ ầ ả ẫ ịkhông ch a d li u Chúng ta có th d dàng ch ng minh đứ ữ ệ ể ễ ứ ược kh ng đ nhẳ ịsau đây: 251 N u c c a m ng là s nguyên t , thì thăm dò bình phế ỡ ủ ả ố ố ươngcho phép ta tìm đ n m t n a s v trí trong m ng C th h n là, các v tríế ộ ử ố ị ả ụ ể ơ ịthăm dò h(k) + m 2 (mode SIZE) v i m = 0, 1,…, ớ ⎣SIZE/2⎦ là khác nhau Từkhẳng định trên chúng ta suy ra rằng, nếu c c a m ng là s nguyên t vàỡ ủ ả ố ố
m ng không đ y quá 50% thì phép toán xen vào luôn luôn th c hi n đả ầ ự ệ ược
Băm kép
Phương pháp băm kép (double hashing) có u đi m nh thăm dòư ể ưbình phương là h n ch đạ ế ược s tích t d li u thành c m; ngoài ra n uự ụ ữ ệ ụ ếchúng ta ch n c c a m ng là s nguyên t , thì băm kép còn cho phép taọ ỡ ủ ả ố ốthăm dò t i t t c các v trí trong m ng.ớ ấ ả ị ả
Trong thăm dò tuy n tính ho c thăm dò bình phế ặ ương, các v trí thămị
dò cách v trí xu t phát m t kho ng cách hoàn toàn xác đ nh trị ấ ộ ả ị ước và cáckho ng cách này không ph thu c vào khoá Trong băm kép, chúng ta sả ụ ộ ử
d ng hai hàm băm hụ 1 và h 2 :
• Hàm băm h 1 đóng vai trò nh hàm băm h trong các phư ương pháp
trước, nó xác đ nh v trí thăm dò đ u tiênị ị ầ
• Hàm băm h 2 xác đ nh bị ước thăm dò
Đi u đó có nghĩa là, ng v i m i khoá k, dãy thăm dò là: hề ứ ớ ỗ 1 (k) + m
h 2 (k), v i m = 0, 1, 2, …ớ
B i vì h 2 (k) là bở ước thăm dò, nên hàm băm h 2 ph i tho mãn đi uả ả ề
ki n h 2 (k) ≠ 0 v i m i k.ệ ớ ọ
Có th ch ng minh để ứ ược r ng, n u c c a m ng và bằ ế ỡ ủ ả ước thăm dò
h 2 (k) nguyên t cùng nhau thì phố ương pháp băm kép cho phép ta tìm đ nế
Trang 20h 2 (36) = 1 + 1 = 2, và dãy thăm dò là 3, 5, 7, 9, 0, 2, 4, 6, 8, 10.
Trong các ng d ng, chúng ta có th ch n c m ng SIZE là s nguyênứ ụ ể ọ ỡ ả ố
t và ch n M là s nguyên t , M < SIZE, r i s d ng các hàm băm hố ọ ố ố ồ ử ụ 1 (k) = k
Khi đó m i thành ph n trong b ng băm T[i], v i i = 0, 1, …, SIZE – 1, sẽỗ ầ ả ớ
ch a con tr tr t i đ u m t DSLK Cách gi i quy t va ch m nh trênứ ỏ ỏ ớ ầ ộ ả ế ạ ư
được g i là phọ ương pháp t o dây chuy n (separated chaining) Lạ ề ược đồ
l u t p d li u trong b ng băm s d ng phư ậ ữ ệ ả ử ụ ương pháp t o dây chuy nạ ề
được mô t trong hình 9.3.ả
Hình 9.3 Phương pháp t o dây chuy n.ạ ề
u đi m c a ph ng pháp gi i quy t va ch m này là s d li u
đượ ưc l u không ph thu c vào c c a m ng, nó ch h n ch b i b nhụ ộ ỡ ủ ả ỉ ạ ế ở ộ ớ
c p phát đ ng cho các dây chuy n.ấ ộ ề
Bây gi chúng ta xét xem các phép toán t đi n (tìm ki m, xen, lo i)ờ ừ ể ế ạ
được th c hi n nh th nào Các phép toán đự ệ ư ế ược th c hi n r t d dàng,ự ệ ấ ễ
đ xen vào b ng băm d li u khoá k, chúng ta ch c n xen d li u này vàoể ả ữ ệ ỉ ầ ữ ệ
đ u DSLK đầ ược tr t i b i con tr T[h(k)] Phép toán xen vào ch đòi h iỏ ớ ở ỏ ỉ ỏ
th i gian O(1), n u th i gian tính giá tr băm h(k) là O(1) Vi c tìm ki mờ ế ờ ị ệ ế
ho c lo i b m t d li u v i khoá k đặ ạ ỏ ộ ữ ệ ớ ược quy v tìm ki m ho c lo i bề ế ặ ạ ỏtrên DSLK T[h(k)] Th i gian tìm ki m ho c lo i b đờ ế ặ ạ ỏ ương nhiên là phụ
Chúng ta có nh n xét r ng, dù gi i quy t va ch m b ng cách thăm dò, hayậ ằ ả ế ạ ằ
gi i quy t va ch m b ng cách t o dây chuy n, thì b ng băm đ u khôngả ế ạ ằ ạ ề ả ềthu n ti n cho s th c hi n các phép toán t p đ ng khác, ch ng h n phépậ ệ ự ự ệ ậ ộ ẳ ạ
Trang 21toán Min (tìm d li u có khoá nh nh t), phép toán DeleteMin (lo i d li uữ ệ ỏ ấ ạ ữ ệ
có khoá nh nh t), ho c phép duy t d li u.ỏ ấ ặ ệ ữ ệ
Sau này chúng ta sẽ g i b ng băm v i gi i quy t va ch m b ngọ ả ớ ả ế ạ ằ
phương pháp đ nh đ a ch m là b ng băm đ a ch m , còn b ng băm gi iị ị ỉ ở ả ị ỉ ở ả ảquy t va ch m b ng cách t o dây chuy n là b ng băm dây chuy n.ế ạ ằ ạ ề ả ề
9.4 CÀI Đ T B NG BĂM Đ A CH M Ặ Ả Ị Ỉ Ở
Trong m c này chúng ta sẽ nghiên c u s cài đ t KDLTT t đi n b iụ ứ ự ặ ừ ể ở
b ng băm đ a ch m Chúng ta sẽ gi thi t r ng, các d li u trong t đi nả ị ỉ ở ả ế ằ ữ ệ ừ ể
có ki u Item nào đó, và chúng ch a m t trể ứ ộ ường dùng làm khoá tìm ki mế(trường key), các giá tr khoá có ki u keyType Ngoài ra đ đ n gi n choị ể ể ơ ả
vi t ta gi thi t r ng, có th truy c p tr c ti p trế ả ế ằ ể ậ ự ế ường key Nh đã th oư ả
lu n trong m c 9.3.1, trong b ng băm T, m i thành ph n T[i], 0 <= i <=ậ ụ ả ỗ ầSIZE -1 , sẽ ch a hai bi n: bi n data đ l u d li u và bi n state đ l uứ ế ế ể ư ữ ệ ế ể ư
tr ng thái c a v trí i, tr ng thái c a v trí i có th là r ng (EMPTY), có thạ ủ ị ạ ủ ị ể ỗ ể
ch a d li u (ACTIVE), ho c có th đã lo i b (DELETED) Chúng ta sẽ càiứ ữ ệ ặ ể ạ ỏ
đ t KDLTT b i l p OpenHash ph thu c tham bi n ki u Item, l p này sặ ở ớ ụ ộ ế ể ớ ử
d ng m t hàm băm Hash và m t hàm thăm dò Probing đã đụ ộ ộ ược cung c p.ấ
L p OpenHash đớ ược khai báo trong hình 9.4
typedef int keyType;
const int SIZE = 811;
template < class Item >
class
OpenHash {
public: OpenHash(); // kh i t o b ng băm r ng.ở ạ ả ỗ
bool Search(keyType k, Item & I) const;
// Tìm d li u có khoá là k.ữ ệ
// Hàm tr v true (false) n u tìm th y (không tìm th y).ả ề ế ấ ấ
// N u tìm ki m thành công, bi n I ghi l i d li u c n tìm.ế ế ế ạ ữ ệ ầ
void Insert(const Item & object, bool & Suc)
// Xen vào d li u object bi n Suc nh n giá tr trueữ ệ ế ậ ị
// n u phép xen thành công, và false n u th t b i.ế ế ấ ạ
Trang 22// N u th t b i, hàm tr v false và bi n index1 ghi l iế ấ ạ ả ề ế ạ
// ch s tr ng thái EMPTY ho c DELETED n u thăm dòỉ ố ở ạ ặ ế
// phát hi n ra.ệ
};
Hình 9.4 Đ nh nghĩa l p OpenHash.ị ớ
Bây gi chúng ta cài đ t các hàm thành ph n c a l p OpenHash Hàmờ ặ ầ ủ ớ
ki n t o b ng băm r ng đế ạ ả ỗ ược cài đ t nh sau:ặ ư
OpenHash < Item > ::OpenHash() {
for (int i = 0; i < SIZE; i++)
T[i].state = EMPTY;
}
Chú ý r ng, các phép toán tìm ki m, xen, lo i đ u c n ph i th c hi nằ ế ạ ề ầ ả ự ệthăm dò đ phát hi n ra d li u c n tìm ho c đ phát hi n ra v trí r ngể ệ ữ ệ ầ ặ ể ệ ị ỗ(ho c b trí đã lo i b ) đ đ a vào d li u m i Vì v y, trong l p OpenHashặ ị ạ ỏ ể ư ữ ệ ớ ậ ớchúng ta đã đ a vào hàm n Find S d ng hàm Find ta d dàng cài đ tư ẩ ử ụ ễ ặ
được các hàm Search, Insert và Delete Trước h t chúng ta cài đ t hàmế ặFind Trong hàm Find khi mà quá trình thăm dò phát hi n ra v trí r ng thìệ ị ỗ
có nghĩa là b ng không ch a d li u c n tìm, song trả ứ ữ ệ ầ ước khi đ t t i v tríạ ớ ị
r ng có th ta đã phát hi n ra các v trí đã lo i b , bi n index1 sẽ ghi l i vỗ ể ệ ị ạ ỏ ế ạ ịtrí đã lo i b đ u tiên đã phát hi n ra Còn n u phát hi n ra v trí r ng,ạ ỏ ầ ệ ế ệ ị ỗ
nh ng trư ước đó ta không g p v trí đã lo i b nào, thì bi n index1 sẽ ghi l iặ ị ạ ỏ ế ạ
v trí r ng Hàm Find đị ỗ ược cài đ t nh sau:ặ ư
bool OpenHash < Item > ::Find(keyType k, int & index, int & index1) { int i = Hash(k);
index = 0;
index1 = i;
for (int m = 0; m < SIZE; m++) {
int n = Probing(i, m); // v trí thăm dò l n th m.ị ở ầ ứ
if (T[n].state = = ACTIVE && T[n].data.key = = k) {
Trang 23int ind, ind1;
if (Find(k, ind, ind1)) {
if (!Find(object.key, ind, ind1))
if (T[ind1].state = = DELETED || T[ind1].state = = EMPTY) {
void OpenHash < Item > ::Delete(keyType k) {
int ind, ind1;
Trang 24if (Find(k, ind, ind1))
T[ind].state = DELETED;
}
Trên đây chúng ta đã cài đ t b ng băm đ a ch m b i m ng có c cặ ả ị ỉ ở ở ả ỡ ố
đ nh H n ch c a cách này là, phép toán Insert có th không th c hi nị ạ ế ủ ể ự ệ
được do m ng đ y ho c có th m ng không đ y nh ng thăm dò khôngả ầ ặ ể ả ầ ưphát hi n ra v trí r ng ho c v trí đã lo i b đ đ t d li u vào Câu h iệ ị ỗ ặ ị ạ ỏ ể ặ ữ ệ ỏ
đ t ra là, chúng ta có th cài đ t b i m ng đ ng nh chúng ta đã làm khiặ ể ặ ở ả ộ ưcài đ t KDLTT t p đ ng (xem 4.4) Câu tr l i là có, tuy nhiên cài đ t b ngặ ậ ộ ả ờ ặ ảbăm b i m ng đ ng sẽ ph c t p h n, vì các lý do sau:ở ả ộ ứ ạ ơ
• C c a m ng c n là s nguyên t , do đó chúng ta c n tìm s nguyênỡ ủ ả ầ ố ố ầ ố
t ti p theo SIZE làm c c a m ng m i.ố ế ỡ ủ ả ớ
• Hàm băm ph thu c vào c c a m ng, chúng ta không th sao chépụ ộ ỡ ủ ả ể
m t cách đ n gi n m ng cũ sang m ng m i nh chúng ta đãộ ơ ả ả ả ớ ưlàm trước đây, mà c n ph i s d ng hàm Insert đ xen t ng d li u c aầ ả ử ụ ể ừ ữ ệ ủ
b ng cũ sang b ng m iả ả ớ
9.5 CÀI Đ T B NG BĂM DÂY CHUY N Ặ Ả Ề
Trong m c này chúng ta sẽ cài đ t KDLTT t đi n b i b ng băm dâyụ ặ ừ ể ở ảchuy n L p ChainHash ph thu c tham bi n ki u Item v i các gi thi tề ớ ụ ộ ế ể ớ ả ế
nh trong m c 9.4 L p này đư ụ ớ ược đ nh nghĩa trong hình 9.5.ị
bool Search(keyType k, Item & I) const;
void Insert(const Item & object, bool & Suc);
}; // C u trúc t bào trong dây chuy n.ấ ế ề
Cell * T[SIZE]; // M ng các con tr tr đ u các dây chuy nả ỏ ỏ ầ ề
};
Trang 25Sau đây chúng ta cài đ t các hàm thành ph n c a l p ChainHash Đặ ầ ủ ớ ể
kh i t o ra b ng băm r ng, chúng ta ch c n đ t các thành ph n trongở ạ ả ỗ ỉ ầ ặ ầ
Hàm ki n t o m c đ nh nh sau:ế ạ ặ ị ư
ChainHash < Item > ::ChainHash() {
for (int i = 0; i < SIZE; i++)
T[i] = NULL;
}
Các hàm tìm ki m, xen, lo i đế ạ ược cài đ t r t đ n gi n, sau khi bămặ ấ ơ ảchúng ta ch c n áp d ng các kỹ thu t tìm ki m, xen, lo i trên các DSLK.ỉ ầ ụ ậ ế ạCác hàm Search, Insert và Delete được xác đ nh dị ưới đây:
bool ChainHash < Item > ::Search(keyType k, Item & I) {
Trang 26Sau đây chúng ta sẽ đánh giá th i gian trung bình cho các phép toán tờ ừ
đi n Đánh giá này d a trên gi thi t hàm băm phân ph i đ u các khoá vàoể ự ả ế ố ềcác v trí trong b ng băm (uniform hashing) Chúng ta sẽ s d ng m t thamị ả ử ụ ộ
s , đố α ược g i là m c đ đ y (load factor) M c đ đ y là t s gi a sọ ứ ộ ầ ứ ộ ầ α ỷ ố ữ ố
d li u hi n có trong b ng băm và c c a b ng, t c là = N/SIZEữ ệ ệ ả ỡ ủ ả ứ α
trong đó, N là s d li u trong b ng Rõ ràng là, khi tăng thì khố ữ ệ ả α ảnăng x y ra va ch m sẽ tăng, đi u này kéo theo th i gian tìm ki m sẽ tăng.ẩ ạ ề ờ ế
Nh v y hi u qu c a các phép toán ph thu c vào m c đ đ y Khi cư ậ ệ ả ủ ụ ộ ứ ộ ầ α ỡ
m ng c đ nh, hi u qu sẽ gi m n u s d li u N tăng lên Vì v y, trongả ố ị ệ ả ả ế ố ữ ệ ậ
Trang 27th c hành thi t k b ng băm, chúng ta c n đánh giá s t i đa các d li uự ế ế ả ầ ố ố ữ ệ
c n l u đ l a ch n c SIZE sao cho đ nh M c đ đ y không nênầ ư ể ự ọ ỡ α ủ ỏ ứ ộ ầ α
vượt quá 2/3
Th i gian tìm ki m cũng ph thu c s tìm ki m là thành công hayờ ế ụ ộ ự ế
th t b i Tìm ki m th t b i đòi h i nhi u th i gian h n tìm ki m thànhấ ạ ế ấ ạ ỏ ề ờ ơ ếcông, ch ng h n trong b ng băm dây chuy n chúng ta ph i xem xét toànẳ ạ ả ề ả
b m t dây chuy n m i bi t không có d li u trong b ng.ộ ộ ề ớ ế ữ ệ ả
D.E Knuth (trong The art of computer programming, vol3) đã phântích và đ a ra các công th c đánh giá hi u qu cho t ng phư ứ ệ ả ừ ương pháp gi iảquy t va ch m nh sau.ế ạ ư
Th i gian tìm ki m trung bình trên b ng băm đ a ch m s d ngờ ế ả ị ỉ ở ử ụthăm dò tuy n tính S trung bình các l n thăm dò cho tìm ki m x p x là:ế ố ầ ế ấ ỉ
Ví d N u c b ng băm SIZE = 811, b ng ch a N = 649 d li u, thìụ ế ỡ ả ả ứ ữ ệ
m c đ đ y là = 649/811 ≈ 80 % Khi đó, đ tìm ki m thành công m tứ ộ ầ α ể ế ộ
d li u, trung bình ch đòi h i xem xét 3 v trí m ng, vìữ ệ ỉ ỏ ị ả
Th i gian tìm ki m trung bình trên b ng băm đ a ch m s d ngờ ế ả ị ỉ ở ử ụthăm dò bình phương (ho c băm kép) S trung bình các l n thăm dò choặ ố ầtìm ki m đế ược đánh giá là
Phương pháp thăm dò này đòi h i s l n thăm dò ít h n phỏ ố ầ ơ ươngpháp thăm dò tuy n tính Ch ng h n, gi s b ng đ y t i 80%, đ tìmế ẳ ạ ả ử ả ầ ớ ể
ki m thành công trung bình ch đòi h i xem xét 2 v trí m ng,ế ỉ ỏ ị ả
Th i gian tìm ki m trung bình trên b ng băm dây chuy n Trongờ ế ả ề
b ng băm dây chuy n, đ xen vào m t d li u m i, ta ch c n đ t d li uả ề ể ộ ữ ệ ớ ỉ ầ ặ ữ ệvào đ u m t dây chuy n đầ ộ ề ược đ nh v b i hàm băm Do đó, th i gian xenị ị ở ờ
Đ tìm ki m (hay lo i b ) m t d li u, ta c n xem xét các t bào trongể ế ạ ỏ ộ ữ ệ ầ ế
m t dây chuy n Độ ề ương nhiên là dây chuy n càng ng n thì tìm ki m càngề ắ ếnhanh Đ dài trung bình c a m t dây chuy n là N/SIZE = (v i gi thi tộ ủ ộ ề α ớ ả ếhàm băm phân ph i đ u).ố ề
Khi tìm ki m thành công, chúng ta c n bi t dây chuy n có r ngế ầ ế ề ỗkhông, r i c n xem xét trung bình là m t n a dây chuy n Do đó, s trungồ ầ ộ ử ề ốbình các v trí c n xem xét khi tìm ki m thành công là 1 + /2ị ầ ế α
N u tìm ki m th t b i, có nghĩa là ta đã xem xét t t c các t bàoế ế ấ ạ ấ ả ếtrong m t dây chuy n nh ng không th y d li u c n tìm, do đó s trungộ ề ư ấ ữ ệ ầ ốbình các v trí c n xem xét khi tìm ki m th t b i là ị ầ ế ấ ạ α
B NH STACK VÀ B NH HEAP (JAVA) Ộ Ớ Ộ Ớ
Trước khi nói v chuy n gì x y ra khi ta t o m t đ i tề ệ ả ạ ộ ố ượng, ta c nầnói v hai vùng b nh stack và heap và cái gì đề ộ ớ ượ ưc l u tr đâu Đ i v iữ ở ố ớJava, heap và stack là hai vùng b nh mà l p trình viên c n quan tâm.ộ ớ ậ ầ
Trang 28Heap là n i c a các đ i tơ ở ủ ố ượng, còn stack là ch c a các phỗ ủ ương th c vàứ
bi n đ a phế ị ương Máy o Java toàn quy n qu n lý hai vùng b nh này.ả ề ả ộ ớ
L p trình viên không th và không c n can thi p.ậ ể ầ ệ
Đ u tiên, ta hãy phân bi t rõ ràng bi n th c th và bi n đ a phầ ệ ế ự ể ế ị ương,chúng là cái gì và s ng đâu trong stack và heap N m v ng ki n th c này,ố ở ắ ữ ế ứ
ta sẽ d dàng hi u rõ nh ng v n đ nh ph m vi c a bi n, vi c t o đ iễ ể ữ ấ ề ư ạ ủ ế ệ ạ ố
tượng, qu n lý b nh , lu ng, x lý ngo i l nh ng đi u căn b n mà m tả ộ ớ ồ ử ạ ệ ữ ề ả ộ
l p trình viên c n n m đậ ầ ắ ược (mà ta sẽ h c d n trong chọ ầ ương này và
Bi n th c th đế ự ể ược khai báo bên trong m t l p ch không ph i bên trongộ ớ ứ ả
m t phộ ương th c Chúng đ i di n cho các trứ ạ ệ ường d li u c a m i đ iữ ệ ủ ỗ ố
tượng (mà ta có th đi n các d li u khác nhau cho các th c th khác nhauể ề ữ ệ ự ể
c a l p đó) Các bi n th c th s ng bên trong đ i tủ ớ ế ự ể ố ố ượng ch c a chúng.ủ ủ
Bi n đ a phế ị ương, trong đó có các tham s , đố ược khai báo bên trong
m t phộ ương th c Chúng là các bi n t m th i, chúng s ng bên trong khungứ ế ạ ờ ố
b nh c a phộ ớ ủ ương th c và ch t n t i khi phứ ỉ ồ ạ ương th c còn n m trong bứ ằ ộ
nh stack, nghĩa là khi phớ ương th c đang ch y và ch a ch y đ n ngo cứ ạ ư ạ ế ặ
k t thúc (})ế
V y còn các bi n đ a phậ ế ị ương là các đ i tố ượng? Nh l i r ng trongớ ạ ằJava m t bi n thu c ki u không c b n th c ra là m t tham chi u t i m tộ ế ộ ể ơ ả ự ộ ế ớ ộ
đ i tố ượng ch không ph i chính đ i tứ ả ố ượng đó Do đó, bi n đ a phế ị ương đó
v n n m trong stack, còn đ i tẫ ằ ố ượng mà nó chi u t i v n n m trong heap.ế ớ ẫ ằ
B t k tham chi u đấ ể ế ược khai báo đâu, là bi n đ a phở ế ị ương c a m tủ ộ
phương th c hay là bi n th c th c a m t l p, đ i tứ ế ự ể ủ ộ ớ ố ượng mà nó chi u t iế ớbao gi cũng n m trong heap.ờ ằ
V y bi n th c th n m đâu? Các bi n th c th đi kèm theo t ngậ ế ự ể ằ ở ế ự ể ừ
đ i tố ượng, chúng s ng bên trong vùng b nh c a đ i tố ộ ớ ủ ố ượng ch t i heap.ủ ạ
M i khi ta g i new Cow(), Java c p phát b nh cho đ i tỗ ọ ấ ộ ớ ố ượng Cow đó t iạheap, lượng b nh độ ớ ược c p phát đ ch đ l u giá tr c a t t c cácấ ủ ỗ ể ư ị ủ ấ ả
bi n th c th c a đ i tế ự ể ủ ố ượng đó
N u bi n th c th thu c ki u c b n, vùng b nh đế ế ự ể ộ ể ơ ả ộ ớ ược c p phátấcho nó có kích thước tùy theo kích thước c a ki u d li u nó đủ ể ữ ệ ược khaibáo Ví d m t bi n int c n 32 bit.ụ ộ ế ầ
Còn n u bi n th c th là đ i tế ế ự ể ố ượng thì sao? Ch ng h n, Car HAS-Aẳ ạEngine (ô tô có m t đ ng c ), nghĩa là m i đ i tộ ộ ơ ỗ ố ượng Car có m t bi n th cộ ế ự
th là tham chi u ki u Engine Java c p phát b nh bên trong đ i tể ế ể ấ ộ ớ ố ượngCar đ đ l u bi n tham chi u engine Còn b n thân bi n này sẽ chi u t iủ ể ư ế ế ả ế ế ớ
m t đ i tộ ố ượng Engine n m bên ngoài, ch không ph i bên trong, đ iằ ứ ả ố
tượng Car
Trang 29V y khi nào đ i tậ ố ượng Engine đượ ấc c p phát b nh trong heap? Khiộ ớnào l nh new Engine() cho nó đệ ược ch y Ch ng h n, trong ví d hình bênạ ẳ ạ ụ
dưới, đ i tố ượng Engine đượ ạc t o m i đ kh i t o giá tr cho bi n th c thớ ể ở ạ ị ế ự ểengine, l nh kh i t o n m ngay trong khai báo l p Car.ệ ở ạ ằ ớ
Còn trong ví d bên dụ ưới, không có đ i tố ượng Engine nào đượ ạc t okhi đ i tố ượng Car được c p phát b nh , engine không đấ ộ ớ ược kh i t o Taở ạ
sẽ c n đ n các l nh riêng bi t sau đó đ t o đ i tầ ế ệ ệ ở ể ạ ố ượng Engine và gán trịcho engine, ch ng h n nh c.engine = new Engine();ẳ ạ ư
Máy o Java – Java Virtual Machine ả
Ngôn ng máy bao g m nh ng ch th (instruction) r t đ n gi n màữ ồ ữ ỉ ị ấ ơ ảCPU máy tính có th th c hi n tr c ti p Tuy nhiên, h u h t các chể ự ệ ự ế ầ ế ươngtrình đ u đề ược vi t b ng các ngôn ng l p trình b c cao nh Java hay C++.ế ằ ữ ậ ậ ư
M t chộ ương trình vi t b ng ngôn ng b c cao c n đế ằ ữ ậ ầ ược d ch sang ngônị
ng máy trữ ước khi có th để ược ch y trên máy tính Vi c d ch này do trìnhạ ệ ịbiên d ch th c hi n Đ ch y trên các lo i máy tính v i các ngôn ng máyị ự ệ ể ạ ạ ớ ữkhác nhau, c n đ n các trình biên d ch phù h p v i lo i ngôn ng máy đó.ầ ế ị ợ ớ ạ ữ
Có m t l a ch n khác thay vì biên d ch chộ ự ọ ị ương trình vi t b ng ngônế ằ
ng b c cao Thay vì dùng m t trình biên d ch đ d ch th ng toàn bữ ậ ộ ị ể ị ẳ ộ
chương trình, ta có th dùng m t trình thông d ch, nó d ch t ng ch th m tể ộ ị ị ừ ỉ ị ộ
và ch d ch khi c n đ n M t trình thông d ch là m t chỉ ị ầ ế ộ ị ộ ương trình ho tạ
đ ng g n nh m t CPU v i m t d ng chu trình n p-và-th c-thi (fetch-ộ ầ ư ộ ớ ộ ạ ạ ựand-execute) Đ th c thi m t chể ự ộ ương trình, trình thông d ch l p đi l p l iị ặ ặ ạchu i công vi c: đ c m t ch th t trong chỗ ệ ọ ộ ỉ ị ừ ương trình, xác đ nh xem c nị ầlàm gì đ th c hi n ch th đó, và r i th c hi n các l nh mã máy thích h pể ự ệ ỉ ị ồ ự ệ ệ ợ
đ th c hi n ch th đó.ể ự ệ ỉ ị
M t công d ng c a trình thông d ch là đ th c thi các chộ ụ ủ ị ể ự ương trình
vi t b ng ngôn ng b c cao, ch ng h n nh ngôn ng Lisp Công d ng thế ằ ữ ậ ẳ ạ ư ữ ụ ứhai là chúng cho phép ta ch y m t chạ ộ ương trình ngôn ng máy dành choữ
m t lo i máy tính này trên m t lo i máy tính hoàn toàn khác Ví d , có m tộ ạ ộ ạ ụ ộ
chương trình tên là "Virtual PC" ch y trên các máy tính cài h đi u hànhạ ệ ềMac OS, đó là m t trình thông d ch th c thi các chộ ị ự ương trình mã máy vi tếcho các máy tính tương thích IBM PC N u ta ch y "Virtual PC" trên m tế ạ ộmáy Mac OS, ta có th ch y b t c chể ạ ấ ứ ương trình PC nào, trong đó có c cácả
chương trình vi t cho Windows.ế
Nh ng ngữ ười thi t k Java ch n cách t h p gi a trình biên d ch vàế ế ọ ổ ợ ữ ịtrình thông d ch Các chị ương trình vi t b ng Java đế ằ ược biên d ch thành mãịmáy, nh ng đây là lo i ngôn ng máy dành cho lo i máy tính không t n t iư ạ ữ ạ ồ ạ– lo i máy " o" này đạ ả ược g i là Máy o Java (Java Virtual Machine – JVM).ọ ảNgôn ng máy dành cho máy o Java đữ ả ược g i là Java bytecode, hay ng nọ ắ
Trang 30g n là bytecode Đ ch y đọ ể ạ ược các chương trình Java trên m t lo i máyộ ạtính b t kì, ngấ ười ta ch c n m t trình thông d ch dành cho Java bytecode,ỉ ầ ộ ịtrình thông d ch này gi l p máy o Java theo ki u mà Virtual PC gi l pị ả ậ ả ể ả ậ
m t máy tính PC Máy o Java cũng chính là tên g i dành cho trình thôngộ ả ọ
d ch bytecode th c hi n nhi m v gi l p, do đó ta nói r ng m t máy tínhị ự ệ ệ ụ ả ậ ằ ộ
c n m t máy o Java đ ch y các chầ ộ ả ể ạ ương trình Java
T t nhiên, m i lo i máy tính c n m t trình thông d ch Java bytecodeấ ỗ ạ ầ ộ ịkhác, nh ng m t khi đã có m t trình thông d ch nh v y, nó có th ch yư ộ ộ ị ư ậ ể ạ
m t chộ ương trình Java bytecode b t kì Và cũng chính chấ ương trình Javabytecode đó có th ch y trên b t c máy tính nào có m t trình thông d chể ạ ấ ứ ộ ịJava bytecode Đây chính là m t trong các đ c đi m quan tr ng c a Java:ộ ặ ể ọ ủ
m t chộ ương trình sau khi biên d ch có th ch y trên nhi u lo i máy tínhị ể ạ ề ạkhác nhau
Có nhi u lý do t i sao nên dùng mã trung gian là Java bytecode thayề ạcho vi c phân phát mã ngu n chệ ồ ương trình Java và đ cho m i ngể ỗ ườ ựi tbiên d ch nó sang mã máy c a máy tính h đang dùng Th nh t, trình biênị ủ ọ ứ ấ
d ch là m t chị ộ ương trình ph c t p trong khi trình thông d ch ch là m tứ ạ ị ỉ ộ
chương trình nh và đ n gi n Vi t m t trình thông d ch cho m t lo i máyỏ ơ ả ế ộ ị ộ ạtính m i d h n là vi t m t trình biên d ch Th hai, nhi u chớ ễ ơ ế ộ ị ứ ề ương trìnhJava c n đầ ượ ảc t i xu ng t m ng máy tính Vi c này d n đ n các m i quanố ừ ạ ệ ẫ ế ốtâm d th y v b o m t: ta không mu n t i v và ch y m t chễ ấ ề ả ậ ố ả ề ạ ộ ương trình
sẽ phá ho i máy tính ho c các file trong máy tính c a ta Trình thông d chạ ặ ủ ịbytecode ho t đ ng v i vai trò b đ m gi a máy tính c a ta và chạ ộ ớ ộ ệ ữ ủ ươngtrình ta t i v Nó có th b o v ta kh i các hành đ ng nguy hi m ti mả ề ể ả ệ ỏ ộ ể ềtàng c a chủ ương trình đó
Khi Java còn là m t ngôn ng m i, nó đã b ch trích là ch y ch m Doộ ữ ớ ị ỉ ạ ậJava bytecode được th c thi b i m t trình thông d ch, có v nh cácự ở ộ ị ẻ ư
chương trình bytecode không bao gi có th ch y nhanh b ng các chờ ể ạ ằ ươngtrình đã được biên d ch ra ngôn ng máy c a chính máy tính mà chị ữ ủ ươngtrình đang ch y trên đó Tuy nhiên, v n đ này đã đạ ấ ề ược gi i quy t g n nhả ế ầ ưtoàn b b ng vi c s d ng trình biên d ch JIT (just-in-time compiler) choộ ằ ệ ử ụ ị
vi c th c thi Java bytecode Trình biên d ch JIT d ch Java bytecode thành mãệ ự ị ịmáy Nó làm vi c này trong khi th c thi chệ ự ương trình
Cũng nh m t trình thông d ch thông thư ộ ị ường, đ u vào cho m t trìnhầ ộbiên d ch JIT là m t chị ộ ương trình Java bytecode, và nhi m v c a nó làệ ụ ủ
th c thi chự ương trình đó Nh ng trong khi th c thi chư ự ương trình, nó d chị
m t ph n c a chộ ầ ủ ương trình ra mã máy Nh ng ph n đữ ầ ược biên d ch nàyịkhi đó có th để ược th c thi nhanh h n là so v i khi chúng đự ơ ớ ược thông d ch.ị
Do m t ph n c a chộ ầ ủ ương trình thường được th c thi nhi u l n trong khiự ề ầ
Trang 31chương trình ch y, m t trình biên d ch JIT có th c i thi n đáng k t ngạ ộ ị ể ả ệ ể ổ
th i gian ch y c a chờ ạ ủ ương trình
Đ I T Ố ƯỢ NG VÀ L P (L p trình h Ớ ậ ướ ng đ i t ố ượ ng)
G n nh b t c th gì cũng có th đầ ư ấ ứ ứ ể ược mô hình hóa b ng m t đ iằ ộ ố
tượng.Ch ng h n, m t màu, m t hình vẽ, m t cái nhi t k ẳ ạ ộ ộ ộ ệ ế
M i đ i tỗ ố ượng có m t t p các thu c tính (attribute) nh các giá trộ ậ ộ ư ịhay tr ng thái đ mô hình hóa đ i tạ ể ố ượng đó Ch ng h n, m t cái nhi t kẳ ạ ộ ệ ế
có th có thu c tính là v trí hi n t i c a nó và tr ng thái hi n t i t t hayể ộ ị ệ ạ ủ ạ ệ ạ ắ
b t, các thu c tính m t màu có th là giá tr c a ba thành ph n RGB c aậ ộ ộ ể ị ủ ầ ủ
nó M t cái ô tô có các thu c tính nh : lộ ộ ư ượng xăng hi n có, t c đ hi n t i,ệ ố ộ ệ ạ
bi n s ể ố
M i đ i tỗ ố ượng có m t t p các trách nhi m mà nó th c hi n b ngộ ậ ệ ự ệ ằcách cung c p d ch v cho các đ i tấ ị ụ ố ượng khác Các d ch v này có th choị ụ ểphép truy v n thông tin ho c làm thay đ i tr ng thái c a đ i tấ ặ ổ ạ ủ ố ượng Ví d ,ụnhi t k cho phép truy v n v tình tr ng t t/b t c a nó; đáp ng các yêuệ ế ấ ề ạ ắ ậ ủ ứ
c u v nhi t đ hi n hành mà nó đo đầ ề ệ ộ ệ ược, yêu c u t t/b t M t cái ô tôầ ắ ậ ộcho phép tăng ga, gi m ga đ tăng/gi m t c đ di chuy n.ả ể ả ố ộ ể
Đ i v i thi t k t t, các đ i tố ớ ế ế ố ố ượng bên ngoài không ph i quan tâmảxem m t đ i tộ ố ượng nào đó cài đ t m t d ch v nh th nào, mà ch c nặ ộ ị ụ ư ế ỉ ầ
bi t đ i tế ố ượng đó cung c p nh ng d ch v nào (hay nó có nh ng tráchấ ữ ị ụ ữnhi m gì) Ch ng h n, ngệ ẳ ạ ười lái xe không c n bi t c ch chuy n đ i tầ ế ơ ế ể ổ ừ
l c nh n lên chân đ p ga sang s thay đ i v t c đ c a ô tô.ự ấ ạ ự ổ ề ố ộ ủ
Trong m i ng d ng, các đ i tỗ ứ ụ ố ượng có đ c đi m tặ ể ương t nhau,ự
ch ng h n các tài kho n ngân hàng, các sinh viên, các máy ATM, nh ngẳ ạ ả ữchi c ô tô đế ượ ếc x p vào cùng m t nhóm, đó là l p (class) M i l p là đ c tộ ớ ỗ ớ ặ ảcác đ c đi m c a các đ i tặ ể ủ ố ượng thu c l p đó C th , m t đ nh nghĩa l pộ ớ ụ ể ộ ị ớ
mô t t t c các thu c tính c a các đ i tả ấ ả ộ ủ ố ượng thành viên c a l p đó và cácủ ớ
phương th c th c thi hành vi c a các đ i tứ ự ủ ố ượng đó Ví d , ta có th cóụ ểnhi u đ i tề ố ượng ô tô v i thông s khác nhau v lớ ố ề ượng xăng hi n có, t c đệ ố ộ
hi n t i, và bi n s xe; đ nh nghĩa l p ô tô mô t đ c đi m chung c a cácệ ạ ể ố ị ớ ả ặ ể ủthông s đó cùng v i các phố ớ ương th c th c hi n các ho t đ ng tăng t c,ứ ự ệ ạ ộ ố
gi m t c.ả ố
Quan h gi a l p và đ i tệ ữ ớ ố ượng g n gi ng nh quan h gi a ki u dầ ố ư ệ ữ ể ữ
li u và các bi n thu c ki u d li u đó Các đ i tệ ế ộ ể ữ ệ ố ượng được t o ra khiạ
chương trình ch y, và l p là khuôn m u mà t đó có th t o ra các đ iạ ớ ẫ ừ ể ạ ố
tượng thu c l p đó M i đ i tộ ớ ỗ ố ượng đượ ạc t o ra t m t l p đừ ộ ớ ượ ọc g i là m tộ
th c th (instance) c a l p đó M t chự ể ủ ớ ộ ương trình khi được vi t là s k tế ự ế
h p c a các l p khác nhau Còn khi ch y, nó là m t t p h p các đ i tợ ủ ớ ạ ộ ậ ợ ố ượng
Trang 32ho t đ ng và tạ ộ ương tác v i nhau, các đ i tớ ố ượng này được sinh ra t các l pừ ớ
c u thành nên chấ ương trình đó
M i đ i tỗ ố ượng đ u có m t th i gian s ng Trong khi chề ộ ờ ố ương trình
ch y, đ i tạ ố ượng đượ ạc t o và kh i t o giá tr theo yêu c u Ngay khi m t đ iở ạ ị ầ ộ ố
tượng đượ ạc t o ra, h th ng t đ ng g i m t hàm kh i t o (constructor)ệ ố ự ộ ọ ộ ở ạ
đ kh i t o giá tr cho các thu c tính c a đ i tể ở ạ ị ộ ủ ố ượng K t đó, đ i tể ừ ố ượng
nh n đậ ược m t thông đi p chính là vi c m t phộ ệ ệ ộ ương th c c a nó đứ ủ ược
m t đ i tộ ố ượng khác g i Chọ ương trình khi ch y là m t t p các đ i tạ ộ ậ ố ượng,
m i đ i tỗ ố ượng g i thông đi p cho các đ i tử ệ ố ượng khác trong h th ng vàệ ốđáp ng các thông đi p mà mình nh n đứ ệ ậ ược Thông thường, m t thôngộ
đi p đệ ược g i b ng m t l i g i phử ằ ộ ờ ọ ương th c trong chứ ương trình Tuynhiên, các thông đi p có th xu t phát t h đi u hành ho c môi trệ ể ấ ừ ệ ề ặ ường
ch y chạ ương trình Ch ng h n khi ngẳ ạ ười dùng click chu t vào m t nútộ ộ
b m t i m t c a s chấ ạ ộ ử ổ ương trình, m t thông đi p sẽ độ ệ ược g i đ n đ iử ế ố
tượng đi u khi n nút b m đó thông báo r ng cái nút đó đã b nh n.ề ể ấ ằ ị ấ
CÁC NGUYÊN T C TR C T C A L P TRÌNH H Ắ Ụ Ộ Ủ Ậ ƯỚ NG Đ I Ố
T ƯỢ NG
L p trình hậ ướng đ i tố ượng có ba nguyên t c tr c t: đóng gói, th aắ ụ ộ ừ
k và đa hình, còn tr u tế ừ ượng hóa là khái ni m n n t ng.ệ ề ả
Tr u từ ượng hóa (abstraction) là m t c ch cho phép bi u di n m tộ ơ ế ể ễ ộtình hu ng ph c t p trong th gi i th c b ng m t mô hình đố ứ ạ ế ớ ự ằ ộ ược đ n gi nơ ảhóa Nó bao g m vi c t p trung vào các tính ch t quan tr ng c a m t đ iồ ệ ậ ấ ọ ủ ộ ố
tượng khi ph i làm vi c v i lả ệ ớ ượng l n thông tin Ví d , đ i v i m t conớ ụ ố ớ ộmèo trong ng c nh m t c a hàng bán thú c nh, ta có th t p trung vàoữ ả ộ ử ả ể ậ
gi ng mèo, màu lông, cân n ng, tu i, đã tiêm phòng d i hay ch a, và bố ặ ổ ạ ư ỏqua các thông tin khác nh dung tích ph i, n ng đ đư ổ ồ ộ ường trong máu,huy t áp, còn đ i v i m t con mèo trong ng c nh b nh vi n thú y thì l iế ố ớ ộ ữ ả ệ ệ ạ
là m t chuy n khác Các đ i tộ ệ ố ượng ta thi t k trong chế ế ương trình OOP sẽ làcác tr u từ ượng hóa theo nghĩa đó, ta b qua nhi u đ c đi m c a đ i tỏ ề ặ ể ủ ố ượng
th c và ch t p trung vào các thu c tính quan tr ng cho vi c gi i m t bàiự ỉ ậ ộ ọ ệ ả ộ
Trang 33toán c th Ngụ ể ười ta g i m t tr u tọ ộ ừ ượng hóa là m t mô hình c a m t đ iộ ủ ộ ố
tượng ho c khái ni m trong th gi i th c.ặ ệ ế ớ ự
Tr u từ ượng hóa là m t trong nh ng công c c b n c a t t c cácộ ữ ụ ơ ả ủ ấ ả
phương pháp l p trình, không ch l p trình hậ ỉ ậ ướng đ i tố ượng Khi vi t m tế ộ
chương trình gi i m t bài toán c a th gi i th c, tr u tả ộ ủ ế ớ ự ừ ượng hóa là m tộcách đ mô hình hóa bài toán đó.ể
Ví d , khi ta vi t m t chụ ế ộ ương trình qu n lý s đ a ch , ta sẽ dùng cácả ổ ị ỉ
tr u từ ượng hóa nh tên, đ a ch , s đi n tho i, th t b ng ch cái, và cácư ị ỉ ố ệ ạ ứ ự ả ữkhái ni m liên quan t i m t s đ a ch Ta sẽ đ nh nghĩa các thao tác đ xệ ớ ộ ổ ị ỉ ị ể ử
lý d li u ch ng h n nh thêm m t m c tên m i ho c s a m t đ a ch ữ ệ ẳ ạ ư ộ ụ ớ ặ ử ộ ị ỉTrong ng c nh l p trình, tr u tữ ả ậ ừ ượng hóa là mô hình hóa th gi i th cế ớ ựtheo cách mà nó có th để ược cài đ t dặ ướ ại d ng m t chộ ương trình máy tính
Phương pháp hướng đ i tố ượng tr u từ ượng hóa th gi i th c thànhế ớ ựcác đ i tố ượng và tương tác gi a chúng v i các đ i tữ ớ ố ượng khác Vi c môệhình hóa tr thành mô hình hóa các đ i tở ố ượng tham gia bài toán – m t cáiộnhi t k , m t ngệ ế ộ ười ch tài kho n ngân hàng, m t s đ a ch … m i đ iủ ả ộ ổ ị ỉ ỗ ố
tượng c n có đ các thu c tính và phầ ủ ộ ương th c đ th c hi n đứ ể ự ệ ượ ấ ảc t t ccác d ch v mà nó đị ụ ược yêu c u.ầ
Đóng gói (encapsulation): Các tr u từ ượng hóa c a nh ng gì có liênủ ữquan đ n nhau đế ược đóng gói vào trong m t đ n v duy nh t Các tr ngộ ơ ị ấ ạthái và hành vi c a các tr u tủ ừ ượng hóa được b c l i trong m t kh i g i làọ ạ ộ ố ọ
l p C th , sau khi đã xác đ nh đớ ụ ể ị ược các đ i tố ượng, r i đ n các thu c tínhồ ế ộ
và hành đ ng c a m i đ i tộ ủ ỗ ố ượng, m c tiêu là đóng gói trong m i đ i tụ ỗ ố ượngcác tính năng c n thi t đ nó có th th c hi n đầ ế ể ể ự ệ ược vai trò c a mình trongủ
chương trình Thí d , m t đ i tụ ộ ố ượng nhi t k c n có nh ng gì c n thi t đệ ế ầ ữ ầ ế ể
có th đo nhi t đ , l u tr s li u c a các l n đo nhi t đ trể ệ ộ ư ữ ố ệ ủ ầ ệ ộ ước và cho
Đ nh nghĩa l p là công c l p trình chính y u cho vi c th c hi n nguyênị ớ ụ ậ ế ệ ự ệ
t c đóng gói M t l p là mô t v m t t p h p các đ i tắ ộ ớ ả ề ộ ậ ợ ố ượng có cùng cácthu c tính, hành vi.ộ
Thu c tính (attribute)ộ dùng đ l u tr thông tin tr ng thái c a m tể ư ữ ạ ủ ộ
đ i tố ượng M t thu c tính có th ch đ n gi n là m t bi n Boolean l u trộ ộ ể ỉ ơ ả ộ ế ư ữ
tr ng thái t t ho c b t, hay ph c t p h n khi chính nó l i là m t đ iạ ắ ặ ậ ứ ạ ơ ạ ộ ố
tượng khác Các thu c tính độ ược khai báo trong đ nh nghĩa l p và đị ớ ược g iọ
là các bi n c a th c th (instance variable), g i t t là bi n th c th Chúngế ủ ự ể ọ ắ ế ự ểcòn đượ ọc g i là các thành viên d li u (data member), hay trữ ệ ường (field)
Tr ng thái (state)ạ ph n ánh các giá tr hi n t i c a các thu c tính c aả ị ệ ạ ủ ộ ủ
m t đ i tộ ố ượng và là k t qu c a hành vi c a đ i tế ả ủ ủ ố ượng đó theo th i gian.ờ
Trang 34Hành vi (behavior) là ho t đ ng c a m t đ i tạ ộ ủ ộ ố ượng mà có th nhìnể
th y đấ ượ ừc t bên ngoài Trong đó có vi c đ i tệ ố ượng thay đ i tr ng thái raổ ạsao ho c vi c nó tr v thông tin tr ng thái khi nó đặ ệ ả ề ạ ược thông đi p yêuệ
c u.ầ
Phương th c (method) là m t thao tác hay d ch v đứ ộ ị ụ ược th c hi n đ i v iự ệ ố ớ
đ i tố ượng khi nó nh n thông đi p tậ ệ ương ng Các phứ ương th c cài đ tứ ặhành vi c a đ i tủ ố ượng và được đ nh nghĩa trong đ nh nghĩa l p Phị ị ớ ương
th c còn đứ ược g i b ng các cái tên khác nh : hàm thành viên (memberọ ằ ưfunction) – g i t t là 'hàm', thao tác (operation), d ch v (service).ọ ắ ị ụ
Khái ni m đóng gói còn đi kèm v i khái ni m che gi u thông tinệ ớ ệ ấ(information hiding) nghĩa là che gi u các chi ti t bên trong c a m t đ iấ ế ủ ộ ố
tượng kh i th gi i bên ngoài Ch ng h n khi dùng m t cái c u dao đi n,ỏ ế ớ ẳ ạ ộ ầ ệ
đ i v i ngố ớ ườ ử ụi s d ng, nó ch là m t cái h p mà khi g t c n sẽ có tác d ngỉ ộ ộ ạ ầ ụ
ng t và n i đi n và cái h p có kh năng t ng t đi n khi quá t i Ngắ ố ệ ộ ả ự ắ ệ ả ườidùng không bi t và không c n bi t các m ch đi n bên trong đế ầ ế ạ ệ ược thi t kế ế
ra sao, c ch phát hi n quá t i nh th nào Nh ng chi ti t đó đơ ế ệ ả ư ế ữ ế ược gi uấbên trong, còn t bên ngoài ta ch nhìn th y c u dao là m t cái h p có c nừ ỉ ấ ầ ộ ộ ầ
g t.ạ
Nói theo phương di n l p trình, nhìn t bên ngoài m t mô-đun chệ ậ ừ ộ ỉ
th y đấ ược các giao di n Các l p trình viên t do cài đ t chi ti t bên trong,ệ ậ ự ặ ế
v i ràng bu c duy nh t là tuân theo giao di n đã đớ ộ ấ ệ ược quy ướ ừ ước t tr c Ta
có th th c hi n nguyên t c đóng gói v i t t c các ngôn ng l p trìnhể ự ệ ắ ớ ấ ả ữ ậ
hướng đ i tố ượng cũng nh các ngôn ng th t c Tuy nhiên, ch các ngônư ữ ủ ụ ỉ
ng hữ ướng đ i tố ượng m i cung c p c ch cho phép che gi u thông tin,ớ ấ ơ ế ấngăn không cho bên ngoài truy nh p vào chi ti t bên trong c a mô-đun.ậ ế ủ
Th a k (inheritance)ừ ế là quan h mang tính phân c p mà trong đóệ ấcác thành viên c a m t l p đủ ộ ớ ược k th a b i các l p đế ừ ở ớ ược d n xu t tr cẫ ấ ự
ti p ho c gián ti p t l p đó Đây là c ch cho phép đ nh nghĩa m t l pế ặ ế ừ ớ ơ ế ị ộ ớ
m i d a trên đ nh nghĩa c a m t l pớ ự ị ủ ộ ớ có s n, sao cho t t c các thành viênẵ ấ ả
c a l p "cũ" (l p c s hay l p cha) cũng có m t trong l p m i (l p d nủ ớ ớ ơ ở ớ ặ ớ ớ ớ ẫ
xu t hay l p con) và các đ i tấ ớ ố ượng thu c l p m i có th độ ớ ớ ể ược s d ngử ụthay cho đ i tố ượng c a l p cũ b t c đâu Th a k là m t hình th c táiủ ớ ở ấ ứ ừ ế ộ ứ
sử d ng ph n m m, trong đó m t l p m i đụ ầ ề ộ ớ ớ ược xây d ng b ng cách h pự ằ ấ
th các thành viên c a m t l p có s n và b sung nh ng tính năng m iụ ủ ộ ớ ẵ ổ ữ ớ
ho c s a tính năng có s n.ặ ử ẵ Nói cách khác, xu t phát t m t l p mô hìnhấ ừ ộ ớhóa m t khái ni m t ng quát h n, ch ng h n Shape, ta có th dùng quanộ ệ ổ ơ ẳ ạ ể
h th a k đ xây d ng các l p mô hình hóa các khái ni m c th h n,ệ ừ ế ể ự ớ ệ ụ ể ơ
ch ng h n Circle, Triangle B ng cách này, ta có th sẳ ạ ằ ể ử d ng giao di n cũngụ ệ
nh cài đ t c a l p cũ cho l p m i.ư ặ ủ ớ ớ ớ
Trang 35Đa hình (polymorphism), theo nghĩa t ng quát, là kh năng t n t i ổ ả ồ ạ ởnhi u hình th c Trong hề ứ ướng đ i tố ượng, đa hình đi kèm v i quan h th aớ ệ ừ
k và nó có nghĩa r ng cùng m t cái tên có th đế ằ ộ ể ược hi u theo các cáchểkhác nhau tùy t ng tình hu ng.ừ ố Các đ i tố ượng thu c các l p d n xu t khácộ ớ ẫ ấnhau có th để ược đ i x nh nhau, nh th chúng là các đ i tố ử ư ư ể ố ượng thu cộ
l p c s , ch ng h n có th đ t các đ i tớ ơ ở ẳ ạ ể ặ ố ượng Triangle và Circle trong cùng
m t c u trúc d li u dành cho Shape, ho c dùng cùng m t l i g i hàmộ ấ ữ ệ ặ ộ ờ ọrotate cho các đ i tố ượng Triangle hay Circle Và khi nh n đậ ược cùng m tộthông đi p đó, các đ i tệ ố ượng thu c các l p khác nhau hi u nó theo nh ngộ ớ ể ữcách khác nhau Ví d , khi nh n đụ ậ ược thông đi p "rotate", các đ i tệ ố ượngTriangle và Amoeba th c hi n các phự ệ ương th c rotate() khác nhau.ứ
từ th p niên 80ậ đ n nay.ế
II Nguyên t c chung ắ
Nguyên t c c a kỹắ ủ thu t này d a trênậ ự độ đ c hi u c a các enzim c tặ ệ ủ ắ
gi i h n (restriction enzim-RE)ớ ạ đ i v i vố ớ ị trí nh n bi t c a chúng trênậ ế ủDNA bộ gen Sự khác bi t vệ ị trí c t gi a hai cáắ ữ thể sẽ t o ra nh ngạ ữphân đo n c t khác nhau.ạ ắ
III Các enzim gi i h n (RE) ớ ạ
1 Gi i thi u ớ ệ
Enzim gi i h nớ ạ được Werner Arber tìm th yấ ở vi khu n vào nămẩ
1962 Ông cho r ng các RE cóằ khả năng r tấ đ c bi tặ ệ đó là khả năng nh nậ
bi t DNA chế ủ và DNA l Enzim này h n chạ ạ ế sự nhân lên c a DNA lủ ạ khichúng xâm nh p vào tậ ế bào vi khu n b ng cách c t chúng ra thànhẩ ằ ắ
t ngừ đo n m t cáchạ ộ đ c hi u, vìặ ệ thế ông g i làọ restriction có nghĩa là h nạ
ch V i phát minh này ông cùng các c ng sế ớ ộ ự (Daniel Nathans và Hamilton
O Smith) đã giành gi i thả ưởng Nobel vào năm 1978
Các RE h p thành hợ ệ th ng b o vố ả ệ ở tế bào sơ h ch (procaryote),ạ
m t câu h iộ ỏ đ t ra làặ vì sao các RE chỉ c t DNA c a các phage màắ ủ không c tắ
Trang 36DNA c a tủ ế bào vi khu n? Câu trẩ ả l i làờ nhờ Methylase đây là enzim giúp vikhu n cóẩ khả năng này, chính enzim này ch u trách nhi m g n nhóm metylị ệ ắ(CH3) vào các nucleotides ở vị trí c t c a các RE trên DNA c a vi khu nắ ủ ủ ẩ
vì thế b o vả ệ DNA c a vi khu n kh i sủ ẩ ỏ ự phân c t c a RE Tuy v yắ ủ ậ đôi lúcmethylase l i g n nh m cạ ắ ằ ả nhóm metyl vào chính DNA c a phage,ủ đi uềnày gi i thích vìả sao đ i v i các dòng vi khu n kháng phage v n cóố ớ ẩ ẫ các
EcoRI: là enzym đ u tiên tìm th y trên vi khu nầ ấ ẩ E coli
EcoRV: enzym thứ 5 tìm th y trên vi khu nấ ẩ E.coli
3 Các lo i enzim c t gi i h n ạ ắ ớ ạ
Lo i I: ạ khi enzym nh n bi t trình tậ ế ự nó sẽ di chuy n trên phânể
tử DNA cách đó 1000-5000 nu và gi i phóngả độ vài ch c nu.ụ
Lo i II ạ : enzym nh n bi t trình tậ ế ự và c t ngay vắ ị trí đó
Lo i III ạ : enzym nh n bi t trình tậ ế ự và c t DNAắ ở vị trí cách đó 20 nu
III Quy trình th c hi n RFLP bao g m các b ự ệ ồ ướ c:
+ Tách chi t vàế tinh s ch DNAạ
+ C t các m u DNA c n phân tích b i REắ ẫ ầ ở
+ Phân tách DNA trên gel agarose
+ Southern Blotting
Trang 37Chuy n DNA sang màng nylonể
Ch nọ đo n dòạ (probes), đánh d uấ đo n dòạ
Lai ghép gen (Hybridization)
L p b nậ ả đồ gen (phân tích đa hình)
1 Trích DNA
1 a Nguyên t c ắ : Thành tế bào bị phá vỡ b ng bi nằ ệpháp cơ h c vàọ các ch t t y m nh DNAấ ẩ ạ được gi i phóng vàả làm s ch t pạ ạ
ch t Rnase DNAấ được k t t a trong Ethanol 100% vàế ủ thu l i nhạ ờ ly tâm
2 b Quy trình: Th c hi n theo qui trìnhự ệ được mô tả b iởRogers và Bendich (1988) (qui trình CTAB) g m các bồ ướcsau:
– L y láấ c aủ đ i tố ượng c n nghiên c u.ầ ứ
– Khử trùng bề m t láặ b ng c n 70%, sauằ ồ đó dùng kéo và k pẹ(đã được khử trùng) c t láắ thành t ng m nh nhừ ả ỏ r i cho riêng vào các tuýpồ(m i m u riêng m t tuýp kho ng 0,1g).ỗ ẫ ộ ả
– Ngâm các tuýp và d ng cụ ụ nghi n m u vào nitề ẫ ơ l ng trong 10 phút.ỏ– Cho m u vào máy nghi n, cóẫ ề t n sầ ố 27l n/giây, l p l i kho ng 3ầ ậ ạ ả
– L y 800µl d ch trongấ ị ở trên cho vào tuýp m i (bớ ỏ ph n c n)ầ ặ
– Cho 800µl Isopropanol vào m i tuýp, l cỗ ắ đ u.ề
– Ủ m uẫ ở -20oC trong 2 gi ờ
– Ly tâm 13.000rpm trong 10 phút, bỏ nướ ấc, l y c n.ặ
– Cho thêm 400µl TE 0,1 vào, thêm 10µl RNase, ủ 20 phút ở 37oC.– Cho 400µl CTAB vào, ủ 15 phút ở 65oC
– Cho 800µl Chloroform/Isoamylalcohol, đ o nhả ẹ
(12ml Chloroform: 0,5ml Isoamylalcohol)
– Ly tâm 13.000rpm trong 5 phút
Trang 38– L y 700µl ph n trong chuy n sang tuýp m i.ấ ầ ể ớ
– Cho 1,4ml Ethanol 96% làm l nh vào, l c nh ,ạ ắ ẹ để 15phút ở nhi tệ độ phòng
– Ly tâm 13.000rpm trong 10 phút, bỏ nướ ấc, l y c n.ặ
– Cho 700µl Ethanol 70% làm l nh vào, l c nh ạ ắ ẹ
– Ly tâm 13.000rpm trong 10 phút, bỏ nướ ấc, l y c n.ặ
– L p l i l n n a v i Ethanol 70% làm l nh, th m mi ng tuýp trênặ ạ ầ ữ ớ ạ ấ ệ
– D a vào sự ự h p thấ ụ m nhạ ánh sáng tử ngo iạ ở bước sóng 260 nm
và 280 nm c a các bazủ ơ purin và pyrimidin
– Đ n vơ ị OD260 nm tươ ng n ngngứ ồ độ 50mg/ml cho m t dung d chộ ịDNA s iợ đôi Do đó n ngồ độ DNA trong m uẫ được tính theo công th c sau:ứ[DNA] (mg/ml) = OD260nm x 50 x Độ pha loãng
– Để ki m traể độ tinh s ch c a dung d ch cóạ ủ ị thể đo thêm giá trị OD280nm
– Dung d ch axit nucleicị được xem là s ch (không l n protein) khiạ ẫ
tỷ số : OD260nm/OD280nm n m trong không 1.8ằ – 2
2 Dùng enzim gi i h n c t DNA ớ ạ ắ
M t s ộ ố quy t c khi th c hi n ph n ắ ự ệ ả ng c t b ng RE ứ ắ ằ
N ngồ độ NaCl c a dung d chủ ị đ m, n u ph i sệ ế ả ử d ng nhi u REụ ề
có n ngồ độ NaCl c a dung d chủ ị đ m khác nhau thìệ nên c t v i REắ ớ
có n ngồ độ NaCl th p trấ ướ ồ đ n RE c n NaCl n ngc r i ế ầ ồ độ cao h n.ơ
RE được b o qu n trong dung d chả ả ị đ m cóệ 50% glycerol ở -200C, nênthêm vào ph nả ng sau cùng, th i gianứ ờ để bên ngoài càng ng n càng t t.ắ ố