Phương pháp biến đổi khóa

Một phần của tài liệu GIÁO TRÌNH CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 2 (Trang 36)

Xét dãy các đối tượng có kiểu T, để truy nhập đến một đối tượng thuộc dãy ta cần biết địa chỉ của nó. Gọi A là miền trị của các địa chỉ này. Giả sử trong kiểu

T, có một trường khóa (key) thuộc vào miền trịK nào đó.

Phép biến đổi khoá là một ánh xạ thích hợp H từ tập các khóa K đến tập các địa chỉ A:

H : K A

Thông thường dãy các đối tượng được lưu trong một mảng. Khi đó H là

Trong thực tế ta hay gặp trường hợp tập các giá trị khóa có số lượng lớn hơn rất nhiều so với tập các địa chỉ bộ nhớ (chẳng hạn tập chỉ số của mảng). Khi

đó, H là ánh xạ nhiều-một (H không đơn ánh).

* Ví dụ 1: Ta dùng một tập các khóa mà mỗi khóa gồm 10 ký tự để định danh cho tập gồm 1000 người. Bộ ký tự có 26 ký tự chữ cái, do đó tập khóa có 2610 khóa được ánh xạ vào tập gồm 103 chỉ số. Lúc đó có thể xảy ra tình trạng đụng độ: 2 khóa khác nhau có thể cho cùng một chỉ số qua một phép biến đổi khóa H nào đó.

Phương pháp biến đổi khóa gồm hai giai đoạn:

- Giai đoạn 1: Chọn phép biến đổi khóa H tính trị hàm H tại trị khóa của một đối tượng để xác định địa chỉ của đối tượng trong mảng.

- Giai đoạn 2: Giải quyết tình trạng đụng độ (collision resolution) cho những khóa khác nhau có cùng một địa chỉ trong mảng. Ta thường giải quyết đụng độ bằng cách dùng các danh sách liên kết để lưu các đối tượng có cùng địa chỉ băm trong mảng, do ta không biết trước các số

lượng những đối tượng có tính chất này. Một phương pháp khác để giải quyết đụng độ với thời gian nhanh dùng mảng có kích thước cố định

trong phương pháp địa chỉ mở.

Một phần của tài liệu GIÁO TRÌNH CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 2 (Trang 36)