Ứng dụng bảng băm trong từ điển
MỞ ĐẦU
1. LÝ DO, MỤC ĐÍCH CHỌN ĐỀ TÀI
Phép băm là một bài toán cổ điển của khoa học máy tính, đã có nhiều thuật toán
khác nhau được nghiên cứu và được dùng rất rộng rãi. Có một số lượng lớn những
phân tích và kinh nghiệm để cung cấp các thủ tục băm cho rất nhiều ứng dụng khác
nhau. Hàm băm một hàm mạnh trong mã hóa, chữ kí điện từ, xác nhận tính toàn vẹn
của thông điệp…
Phép băm là một thí dụ tốt về vấn đề dung hoà giữa thời gian chạy và dung lượng
bộ nhớ sử dụng. Nếu không có sự giới hạn về bộ nhớ thì chúng ta có thể thực hiện bất
kỳ một thao tác tìm kiếm nào chỉ với một lần truy xuất bộ nhớ bằng cách sử dụng
khoá như một địa chỉ bộ nhớ. Nếu không có sự giới hạn về thời gian thì chúng ta có
thể tối thiểu hoá dung lượng sử dụng bộ nhớ bằng cách dùng một phương pháp tìm
kiếm tuần tự. Phép băm cung cấp một phương pháp dùng một lượng vừa phải của bộ
nhớ và để làm một sự cân bằng giữa hai thái cực này. Sử dụng hiệu quả bộ nhớ có sẵn
và truy xuất nhanh đến bộ nhớ là quan tâm chủ yếu của bất kỳ một phương pháp băm.
Phép băm đưa ra một cách tiếp cận đầy đủ tới việc tìm kiếm khác hẳn với việc tìm
kiếm đã biết như tìm kiếm trên cấu trúc cây… Do đó phương pháp băm là phương
pháp rất hiệu quả để cài đặt từ điển. Chính vì vậy đề tài “ứng dụng bảng băm trong từ
điển” được thực hiện nhằm giới thiệu về kỹ thuật băm và tìm hiểu ứng dụng quan
trọng của nó trong từ điển.
Có thể lập được một chương trình viết bằng ngôn ngữ Java giúp người học có thể
tra cứu được từ điển Anh-Việt.
ĐỒ ÁN MÔN HỌC Page 1
Ứng dụng bảng băm trong từ điển
2. MỤC TIÊU CẦN ĐẠT ĐƯỢC CỦA ĐỀ TÀI
Đề tài này được thực hiện nhằm đạt được mục tiêu là hiểu rõ, sâu sắc hơn về phép
băm, các hàm băm. Tìm hiểu ứng dụng quan trọng của nó trong ứng dụng tìm kiếm từ
trong từ điển.
3. CƠ SỞ LÝ THUYẾT
- Toán học.
Trong hầu hết các ứng dụng, khoá được dùng như một phương thức để truy xuất
dữ liệu. Hàm băm được dùng để ánh xạ giá trị khóa vào một dãy các địa chỉ của bảng băm
(hình 1).
Hình 1
Khóa có thể là dạng số hay dạng chuỗi. Giả sử có 2 khóa phân biệt k
i
và k
j
nếu h(k
i
)=h(k
j
)
thì hàm băm bị đụng độ.
Bằng một quy tắc biến đổi nào đó, từ giá trị của khoá ta tính ra một địa chỉ (địa chỉ
tương đối). Địa chỉ này sẽ dùng để lưu trữ bản ghi tương ứng, đồng thời cũng để tìm kiếm
ĐỒ ÁN MÔN HỌC Page 3
Ứng dụng bảng băm trong từ điển
bản ghi ấy. Như vậy nghĩa là ta thiết lập một hàm băm h(k) thực hiện phép ánh xạ tập các
giá trị của k lên tập các địa chỉ tương đối, nghĩa là các số nguyên từ 0 đến m-1 mà ta gọi
là bảng địa chỉ, m được gọi là độ dài hay kích thước của bảng. Như vậy ta luôn có: 0
≤ h(k) < m. Giá trị của h(k) sẽ được sử dụng khi lưu trữ cũng như khi tìm kiếm bản ghi
ứng với k.
1.1.2. Ví dụ
Xét các bản ghi có khóa tương ứng là các số nguyên gồm không quá 4 chữ số thập
phân, chẳng hạn 5402, 0367, 1246, 2983… Giả sử kích thước của bảng là m = 1000 nghĩa
là các địa chỉ tính được phải nằm trong khoảng 0 đến 999. Ta chọn quy tắc tính địa chỉ
như sau: “lấy 3 chữ số cuối cùng của khóa làm địa chỉ”. Như vậy ứng với các khóa nêu
trên ta sẽ có kết quả:
Giá trị khóa Địa chỉ
Nguyên tắc của nó rất đơn giản “lấy số dư của phép chia giá trị khoá cho kích
thước m của bảng băm để làm điạ chỉ băm” nghĩa là:
h(k) = k mod m
Như trong ví dụ trên ta lấy ba chữ số cuối cùng của giá trị khoá làm địa chỉ băm
tức là lấy phần dư của phép chia giá trị khoá cho 1000, chẳng hạn: 246 = 1246 mod 1000.
Tất nhiên với phương pháp này, có thể có một số giá trị nào đó của m tạo ra được
h(k) tốt hơn giá trị khác của nó. Ví dụ nếu m là số chẵn thì h(k) sẽ chẵn khi k chẵn, lẻ khi
k lẻ, như vậy với giá trị m này h(k) sẽ không được ngẫu nhiên lắm. Trường hợp m là luỹ
thừa của cơ số của hệ đếm đang dùng, ví dụ như đối với hệ đếm thập phân mà m = 1000
như trên thì cũng không tốt vì lúc này h(k) chính là con số bao gồm các chữ số ở bên phải
của khoá không có ảnh hưởng gì tới h(k) cả, do đó đối với các giá trị khoá mà chỉ khác
nhau ở các chữ số nằm bên trái sẽ xảy ra hiện tượng đụng độ.
Thông thường người ta chọn m* là số nguyên tố nhỏ hơn và gần m thay cho m,
nghĩa là lúc này h(k) = k mod m*. Như ví dụ trên nếu m* = 997 ta sẽ có kết quả:
Giá trị khoá Địa chỉ
5402
0367
1246
2983
417
367
249
989
ĐỒ ÁN MÔN HỌC Page 5
Ứng dụng bảng băm trong từ điển
Bây giờ nếu có thêm các khoá 7402, 0402 thì địa chỉ băm tương ứng của chúng là 423,
402 nghĩa là không trùng với địa chỉ 417 tương ứng với khoá 5402 ở trên.
Phương pháp này là một trong những phương pháp đơn giản khá phổ dụng.
1.2.2. Phương pháp nhân
170 hoặc 708
100 hoặc 006
789 hoặc 896
1.2.3. Phương pháp phân đoạn
Nếu khoá có kích thước lớn, kích thước thay đổi thì người ta áp dụng phương pháp
phân đoạn. Trước hết giá trị khoá phân thành nhiều đoạn khác nhau (có thể trừ đoạn đầu
hoặc đoạn cuối) thường mỗi đoạn có độ dài bằng độ dài địa chỉ. Muốn vậy người ta áp
dụng các kỹ thuật như:
ĐỒ ÁN MÔN HỌC Page 6
Ứng dụng bảng băm trong từ điển
a) Tách (spliting): tách các đoạn ra, xếp mỗi đoạn một hàng, dóng thẳng theo đầu
trái hoặc đầu phải.
b) Gấp (folding): gấp các đoạn lại theo đường biên tương tự như gấp giấy. Các chữ
số rơi vào cùng một chỗ được đặt thành hàng dóng thẳng với nhau.
Sau khi các đoạn đã được tách hoặc gấp chúng sẽ được phối hợp với nhau theo một
cách nào đấy. Ví dụ chúng được cộng lại. Từ kết quả thu được lấy một đoạn dài bằng địa
chỉ để làm địa chỉ băm hoặc lại áp dụng với nó các kỹ thuật tạo địa chỉ như đã nêu. Giả sử
có khoá: 17046329. Bằng phương pháp phân tách ta phân ra các đoạn 3 chữ số kể từ đầu
phải rồi cộng lại. Ta có:
329
046
017
392
392 được coi là địa chỉ băm ứng với khoá đó.
Còn bằng phương pháp gấp ta sẽ có:
046
923
710
1679
Ta có thể lấy 167 hoặc 679 làm địa chỉ băm.
for (int i=0; i< k.length(); i++)
value = 37 * value + k[i];
return value % N;
}
ĐỒ ÁN MÔN HỌC Page 8
Ứng dụng bảng băm trong từ điển
1.2.5. Bảng băm
1.2.6.1. Mô tả dữ liệu
Tập khoá k Hàm băm h Tập địa chỉ M
Giả sử:
k: là tập các khoá (set of keys)
M: tập địa chỉ (set of addresses).
h(k): hàm băm dùng để ánh xạ một khoá k từ tập các khoá k thành một địa chỉ
tương ứng trong tập M.
1.2.6.2. Các phép toán trên bảng băm
- Khởi tạo (initialize): khởi tạo bảng băm, cấp phát vùng nhớ hay quy định số phần
tử (kích thước) của bảng băm.
- Kiểm tra rỗng (empty): kiểm tra bảng băm có rỗng hay không?
- Tìm kiếm (search): tìm kiếm một phần tử trong bảng băm theo khoá k chỉ định
trước.
- Thêm một phần tử mới (insert): thêm một phần tử vào bảng băm. Sau khi thêm số
phần tử của bảng băm tăng thêm một đơn vị.
- Loại bỏ (remove): loại bỏ một phần tử khỏi bảng băm, số phần tử sẻ giảm đi một.
1.2.6.3. Các bảng băm thông dụng
Với mỗi loại bảng băm cần thiết phải xác định tập khoá k, xác định tập địa chỉ M
và xây dựng hàm băm h cho phù hợp.
ĐỒ ÁN MÔN HỌC Page 9
Ứng dụng bảng băm trong từ điển
a. Bảng băm với phương pháp kết nối trực tiếp (bảng băm dây chuyền): mỗi địa
chỉ của bảng băm tương ứng một danh sách liên kết. Các phần tử được kết nối với nhau
khoá).
Bước đầu tiên của việc tìm kiếm bằng phép băm là tính một hàm băm (hash
function) để chuyển đổi từ khoá tìm kiếm vào địa chỉ bảng. Trong trường hợp lý tưởng
các khoá khác nhau nên ánh xạ vào các địa chỉ khác nhau nhưng thực tế thì không có hàm
băm hoàn chỉnh và sẽ có 2 hay nhiều khoá khác nhau băm đến cùng một địa chỉ. Phần thứ
hai của tìm kiếm băm là giải quyết xung đột (collision-resolution) để cư xử với các khoá
như đã nói. Một trong những phương pháp xử lý xung đột mà chúng ta nghiên cứu là
dùng các danh sách liên kết, bởi vì lưu trữ động nên phương pháp này thích hợp khi số
lượng khoá tìm kiếm không thể tiên đoán trước. Hai phương pháp xử lý xung đột khác mà
chúng ta xem xét sẽ có thời gian tìm kiếm nhanh trên các mẩu tin được lưu trữ trên một
mảng cố định.
Trong mục này chúng ta sẽ trình bày hai phương pháp giải quyết va chạm. Trong
phương pháp thứ nhất, mỗi khi xảy ra va chạm, chúng ta tiến hành thăm dò để tìm một vị
trí còn trống trong bảng và đặt dữ liệu mới vào đó. 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.
1.3.1. Phương pháp đị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 địa chỉ
mở (open addressing).
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í
ĐỒ ÁN MÔN HỌC Page 11
13
388 14 926 130
T
0 1 2 3 4 5 6 7 8 9 10
đế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à 926 được đặt
vào T[5]. Kết quả là chúng ta nhận được mảng T như trong hình 3.
Hình 3. Bảng băm sau khi xen vào các dữ liệu 388, 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
ĐỒ ÁN MÔN HỌC Page 12
Ứng dụng bảng băm trong từ điển
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ương phá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ữ 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 3 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 3, 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 <= N-1) có thể là vị trí trống (EMPTY), vị trí đã
,…
Ví dụ: Nếu cỡ của mảng N = 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:
ĐỒ ÁN MÔN HỌC Page 14
Ứng dụng bảng băm trong từ điển
Nếu cỡ của mảng là số nguyên tố, thì thăm dò bình phương cho 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 N) với
m=0, 1,…, N/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.
1.3.1.3. 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ác khoả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
(k) = 1 + (k % 7)
ĐỒ ÁN MÔN HỌC Page 15
T
…
…
…
…
Hàm băm h
Ứng dụng bảng băm trong từ điển
với k = 58, thì bước thăm dò là h
2
(58) = 1 + 2 = 3, do đó dãy thăm dò là: h
1
(58) = 3, 6, 9,
1, 4, 7, 10, 2, 5, 8, 0. còn với k = 36, thì bước thăm dò là 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 N là số nguyên tố và chọn M là
số nguyên tố, M < N, rồi sử dụng các hàm băm
h
1
(k) = k % N
h
2
(k) = 1 + (k % M)
1.3.2. Phương pháp kết nối (phương pháp dây chuyền)
Một cách tiếp cận khác để giải quyết sự va chạm là chúng ta tạo một cấu trúc dữ
liệu để lưu tất cả các dữ liệu được băm vào cùng một vị trí trong mảng. Cấu trúc dữ liệu
thích hợp nhất là danh sách liên kết (dây chuyền). Khi đó mỗi thành phần trong bảng băm
của khoá k, tức là xác định bucket chứa phần tử và đặt phần tử cần chèn vào bucket này.
Với tác vụ search, hàm băm sẽ được dùng để tính địa chỉ và tìm phần tử trên
bucket tương ứng
+ i=h(k) => thuộc danh sách thứ i.
+ Tìm kiếm khoá k trên danh sách thứ i.
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 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.
CHƯƠNG II: BÀI TOÁN ỨNG DỤNG
ĐỒ ÁN MÔN HỌC Page 18
Ứng dụng bảng băm trong từ điển
2.1. PHÁT BIỂU BÀI TOÁN VÀ TỔ CHỨC CHƯƠNG TRÌNH.
2.1.1. Phát biểu bài toán
Dùng một thuật toán tìm một từ tiếng anh bất kì trong từ điển, kết quả nhận được là
từ loại và nghĩa tiếng việt của từ đã nhập sao cho nhanh nhất.
2.1.2. Phân tích bài toán
Từ điển Anh – Việt là một ứng dụng rất quen thuộc đối với người dùng máy tính
nói chung và người học tiếng anh nói riêng. Gần đây, các phần mềm từ điển Anh – Việt
phát triển rất mạnh mẽ cả về số từ vựng cũng như chức năng, như Lạc Việt, Babylon,
ngoài ra còn rất nhiều từ điển trực tuyến như translate.google.com, vdict.com, tratu.vn,
1tudien.com …
Với đồ án môn học lần này, em muốn tạo một phần mềm từ điển Anh – Việt bằng
ngôn ngữ lập trình Java đạt các yêu cầu sau:
• Chức năng tra từ tiếng anh sang tiếng việt.
• Import dữ liệu từ file với định dạng cho trước.
2.1.3. Tổ chức dữ liệu
• Input
Dữ liệu của chương trình này được lưu trữ trên file văn bản chứa các thông tin về
các từ tiếng anh và nghĩa tiếng việt.
nhiều nhánh Trie để lưu trữ và sử dụng phương pháp này để tìm kiếm với mục đích như là
một ví dụ giúp mọi người phần nào đó hiểu thêm về kiểu cấu trúc dữ liệu này.
2.2. GIẢI THUẬT
2.2.1. Giải thuật chính
Bước 1. Lựa chọn công việc.
Bước 2. Nếu chọn Tìm kiếm
→
Tìm kiếm và in kết quả
→
Bước 1.
Nếu chọn Thoát
→
Kết thúc chương trình.
- Hàm băm được sử dụng: hàm băm dùng phương pháp chia h(k)=k%M.
2.2.2. Sơ đồ khối
ĐỒ ÁN MÔN HỌC Page 20
Ứng dụng bảng băm trong từ điển
2.2.3. Giải thuật cụ thể.
Bước 1: Nhập từ khoá cần tìm kiếm
Bước 2: Thực hiện tìm kiếm, nếu tìm thấy in ra kết quả ngược lại thông báo từ đó
không có trong từ điển và có thể thêm vào.
Khi tìm một phần tử có khóa k trong cây, hàm băm h(k) sẽ xác định địa chỉ i trong
khoảng từ 0 đến M-1 ứng với nhánh i có thể chứa phần tử này. Thời gian tìm kiếm tỉ
lệ với số ký tự tạo nên khoá. Nếu đặt n là độ dài của ký tự cần tìm thì với mỗi lần
tìm kiếm ta phải mất tối đa là n lần truy xuất để đi xuống n mức. Như vậy thuật toán
tìm kiếm độ phức tạp là O(n).
2.2.4. Xây dựng chương trình.
• Các thư viện sử dụng trong chương trình
Sử dụng một số thư viện chuẩn: util, swing, awt, io.
• Hàm băm
TÀI LIỆU THAM KHẢO
[1]. Đỗ Xuân Lôi; Cấu trúc dữ liệu và giải thuật; Nhà xuất bản Đại học quốc gia Hà
Nội; năm 2006.
[2]. Nguyễn Thị Tĩnh; Cấu trúc dữ liệu và giải thuật; Nhà xuất bản Đại học sư phạm;
năm 2005
[3]. Robert Sedgewick; Cẩm nang thuật toán (tập 1); Nhà xuất bản khoa học và kỹ
thuật; năm 2004.
ĐỒ ÁN MÔN HỌC Page 23
Ứng dụng bảng băm trong từ điển
[4]. Robert Sedgewick; Cẩm nang thuật toán (tập 2); Nhà xuất bản khoa học và kỹ
thuật; năm 2006.
[5]. Phan Đoàn Ngọc Phương; Giáo trình cấu trúc dữ liệu và giải thuật; lưu hành nội bộ;
năm 2007
[6]. Hoàng Đức Hải; Cấu trúc dữ liệu + giải thuật = chương trình; Nhà xuất bản giáo
dục; năm 1999.
[7]. Đoàn Văn Ban; Lập trình hướng đối tượng với Java; Nhà xuất bản khoa học và kỹ
thuật; năm 2005.
[8]. Bùi Doãn Khanh; Mã hoá - mật mã; Nhà xuất bản lao động xã hội; năm 2006.
[9]. Trương Hải Bằng; Cấu trúc dữ liệu 2; Nhà xuất bản Đại học quốc gia thành phố Hồ
Chí Minh; năm 2007.
[10]. />MỤC LỤC
ĐỒ ÁN MÔN HỌC Page 24
Ứng dụng bảng băm trong từ điển
CHƯƠNG TRÌNH
/**
* Chương trình sử dụng class Hashtable có sẵn của java để lưu trữ và xử lý từ điển.
* Sử dụng LinkedList<String>[26] để lưu trữ từ, nhằm hiển thị các từ có liên quan đến
kết quả
* trong khi nhập vào (Instant).
* Instant này đơn giản và hiển thị trên JTextArea (Không focus được) (Đơn giản).