Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 7 - Trần Minh Thái (2016)

27 6 0
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 7 - Trần Minh Thái (2016)

Đ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

Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 7: Bảng băm cung cấp cho người học các kiến thức: Khái niệm bảng băm, đặc điểm và cấu trúc, một số phương pháp, giải quyết đụng độ. Mời các bạn cùng tham khảo nội dung chi tiết.

Chương Bảng băm (Hash Table) Trần Minh Thái Email: minhthai@huflit.edu.vn Website: www.minhthai.edu.vn Nội dung Khái niệm Đặc điểm cấu trúc Một số phương pháp Giải đụng độ Truy xuất trực tiếp Giả sử cần lưu trữ thơng tin có đặc điểm nhau:  Dữ liệu có khóa (key) phạm vi 0…m-1  Các khóa riêng biệt (không trùng nhau)  Giải pháp? Truy xuất trực tiếp  Tạo mảng T[0 m-1]  T[i] = x x  T key[x] = i  T[i] = NULL cho trường hợp ngược lại  Cấu trúc gọi bảng truy xuất trực tiếp (direct-address table)  Độ phức tạp truy xuất: O(1)  Tuy nhiên? Tuy xuất trực tiếp  Chỉ thích hợp cho miền giá trị m khóa tương đối nhỏ  Giả sử khố số ngun 32-bit: Bảng có kích thước 232 (hơn tỉ ơ) Giả sử khơng có rào cản nhớ thời gian để khởi tạo giá trị NULL  Giải pháp: ánh xạ khoá thành miền nhỏ từ p-1  Hash Table Bảng băm (Hash Table) Thành phần liệu K: tập khoá (set of keys) A: tập đị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 A Các thao tác Khởi tạo (Initialize) Kiểm tra rỗng (Empty) Lấy kích thước bảng băm (Size) Tìm kiếm (Search) Thêm phần tử (Insert) Loại bỏ (Remove) Sao chép (Copy) Duyệt (Traverse) Vấn đề Bảng băm  O(1) cho tất thao tác  Khóa số mảng trực tiếp mà số thơng qua hàm h(key) – hàm băm Ví dụ: myArray[h(key)]  Vấn đề: h()? Vấn đề Bảng băm U (universe of keys) h(k1) k1 K (actual keys) k4 h(k4) k5 h(k2) h(k5) k2 k3 h(k3) p-1 10 Hàm băm Ví dụ : hàm băm biến đổi khố dạng chuỗi gồm n kí tự thành địa (số nguyên) int HashFunc(String s) { int n = s.Length, i=0; int sum = 0; while( n ) sum = sum + s[i++]; return sum % 256; } Tính địa khố “AB” : hashfunc(“AB”)  131 Tính địa khố “BA” : hashfunc(“BA”)  131 Khi hàm băm khoá vào địa gọi đụng độ (Collision) 13 Yêu cầu hàm băm Tính tốn nhanh Các khố phân bố bảng Ít xảy đụng độ 14 Hàm băm dạng bảng tra Khố Địa Khóa Địa Khóa Địa Khóa Địa a h o 14 v 21 b I p 15 w 22 c j q 16 x 23 d k 10 r 17 y 24 e l 11 s 18 z 25 f m 12 t 19 / / g n 13 u 20 / / 15 Hàm băm sử dụng phương pháp chia Dùng số dư: h(k) = |k| mod m Với k khố, m kích thước bảng Chọn giá trị m?  m nguyên tố m=100 Khoá Địa 325 25 125 25 147 47 m=97 (nguyên tố) Khoá Địa 325 34 125 28 147 50 16 Hàm băm sử dụng phương pháp nhân h(k) = m(kA - kA) Với k khóa, m kích thước bảng, A số: < A < Chọn m A? Thường chọn m = 2p Knuth: A = (5 - 1)/2  0.618033987 xem tốt 17 Hàm băm sử dụng phương pháp nhân m=100, A=0.61803 M=100, A=0.52173 Khoá Địa Khoá Địa 325 86 325 56 125 25 125 21 147 85 147 69 18 Hàm băm phổ quát  Một tập hàm băm H phổ quát (universal ) hH khố k, ta có xác suất: Pr{h(k) = h(l)}

Ngày đăng: 20/05/2021, 04:35

Mục lục

  • Slide 1

  • Nội dung

  • Truy xuất trực tiếp

  • Truy xuất trực tiếp

  • Tuy xuất trực tiếp

  • Bảng băm (Hash Table)

  • Thành phần dữ liệu

  • Các thao tác

  • Vấn đề Bảng băm

  • Vấn đề Bảng băm

  • Các loại Bảng băm

  • Hàm băm?

  • Hàm băm

  • Yêu cầu của hàm băm

  • Hàm băm dạng bảng tra

  • Hàm băm sử dụng phương pháp chia

  • Hàm băm sử dụng phương pháp nhân

  • Hàm băm sử dụng phương pháp nhân

  • Hàm băm phổ quát

  • Đụng độ (collision) địa chỉ

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

Tài liệu liên quan