Phân loại hàm băm


9

Trên internet, tôi bắt gặp câu hỏi này:

Phân loại các hàm băm dựa trên các phương pháp khác nhau theo đó giá trị khóa được tìm thấy.

với câu trả lời như

  • Phương pháp trực tiếp
  • Phương pháp trừ
  • Phương pháp phân chia Modulo
  • Phương pháp trích xuất chữ số
  • Phương pháp Mid-Square
  • Phương pháp gấp
  • Phương pháp giả ngẫu nhiên

mà tôi thấy lạ. Tôi nghĩ rằng tôi biết rất nhiều về băm, nhưng điều này là vô nghĩa với tôi, có ai có thể giải thích?

Câu trả lời:


4

Chúng là các phương thức biến mã băm thành một chỉ mục của mảng chứa các giá trị. Giả sử bạn có mã băm là 0x12345678. Một số lượng rất lớn và bạn không thể có một mảng có kích thước này. Nếu bạn làm bạn chỉ có thể làm

Value = array[0x12345678];

Và được thực hiện (phương pháp trực tiếp).

Nếu bạn không thì bạn có một cách để biến giá trị này thành giá trị phù hợp với kích thước mảng trong khi cố gắng tránh quá nhiều va chạm. Các thuật ngữ được sử dụng có thể được biết đến bởi các tên khác, nhưng ví dụ, bạn chỉ có thể che giấu các bit cao hơn của mã băm

Value = array[hashcode & 0xffff];

Hoặc sửa đổi mã băm theo kích thước mảng

Value = array[hashcode % array.size()]; // modulo division

Vân vân

Chỉnh sửa: liên kết này có thể giúp


Cảm ơn, đó là - liên kết dường như là nguồn gốc của *** này. Sẽ vẫn vô nghĩa khi họ trộn lẫn nhiều thứ lại với nhau: 1. tính toán mã băm từ một khóa (ví dụ: gấp và thêm), 2. cải thiện (= bôi nhọ) hàm băm (ví dụ: hình vuông giữa), 3. ánh xạ hàm băm cho chỉ mục (ví dụ: mô đun, "&").
maaartinus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.