1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 9 - Trường ĐH Văn Lang

65 11 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

Nội dung

Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 9 Bảng băm cung cấp cho người học những kiến thức như: giới thiệu về bảng băm; hàm băm; xung đột; bài tập về bảng băm. Mời các bạn cùng tham khảo!

GIỚI THIỆU • Tổ chức lưu trữ thơng tin 100 nhân viên công ty ABC, nhân viên có mã số riêng EMP_ID phạm vi [0, 99] • Ta dùng mảng để lưu trữ với EMP_ID mục tương ứng mảng Dữ liệu  An Bình Minh … Ngọc EMP_ID  … 99 KHOA CÔNG NGHỆ THÔNG TIN GIỚI THIỆU • Tổ chức lưu trữ thơng tin 100 nhân viên công ty ABC, nhân viên có mã số riêng EMP_ID phạm vi [00000, 99999] • Ta cần mảng có 100,000 phần tử để lưu trữ với EMP_ID mục tương ứng mảng Dữ liệu  An Bình Minh … Ngọc … EMP_ID  00000 00001 00002 … 99 … 99999  Tốn nhiều khơng gian lưu trữ KHOA CƠNG NGHỆ THƠNG TIN GIỚI THIỆU • Cần giải pháp khác để lưu trữ 100 nhân viên với EMP_ID có phạm vi [00000, 99999] • Cần có hàm chuyển EMP_ID có số EMP_ID có số (hàm băm) • Cần có mảng ánh xạ khóa EMP_ID số tới vị trí mảng EMP_ID số (Bảng băm) KHOA CƠNG NGHỆ THƠNG TIN BẢNG BĂM • Bảng băm cấu trúc liệu mà khóa ánh xạ đến vị trí mảng thơng qua hàm băm • Trong bảng băm, phần tử có khóa k lưu mục có hàm băm h(k) khơng phải vị trí k • Q trình ánh xạ khóa vào vị trí phù hợp bảng băm gọi hashing • Khi hai khóa có vị trí bảng băm gọi xung đột (collision) KHOA CÔNG NGHỆ THÔNG TIN BẢNG BĂM • Bảng băm cấu trúc liệu mà khóa ánh xạ đến vị trí mảng thơng qua hàm băm KHOA CƠNG NGHỆ THƠNG TIN HÀM BĂM • Hàm băm cơng thức tốn học áp dụng ánh xạ cho khóa k tạo số nguyên dùng làm mục bảng băm • Một hàm băm tốt thỏa mãn điều kiện sau Tính tốn nhanh Các khóa phân bố bảng Ít xảy xung đột Xử lý loại khóa có kiểu liệu khác KHOA CƠNG NGHỆ THƠNG TIN CÁC PHƯƠNG PHÁP TẠO HÀM BĂM Phương pháp chia h(x) = x % M VD: tính giá trị băm cho khóa 1234 ; 5462, 2362 M = 10 (chọn số chẵn – kích thước bảng) h(1234) = 1234 % 10 = h(5462) = 5462 % 10 = h(2362) = 2362 % 10 = KHOA CÔNG NGHỆ THÔNG TIN Xung đột CÁC PHƯƠNG PHÁP TẠO HÀM BĂM Phương pháp chia h(x) = x % M VD: tính giá trị băm cho khóa 1234 ; 5462, 2362 M = (Chọn số lẻ – kích thước bảng) h(1234) = 1234 % = h(5462) = 5462 % = h(2362) = 2362 % = KHOA CÔNG NGHỆ THÔNG TIN Xung đột 10 XỬ LÝ XUNG ĐỘT – BẢNG BĂM MỞ DỊ TÌM BĂM KÉP • Hàm dị tìm băm kép có dạng sau h(x, i) = [ h1(x) + i * h2(k) ] mod m Trong đó, m: kích thước bảng băm h1(x) = k mod m h2(x) = k mod m’, với m’ = m - KHOA CÔNG NGHỆ THÔNG TIN 51 XỬ LÝ XUNG ĐỘT – BẢNG BĂM MỞ DỊ TÌM BĂM KÉP • Ví dụ: chèn giá trị 72, 81, 92, 11 vào bảng băm (m = 10, m’ = 8) dùng kỹ thuật dị băm kép • Có hàm băm h(x, i) = [ h1(x) + i * h2(x) ] mod m • Khởi động bảng băm sau, số lần dị tìm i = -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 KHOA CÔNG NGHỆ THÔNG TIN 52 XỬ LÝ XUNG ĐỘT – BẢNG BĂM MỞ DỊ TÌM BĂM KÉP • Chèn x = 72, i = • h(72, 0) = [ h1(72) + * h2(72) ] mod 10 = [(72 mod 10) + * (72 mod 8)] mod 10 = • Vị trí cịn trống nên chèn 72 vào vị trí -1 -1 72 -1 -1 -1 -1 -1 -1 -1 KHOA CÔNG NGHỆ THÔNG TIN 53 XỬ LÝ XUNG ĐỘT – BẢNG BĂM MỞ DỊ TÌM BĂM KÉP • Chèn x = 81, i = • h(81, 0) = [ h1(81) + * h2(81) ] mod 10 = [(81 mod 10) + * (81 mod 8)] mod 10 = • Vị trí cịn trống nên chèn 72 vào vị trí -1 81 72 -1 -1 -1 -1 -1 -1 -1 KHOA CÔNG NGHỆ THÔNG TIN 54 XỬ LÝ XUNG ĐỘT – BẢNG BĂM MỞ DỊ TÌM BĂM KÉP • Chèn x = 92, i = • h(92, 0) = [ h1(92) + * h2(92) ] mod 10 = [(92 mod 10) + * (92 mod 8)] mod 10 = • Vị trí có liệu, tăng i = -1 81 72 -1 -1 -1 -1 -1 -1 -1 KHOA CÔNG NGHỆ THÔNG TIN 55 XỬ LÝ XUNG ĐỘT – BẢNG BĂM MỞ DỊ TÌM BĂM KÉP • Chèn x = 92, i = • h(92, 1) = [ h1(92) + * h2(92) ] mod 10 = [(92 mod 10) + * (92 mod 8)] mod 10 = • Vị trí cịn trống nên chèn 92 vào vị trí 6, i = -1 81 72 -1 -1 -1 92 -1 -1 -1 KHOA CÔNG NGHỆ THÔNG TIN 56 XỬ LÝ XUNG ĐỘT – BẢNG BĂM MỞ DỊ TÌM BĂM KÉP • Chèn x = 11, i = • h(11, 0) = [ h1(11) + * h2(11) ] mod 10 = [(11 mod 10) + * (11 mod 8)] mod 10 = • Vị trí có liệu nên tăng i = -1 81 72 -1 -1 -1 92 -1 -1 -1 KHOA CÔNG NGHỆ THÔNG TIN 57 XỬ LÝ XUNG ĐỘT – BẢNG BĂM MỞ DỊ TÌM BĂM KÉP • Chèn x = 11, i = • h(11, 1) = [ h1(11) + * h2(11) ] mod 10 = [(11 mod 10) + * (11 mod 8)] mod 10 = • Vị trí cịn trống nên chèn 11 vào vị trí 4, i = -1 81 72 -1 11 -1 92 -1 -1 -1 KHOA CÔNG NGHỆ THÔNG TIN 58 XỬ LÝ XUNG ĐỘT – BẢNG BĂM MỞ DỊ TÌM BĂM LẠI • Khi bảng băm gần đầy, xung đột cao • Tạo bảng băm có kích thước gấp đơi bảng băm ban đầu • Tính lại khóa bảng băm KHOA CÔNG NGHỆ THÔNG TIN 59 XỬ LÝ XUNG ĐỘT – BẢNG BĂM MỞ DÒ TÌM BĂM LẠI • VD: Chèn giá trị 26, 31, 43, 17 vào bảng có kích thước m = • m = 5, h(x) = x % 26 31 43 17 • m = 10, h(x) = x % 10 31 KHOA CÔNG NGHỆ THÔNG TIN 43 26 17 60 BÀI TẬP Sử dụng hàm băm chia dị tìm tuyến tính để lưu khóa sau vào mảng có 20 phần tử 224562 137456 214562 140145 214567 162145 144467 199645 234534 KHOA CÔNG NGHỆ THÔNG TIN 61 BÀI TẬP Sử dụng hàm băm bình phương giữa, lấy chữ số, dị tìm bậc để lưu khóa sau vào mảng có 20 phần tử Với c1 = 3, c2 = 224562 137456 214562 140145 214567 162145 144467 199645 234534 KHOA CÔNG NGHỆ THÔNG TIN 62 BÀI TẬP Cho bảng băm có m = 11 có hàm băm sau h1(x) = x mod m h2(x) = [ x mod (m-1) ] + Hãy chèn số 22, 1, 13, 11, 24, 33, 18, 42, 31 sử dụng a) Dị tìm tuyến tính b) Dị tìm băm kép KHOA CƠNG NGHỆ THƠNG TIN 63 BÀI TẬP Cho bảng băm có m = 10 Hãy chèn chuỗi “HASH TABLE” vào bảng băm Đề xuất viết giải thuật tìm khóa bảng băm Đề xuất viết giải thuật xóa khóa bảng băm KHOA CƠNG NGHỆ THƠNG TIN 64 ... EMP_ID phạm vi [00000, 99 999 ] • Ta cần mảng có 100,000 phần tử để lưu trữ với EMP_ID mục tương ứng mảng Dữ liệu  An Bình Minh … Ngọc … EMP_ID  00000 00001 00002 … 99 … 99 999  Tốn nhiều khơng... 24, 63, 81, 92 , 108 vào bảng băm (m = 10) dùng kỹ thuật dị tuyến tính • Có hàm băm h(x, i) = [h’(x) + i] mod m • Khởi động bảng băm sau, số lần dị tìm i = -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 KHOA CÔNG... h(72, 0) = [72 mod 10 + 0] mod 10 = mod 10 = • Vị trí cịn trống nên chèn 72 vào vị trí -1 -1 72 -1 -1 -1 -1 -1 -1 -1 KHOA CÔNG NGHỆ THÔNG TIN 28 XỬ LÝ XUNG ĐỘT – BẢNG BĂM MỞ DỊ TÌM TUYẾN TÍNH

Ngày đăng: 27/01/2023, 08:45