Câu trả lời:
Hash
là một cấu trúc dữ liệu được đặt tên cực kỳ kém, trong đó lập trình viên đã nhầm lẫn giao diện với việc triển khai ( và quá lười để viết tên đầy đủ, tức là HashTable
dùng đến một từ viết tắt, Hash
).
Dictionary
là tên chính xác của một giao diện (= ADT ), tức là một thùng chứa kết hợp ánh xạ các khóa (thường là duy nhất) thành các giá trị (không nhất thiết là duy nhất).
Bảng băm là một triển khai có thể có của một từ điển như vậy cung cấp các đặc điểm truy cập khá tốt (về mặt thời gian chạy) và do đó thường là triển khai mặc định.
Việc thực hiện như vậy có hai thuộc tính quan trọng:
(Để một khóa có thể băm có nghĩa là chúng ta có thể tính toán một giá trị số từ một khóa mà sau đó được sử dụng làm chỉ mục trong một mảng.)
Có tồn tại các triển khai thay thế của cấu trúc dữ liệu từ điển áp đặt thứ tự trên các khóa - đây thường được gọi là từ điển được sắp xếp (và thường được triển khai theo thuật ngữ của cây tìm kiếm, mặc dù các triển khai hiệu quả khác tồn tại).
Tóm lại: một từ điển là một ADT ánh xạ các khóa thành các giá trị. Có một số triển khai có thể có của ADT này, trong đó bảng băm là một. Hash
là một cách viết sai nhưng trong ngữ cảnh, nó tương đương với một từ điển được triển khai dưới dạng bảng băm.
Hash
lớp bằng bảng băm, vì Ruby 1.9 Hash
es giữ nguyên thứ tự chèn trong khi bảng băm thì không. Vì vậy, trong Ruby 1.9, cái tên Hash
thậm chí không phản ánh việc thực hiện nữa.
"Từ điển" là tên của khái niệm. Một hashtable là một thực hiện có thể.
Từ điển là thuật ngữ tập thể được đưa ra cho bất kỳ triển khai cấu trúc dữ liệu nào được sử dụng để tra cứu / chèn nhanh. Điều này có thể đạt được / thực hiện bằng nhiều cấu trúc dữ liệu khác nhau như bảng băm, danh sách bỏ qua, cây rb, v.v ... Bảng băm là một cấu trúc dữ liệu cụ thể hữu ích cho nhiều mục đích bao gồm thực hiện từ điển.
Một từ điển sử dụng một khóa để tham chiếu giá trị trực tiếp bên trong một mảng kết hợp .
I E (KEY => VALUE)
Một hàm băm thường được mô tả như một bảng băm sử dụng hàm băm để tính toán vị trí trong bộ nhớ (hoặc dễ dàng hơn là một mảng) trong đó giá trị sẽ là. Hàm băm sẽ lấy KEY làm đầu vào và đưa ra giá trị làm đầu ra. Sau đó cắm giá trị đó vào bộ nhớ hoặc chỉ mục mảng.
I E KEY => HASH FUNCTION => VALUE
Tôi đoán một cái là trực tiếp trong khi cái kia thì không. Các hàm băm có thể không hoàn hảo hoặc đôi khi có thể cung cấp một chỉ mục tham chiếu giá trị sai. Nhưng điều đó có thể được sửa chữa.
Nơi tốt nhất để tìm: Wikipedia ( mảng kết hợp và bảng băm )
unordered_map
để thể hiện những gì họ làm hơn là những gì họ đang làm.