Ý nghĩa của băm mở và băm đóng


93

Mở băm (Chuỗi riêng biệt):

Trong băm mở, các khóa được lưu trữ trong danh sách liên kết gắn với các ô của bảng băm.

Băm kín (Định địa chỉ mở):

Trong băm đóng, tất cả các khóa được lưu trữ trong chính bảng băm mà không cần sử dụng danh sách được liên kết.

Tôi không thể hiểu tại sao chúng được gọi là mở, đóng và riêng biệt. Một số người có thể giải thích nó?


Trên thực tế, chúng tôi không bao giờ lưu trữ khóa trong bảng băm, chúng tôi lấy một bộ giá trị (Khóa, Giá trị) và sử dụng khóa để tính toán nơi giá trị sẽ được lưu trữ. Vì vậy, chúng tôi thực sự lưu trữ các giá trị trong Bảng băm
Ông Suryaa Jha

Câu trả lời:


117

Việc sử dụng "đóng" so với "mở" phản ánh việc chúng ta có bị khóa trong việc sử dụng một vị trí hoặc cấu trúc dữ liệu nhất định hay không (đây là một mô tả cực kỳ mơ hồ, nhưng hy vọng phần còn lại sẽ giúp ích).

Ví dụ: "mở" trong "mở địa chỉ" cho chúng ta biết chỉ mục (hay còn gọi là. Địa chỉ) mà tại đó một đối tượng sẽ được lưu trữ trong bảng băm không hoàn toàn được xác định bởi mã băm của nó. Thay vào đó, chỉ số có thể thay đổi tùy thuộc vào những gì đã có trong bảng băm.

"Đóng" trong "băm đóng" đề cập đến thực tế là chúng ta không bao giờ rời khỏi bảng băm; mọi đối tượng được lưu trữ trực tiếp tại một chỉ mục trong mảng nội bộ của bảng băm. Lưu ý rằng điều này chỉ có thể thực hiện được bằng cách sử dụng một số loại chiến lược địa chỉ mở. Điều này giải thích tại sao "băm đóng" và "định địa chỉ mở" là những từ đồng nghĩa.

Đối lập điều này với băm mở - trong chiến lược này, không có đối tượng nào thực sự được lưu trữ trong mảng của bảng băm; thay vào đó khi một đối tượng được băm, nó được lưu trữ trong một danh sách tách biệt với mảng bên trong của bảng băm. "mở" đề cập đến sự tự do mà chúng ta có được bằng cách rời khỏi bảng băm và sử dụng một danh sách riêng. Nhân tiện, "danh sách riêng biệt" gợi ý tại sao băm mở còn được gọi là "chuỗi riêng biệt".

Tóm lại, "đóng" luôn đề cập đến một số loại bảo đảm nghiêm ngặt, như khi chúng ta đảm bảo rằng các đối tượng luôn được lưu trữ trực tiếp trong bảng băm (băm đóng). Sau đó, ngược lại với "đóng" là "mở", vì vậy nếu bạn không có những đảm bảo như vậy, chiến lược được coi là "mở".


17
Chúng ta nên nói thêm rằng Open Hashing (Separate Chaining) không bị giới hạn đối với các danh sách được liên kết, các danh sách này không thân thiện với bộ nhớ cache và không thân thiện với các cuộc tấn công xung đột đối với hành vi O (n / 2). Bạn cũng có thể sử dụng cây hoặc các mảng được sắp xếp cho các nhóm va chạm.
rurban

phản đối do thông tin mâu thuẫn: bạn đã nói "mở" và "đóng là từ đồng nghĩa, sau đó ở cuối:" ngược lại với "đóng" là "mở"
Marwen Trabelsi

1
@MarwenTrabelsi Tôi chưa bao giờ nói rằng "đóng" và "mở" là từ đồng nghĩa.
Ken Wayne VanderLinde

'Điều này giải thích tại sao "băm đóng" và "định địa chỉ mở" là những từ đồng nghĩa.'
Marwen Trabelsi

1
Ai đó có thể cung cấp nguồn chứng minh đây là từ nguyên lịch sử chính xác không?
Santropedro

3

Bạn có một mảng là "bảng băm".

Trong Open Hashing, mỗi ô trong mảng trỏ đến một danh sách chứa các xung đột. Quá trình băm đã tạo ra cùng một chỉ mục cho tất cả các mục trong danh sách được liên kết.

Trong Closed Hashing, bạn chỉ sử dụng một mảng cho mọi thứ. Bạn lưu trữ các va chạm trong cùng một mảng. Bí quyết là sử dụng một số cách thông minh để chuyển từ va chạm sang va chạm đơn vị khi bạn tìm thấy thứ mình muốn. Và làm điều này theo cách có thể tái tạo / xác định được.


2

Địa chỉ mở tên đề cập đến thực tế là vị trí ("địa chỉ") của phần tử không được xác định bởi giá trị băm của nó. (Phương pháp này còn được gọi là băm đóng).

Trong chuỗi riêng biệt , mỗi nhóm là độc lập và có một số loại ADT (danh sách, cây tìm kiếm nhị phân, v.v.) các mục nhập có cùng chỉ mục. Trong một bảng băm tốt, mỗi nhóm không có hoặc một mục nhập, vì chúng ta cần các hoạt động theo thứ tự O (1) để chèn, tìm kiếm, v.v.

Đây là một ví dụ về chuỗi riêng biệt bằng cách sử dụng C ++ với một hàm băm đơn giản sử dụng toán tử mod (rõ ràng, một hàm băm không hợp lệ)

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.