1. Trang chủ
  2. » Giáo án - Bài giảng

CẤU TRÚC dữ LIỆU băm (HASHING)Ti06

30 137 1

Đ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

Định dạng
Số trang 30
Dung lượng 432,96 KB

Nội dung

HỘI THẢO KHOA HỌC CHUYÊN ĐÊ CẤU TRÚC DỮ LIỆU BĂM (HASHING) Trang MỤC LỤ A PHẦN MỞ ĐẦU B PHẦN NỘI DUNG I CẤU TRÚC DỮ LIỆU BĂM (HASHING) Khái niệm Hashing .4 Hàm băm (Hash fuction) 2.1 Khái niệm 2.2 Xây dựng hàm băm 2.3 Xây dựng hàm băm 2.3.1 Hàm băm Robert Sedgwicks (RS hash function) .8 2.3.2 Hàm băm Polynomimal (Hàm băm đa thức) 2.3.3 Hàm băm Cyclic shift 2.4 Các phương pháp giải va chạm 10 2.4.1 Separate chaining (phương pháp kết nối) 10 2.4.2 Linear probing (dò tuyến tính) 11 2.4.3 Quadratic Probing (dò bậc 2) 13 2.4.4 Double hashing (Băm kép) .14 II BÀI TẬP ÁP DỤNG 16 Bài 1: Zero Quantity Maximization 16 1.1 Đề 16 1.2 Hướng dẫn giải thuật .17 1.3 Chương trình 17 1.4 Test 18 Bài 2: Xâu 18 2.1 Đề 18 Trang 2.2 Hướng dẫn thuật toán: 18 2.3 Cài đặt: 19 2.4 Test 20 Bài 3: Xâu đối xứng dài 20 3.1 Đề 20 3.2 Hướng dẫn giải thuật .21 3.3 Chương trình 21 3.4 Test 22 Bài 4: Xâm nhập mật .23 4.1 Đề 23 4.2 Hướng dẫn giải thuật .24 4.3 Chương trình 24 4.4 Test 25 Bài 5: Chuỗi abc .25 5.1 Đề 26 5.2 Hướng dẫn giải thuật: 27 5.3 Cài đặt 27 5.4 Test 27 Một vài toán khác .28 C PHẦN KẾT LUẬN 29 D TÀI LIỆU THAM KHẢO 30 Trang A PHẦN MỞ ĐẦU Trong Tin học, thiết kế chương trình cho toán, việc chọn cấu trúc liệu vấn đề quan trọng loại cấu trúc liệu phù hợp với vài loại toán ứng dụng khác Một cấu trúc liệu chọn cẩn thận cho phép thực thuật toán hiệu Trong chương trình bồi dưỡng học sinh giỏi, vấn đề sử dụng cấu trúc liệu đặc biệt để giải vấn đề hay khó Hiện nay, phổ biến nhiều loại cấu trúc liệu khác như: Ngăn xếp (stack) Hàng đợi (queue) Băm (Hashing) Đống (heap) RMQ (Range Minimum Query) IT (Interval Tree) BIT (Binarry Indexed Tree) … Trong viết này, tơi trình bày cấu trúc liệu Băm, khơng mang nặng vấn đề lí thuyết đầy đủ, mức tổng quát để đến ứng dụng giải toán cụ thể Trang B PHẦN NỘI DUNG I CẤU TRÚC DỮ LIỆU BĂM (HASHING) Khái niệm Hashing Hashing cấu trúc liệu quan trọng thiết kế để sử dụng hàm đặc biệt gọi hàm Hash, sử dụng để ánh xạ giá trị xác định với khóa cụ thể để truy cập phần tử nhanh Hiệu ánh xạ phụ thuộc vào hiệu hàm băm sử dụng Một số ví dụ sử dụng cấu trúc liệu băm thực tế: - Trong trường đại học, sinh viên định mã sinh viên không giống qua mã sinh viên truy xuất thơng tin sinh viên - Trong thư viện, sách có mã số riêng mã số dùng để xác định thông tin sách, chẳng hạn vị trí xác sách thư viện hay thể loại sách đó,… Trong ví dụ trên, sinh viên sách “băm” thành mã số (không trùng lặp) Giả sử bạn có đối tượng bạn muốn gán cho khóa (key) để giúp tìm kiếm dễ dàng Để lưu giữ cặp (nó thường gọi ), bạn sử dụng mảng bình thường để làm việc Trang Với số mảng khóa giá trị số giá trị tương ứng khóa Tuy nhiên, trường hợp phạm vi khóa lớn khơng thể sử dụng số mảng được, bạn cần tới “băm” (hashing) Trong hashing, key có giá trị lớn đưa giá trị nhỏ cách sử dụng hàm băm(hash functions) Các giá trị sau lưu cấu trúc liệu gọi bảng băm(hash tables) Ý tưởng hashing đưa cặp mảng thống Mỗi phần tử gán khóa định danh (khóa có sau dùng hàm băm) Bằng việc sử dụng khóa định danh đó, truy cập trực tiếp tới với độ phức tạp O(1) Thuật tốn băm sử dụng khóa băm để tính tốn khóa định danh phần tử thêm vào bảng băm Việc hashing thực qua bước: Một phần tử chuyển đổi thành số nguyên việc sử dụng hàm băm Phần tử sử dụng mục để lưu trữ phần tử gốc đưa vào bảng băm Phần tử lưu giữ bảng băm, truy xuất nhanh khóa băm: hash = hashfunc(key) index = hash % array_size Theo cách việc băm phụ thuộc vào kích thước mảng table_size Chỉ số index sau đưa [0; table_size-1] việc sử dụng toán tử chia lấy dư % Ví dụ: Cho danh sách giá trị [11,12,13,14,15] lưu trữ vị trí {1,2,3,4,5} mảng bảng Hash tương ứng với hàm băm H(x) ánh xạ giá trị x số x% 10 mảng Trang Hàm băm (Hash fuction) 2.1.Khái niệm Hàm băm hàm biến giá trị khóa (số, chuỗi, kí hiệu, …) thành địa chỉ/ mục bảng băm Khơng có hàm băm tối ưu cho trường hợp Có nhiều cách xây dựng hàm băm Một hàm băm tốt cần thỏa mãn u cầu sau : - Tính tốn nhanh - Ít xảy đụng độ - Các khóa phân bổ bảng băm 2.2.Xây dựng hàm băm *Cách : Cách đơn giản để xây dựng hàm băm ứng với khóa (key), sau tính tổng kí tự ta dùng phép mod cho số N Với N phần tử mảng giá trị Trang Một số lưu ý chọn số N để hàm băm “Sạch”: - N không nên số lũy thừa N nên số nguyên tố không gần với lũy thừa *Cách : Một cách khác, thay băm ID ta băm theo tên, dùng hàm băm sau : HashValue = keyS0 + keyS1 + …+ keySL-1 Trong : - keySi : mã ASCII kí tự Si L : độ dài chuỗi Nhận xét : Hai hàm băm xảy trường hợp đụng độ : Với hai key khác lại cho kết băm giống Để giải vấn đề cần phải : Xây dựng hàm băm Sử dụng phương pháp giải vấn đề đụng độ 2.3.Xây dựng hàm băm 2.3.1 Hàm băm Robert Sedgwicks (RS hash function) Hàm băm dùng số ngun (a,b) để tính hashValue theo cơng thức sau: Trang HashValue = HashValue*a + keySi a=a*b ; Trong : - a = 63689; b = 378551; keySi mã ASCII kí tự i chuỗi key Cài đặt: #include using namespace std; string key; unsigned int RSHash(string key) { unsigned int b = 378551; unsigned int a = 63689; unsigned int hashValue = 0; unsigned int i = 0; for (i = 0; i < key.size(); ++i) { hashValue = hashValue * a + key[i]; a = a * b; } return hashValue; } int main() { key="tinhoc"; cout

Ngày đăng: 11/03/2020, 03:46

TỪ KHÓA LIÊN QUAN

w