Tuyên bố miễn trừ trách nhiệm: Tôi biết có những câu hỏi nghe có vẻ tương tự đã có ở đây và trên Stackoverflow. Nhưng tất cả chúng là về sự va chạm, đó không phải là điều tôi đang yêu cầu.
Câu hỏi của tôi là: tại sao đầu tiên lại ít va chạm - tra cứu O(1)
?
Giả sử tôi có hashtable này:
Hash Content
-------------
ghdjg Data1
hgdzs Data2
eruit Data3
xcnvb Data4
mkwer Data5
rtzww Data6
Bây giờ tôi đang tìm khóa k
mà hàm băm h(k)
cung cấp h(k) = mkwer
. Nhưng làm thế nào để tra cứu "biết" rằng hàm băm mkwer
ở vị trí 5? Tại sao nó không phải cuộn qua tất cả các phím O(n)
để tìm nó? Băm không thể là một số loại địa chỉ phần cứng thực sự vì tôi mất khả năng di chuyển dữ liệu xung quanh. Và theo như tôi biết, hashtable không được sắp xếp trên các giá trị băm (ngay cả khi nó là, tìm kiếm cũng sẽ mất O(log n)
)?
Làm thế nào để biết một hàm băm giúp tìm đúng vị trí trong bảng?