1. Trang chủ
  2. » Cao đẳng - Đại học

5 ngôn ngữ java

77 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Phân Tích Thuật Toán
Định dạng
Số trang 77
Dung lượng 139,55 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

PHÂ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 2

t 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 3

thu 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 4

và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 5

toá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 7

1,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 8

Ví 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 9

cá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 11

2 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 13

trá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 14

Hì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 16

9.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 17

9.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 18

li 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 19

toá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 20

h 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 21

toá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 23

int 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 24

if (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 25

Sau đâ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 26

Sau đâ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 27

th 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 28

Heap 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 29

V 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 30

g 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 31

chươ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 32

ho 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 33

toá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 34

Hà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 36

DNA 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 37

Chuy 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.ắ ố

Ngày đăng: 10/10/2022, 05:50

HÌNH ẢNH LIÊN QUAN

Hình 9.4. Đ nh nghĩa lp OpenHash. ớ - 5  ngôn ngữ java
Hình 9.4. Đ nh nghĩa lp OpenHash. ớ (Trang 22)
Quan sát và ch p hình: Bn gel ụả được quan sát dưới ánh sáng tử ngo iạ                       λ = 260-360 nm  trên bộ đ c gel bio-rad - 5  ngôn ngữ java
uan sát và ch p hình: Bn gel ụả được quan sát dưới ánh sáng tử ngo iạ λ = 260-360 nm trên bộ đ c gel bio-rad (Trang 73)
w