Cấu trúc dữ liệu và giải thuật II - Chương 2 docx

74 545 1
Cấu trúc dữ liệu và giải thuật II - Chương 2 docx

Đ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

CHƯƠNG - BẢNG BĂM (HASH TABLE) Phép băm đề xuất thực máy tính từ năm 50 kỷ 20 Nó dựa ý tưởng: chuyển đổi khóa thành số (xử lý băm) sử dụng số để đánh số cho bảng liệu Các phép toán cấu trúc liệu danh sách, nhị phân,… phần lớn thực cách so sánh phần tử cấu trúc, thời gian truy xuất không nhanh phụ thuộc vào kích thước cấu trúc Chương khảo sát cấu trúc liệu gọi bảng băm(hash table) Các phép toán bảng băm giúp hạn chế số lần so sánh, cố gắng giảm thiểu thời gian truy xuất Độ phức tạp phép tốn bảng băm thường có bậc 0(1) khơng phụ thuộc vào kích thước bảng băm Chương giới thiệu chủ đề phép tốn thường dùng cấu trúc bảng băm: Phép băm hay hàm băm (hash function) Tập khoá phần tử bảng băm Tập địa bảng băm Phép toán thêm phần tử vào bảng băm Phép toán xoá phần tử bảng băm Phép toán tìm kiếm bảng băm Thơng thường bảng băm sử dụng cần giải tốn có cấu trúc liệu lớn lưu trữ nhớ PHÉP BĂM (Hash Function) Định nghĩa: Trong hầu hết ứng dụng, khoá dùng phương thức để truy xuất liệu cách gián tiếp Hàm dùng để ánh xạ khoá vào dãy số nguyên dùng giá trị nguyên để truy xuất liệu gọi hàm băm (hình 1) Hình Như vậy, hàm băm hàm biến đổi khóa phần tử thành địa bảng băm Khóa dạng số hay số dạng chuỗi Hàm băm tốt thỏa mãn điều kiện sau: o Tính tốn nhanh o Các khố phân bố bảng o Ít xảy đụng độ Giải vấn đề băm với khố khơng phải số ngun: o Tìm cách biến đổ khố thành số ngun Ví dụ loại bỏ dấu ‘-’ mã số 9635-8904 đưa số nguyên 96358904 Đối với chuỗi, sử dụng giá trị ký tự bảng mã ASCCI o Sau sử dụng hàm băm chuẩn số nguyên Hàm Băm sử dụng Phương pháp chia Dùng số dư: o h(k) = k mod m o k khố, m kích thước bảng vấn đề chọn giá trị m m = 2n (không tốt) nếu chọn m= 2n thông thường không tốt h(k) = k mod 2n chọn n bits cuối k m nguyên tố (tốt) Gia tăng phân bố Thông thường m chọn số nguyên tố gần với 2n o Chẳng hạn bảng ~4000 mục, chọn m = 4093 Hàm Băm sử dụng Phương pháp nhân Sử dụng o h(k) = m (k A mod 1) o k khóa, m kích thước bảng, A số: < A < Chọn m A o M thường chọn m = 2p o Sự tối ưu việc chọn A phụ thuộc vào đặc trưng liệu o Theo Knuth chọn A = 1/2( -1)  0.618033987 xem tốt Phép băm phổ quát Việc chọn hàm băm khơng tốt dẫn đến xác suất đụng độ lớn Giải pháp: o Lựa chọn hàm băm h ngẫu nhiên o Chọn hàm băm độc lập với khóa o Khởi tạo tập hàm băm H phổ quát từ h chọn ngẫu nhiên Một tập hàm băm H phổ quát (universal ) với  f, k  H khố k, l ta có xác suất: Pr{f(k) = f(l)} j 0 n | x | | | V i m Hình 1.2 Bảng băm chữ nhật n-1 n n+1 n+2 mx n Danh sách kề mô tả bảng băm hình chữ nhật bảng băm: phần tử x thuộc hàng cột - f(1,2) = n + Tổng quát, phần tử thuộc hàng i, cột j cho công thức: f(i,j) =ni + j (n số cột bảng chữ nhật) Bảng băm tam giác (m hàng) bảng băm tam giác (n cột): Hình sau bảng tam giác m hàng Hình 1.3.a Bảng băm tam giác m hàng Và bảng băm tam giác n cột Hình 1.3.b Bảng băm tam giác n cột Mỗi phần tử bảng tam giác tương ứng với hai khóa hàng i, cột j(i>=j), địa phần tử danh sách kề xác định qua hàm băm: f(i,j)=i(i+1)/2 + j Bảng băm đường chéo (n cột): Hình sau dạng bảng đường chéo n cột, xác định hàm băm cho bảng đường chéo i=j i = j hay i = j-1 i = j hay i = j+1 i = j hay i = j±1 Hình 1.4 Các bảng băm đường chéo Như giới thiệu phần trên, với bảng băm đơn giản cần xây dựng hàm băm để truy xuất liệu lưu trữ phần tử bảng băm Hàm băm thường có dạng cơng thức tổng qt HF(key) hay f(khoá) tổ chức dạng bảng tra gọi bảng truy xuất (access table) BẢNG BĂM ADT (Hash Table - ADT) Phần trình bày vấn đề chính: - Mơ tả cấu trúc bảng băm tổng qt (thơng qua hàm băm, tập khóa, tập địa chỉ…) - Các phép toán bảng băm thêm phần tử (insert), loại bỏ (remove), tìm kiếm (search), … Bảng băm ADT: a Mô tả liệu Giả sử K: tập khoá (set of keys) M: tập dịa (set of addresses) HF(k): hàm băm dùng để ánh xạ khoá k từ tập khoá K thành địa tương ứng tập M Tập khóa K Hàm băm Tập địa M b Các phép toá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 qui định số phần tử (kích thước) bảng băm Kiểm tra rỗng (Empty): kiểm tra bảng băm có rỗng hay khơng? Lấy kích thước bảng băm (Size): Cho biết số phần tử có bảng băm Tìm kiếm (Search): Tìm kiếm phần tử bảng băm theo khoá k định trước Thêm phần tử (Insert): Thêm phần tử vào bảng băm Sau thêm số phần tử có bảng băm tăng thêm đơn vị Loại bỏ (Remove): Loại bỏ phần tử khỏi bảng băm, số phần tử giảm Sao chép (Copy): Tạo bảng băm tử bảng băm cũ có Duyệt (Traverse): duyệt bảng băm theo thứ tự địa từ nhỏ đến lớn Các Bảng băm thông dụng: Với loại bảng băm cần thiết phải xác định tập khóa K, xác định tập địa M xây dựng hàm băm HF cho phù hợp Mặt khác, xây dựng hàm băm cần thiết phải tìm kiếm giải pháp để giải xung đột, nghĩa giảm thiểu ánh xạ nhiều khoá khác vào địa (ánh xạ nhiều-một) Bảng băm với phương pháp nối kết trực tiếp: địa bảng băm(gọi bucket) tương ứng danh sách liên kết Các phần tử bị xung đột nối kết với danh sách liên kết Bảng băm với phương pháp nối kết hợp nhất: bảng băm loại cài đặt danh sách kề, phần tử có hai trường: trường key chứa khóa phần tử trường next phần tử kế bị xung đột Các phần tử bị xung đột nối kết qua trường nối kết next Bảng băm với phương pháp dị tuyến tính: ví dụ thêm phần tử vào bảng băm loại băm lần đầu bị xung đột dị địa kế… gặp địa trống thêm phần tử vào địa Bảng băm với phương pháp dị bậc hai: ví dụ thêm phần tử vào bảng băm loại này, băm lần đầu bị xung đột dị đến địa chi mới, lần dò i phần tử cách khoảng i2 gặp địa trống thêm phần tử vào địa Bảng băm với phương pháp băm kép: bảng băm loại dùng hai hàm băm khác nhau, băm lần đầu với hàm băm thứ bị xung đột xét địa khác hàm băm thứ hai Ưu điểm Bảng băm: Bảng băm cấu trúc dung hòa thời gian truy xuất dung lượng nhớ: - Nếu khơng có giới hạn nhớ xây dựng bảng băm với khóa ứng với địa với mong muốn thời gian truy xuất tức thời - Nếu dung lượng nhớ có giới hạn tổ chức số khóa có địa chỉ, lúc thời gian truy xuất có bi suy giảm đơi chút Bảng băm dược ứng dụng nhiều thực tế, thích hợp tổ chức liệu có kích thước lớn lưu trữ nhớ ngồi VÍ DỤ VỀ CÁC HÀM BĂM Hàm băm dạng bảng tra: Hàm băm tổ chức dạng bảng tra (cịn gọi bảng truy xuất), thông dụng dạng cơng thức Ví dụ sau bảng tra với khóa chữ cái, bảng băm có 26 địa từ đến 25 Khóa a ứng với địa 0, khoá b ứng với địa 1,… , z ứng với địa 25 Khoá Địa Khóa Địa a h b I c j d k 10 e l 11 f m 12 g n 13 Khóa Địa Khóa Địa o 14 v 21 p 15 w 22 q 16 x 23 r 17 y 24 s 18 z 25 t 19 / / u 20 / / Hình 3.1 Hàm băm dạng bảng tra tổ chức dạng danh sách kề Hàm băm dạng công thức: Thông thường hàm băm dạng công thức xây dựng theo dạng tổng quát f(key) Người ta thường dùng hàm băm chia dư (% modulo) ví dụ sau: Ví dụ 1: f(key) = key % 10: Theo ví dụ này, hàm băm f(key) băm số nguyên thành 10 địa khác (ánh xạ vào địa từ 0, 1,…, 9) Các khóa có hàng đơn vị băm vào địa 0, khóa có hàng đơn vị i (i=0 | | … | 9) băm vào địa thứ i Ví dụ 2: f(key)=key % M: Hàm băm loại cho phép băm số nguyên thành M địa khác (ánh xạ vào địa từ 0, 1,… M-1) Ví dụ 3: Giả sử cần xây dựng hàm băm với tập khóa số chuổi 10 kí tự, tập địa có M địa khác Có nhiều cách để xây dựng hàm băm này, ví dụ cộng dồn mã ASCII kí tự, sau chia dư (% modulo) cho M Thơng thường, hàm băm dạng công thức đa dạng không bị ràng buộc tiêu chuẩn Yêu cầu hàm băm tốt: Một hàm băm tốt thường phải thỏa yêu cầu sau: Phải giảm thiểu xung đột Phải phân bố phần tử M địa khác bảng băm 2.4 CÁC CÁCH GIẢI QUYẾT XUNG ĐỘT Như đề cập phần trên, xung đột tượng khóa khác băm địa nhau, hay ánh xạ vào địa Một cách tổng quát, key1key2 mà f(key1)=f(key2) nói phần tử có khóa key1 xung đột với phần tử có khóa key2 Thực tế người ta giải xung đột theo hai phương pháp: phương pháp nối kết phương pháp băm lại Giải xung đột phương pháp nối kết: Các phần tử bị băm địa (các phần tử bị xung đột) gom thành danh sách liên kết Lúc phần tử bảng băm cần khai báo thêm trường liên kết next phần tử kế bị xung đột địa Bảng băm giải xung đột phương pháp cho phép tổ chức phần tử bảng băm linh hoạt: thêm phần tử vào bảng băm thêm phần tử vào danh sách liên kết thích hợp phụ thuộc vào băm Tuy nhiên bảng bảng băm loại bị hạn chế tốc độ truy xuất Các loại bảng băm giải xung đột phương pháp nối kết như: bảng băm với phương pháp nối kết trực tiếp, bảng băm với phương pháp nối kết hợp Giải xung đột phương pháp băm lại: Nếu băm lần đầu bị xung đột băm lại lần 1, bị xung đột băm lai lần 2,… Quá trình băm lại diễn khơng cịn xung đột Các phép băm lại (rehash function) thường chọn địa khác cho phần tử Để tăng tốc độ truy xuất, bảng băm giải xung đột phương pháp băm lại thường cài đặt danh sách kề Tuy nhiên việc tổ chức phần tử bảng băm khơng linh hoạt phần tử lưu trữ danh sách kề có kích thước xác định trước Các loại bảng băm giải xung đột phương pháp băm lại như: bảng băm với phương pháp dị tuyến tính, bảng băm với phương pháp dò bậc hai, bảng băm với phương pháp băm kép 2.4.1 Bảng băm với phương pháp nối kết trực tiếp (Direct chaining Method) Mơ tả: Xem hình vẽ ... có 26 địa từ đến 25 Khóa a ứng với địa 0, khoá b ứng với địa 1,… , z ứng với địa 25 Khoá Địa Khóa Địa a h b I c j d k 10 e l 11 f m 12 g n 13 Khóa Địa Khóa Địa o 14 v 21 p 15 w 22 q 16 x 23 r... hàm băm: -> j 0 n | x | | | V i m Hình 1 .2 Bảng băm chữ nhật n-1 n n+1 n +2 mx n Danh sách kề mô tả bảng băm hình chữ nhật bảng băm: phần tử x thuộc hàng cột - f(1 ,2) = n + Tổng quát,... = 2p o Sự tối ưu việc chọn A phụ thuộc vào đặc trưng liệu o Theo Knuth chọn A = 1 /2(  -1 )  0.618033987 xem tốt Phép băm phổ qt Việc chọn hàm băm khơng tốt dẫn đến xác suất đụng độ lớn Giải

Ngày đăng: 22/07/2014, 14:21

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan