2010-01-13 33 views

Trả lời

130

Từ điển là khái niệm chung để ánh xạ khóa cho giá trị. Có nhiều cách để thực hiện một ánh xạ như vậy.

Một Hashtable là một cách cụ thể để triển khai từ điển.

Bên cạnh hashtables, một cách phổ biến khác để triển khai từ điển là red-black trees.

Mỗi phương pháp đều có ưu và nhược điểm riêng. Một cây đỏ đen luôn có thể thực hiện tra cứu trong O (log N). Một hashtable có thể thực hiện một tra cứu trong O (1) thời gian mặc dù có thể làm suy giảm đến O (N) tùy thuộc vào đầu vào.

+13

Tôi ước tôi có thể bỏ phiếu này nhiều lần. – LJM

+2

Tôi sẽ đăng ký lại cho bạn. –

8

Từ điển Python được triển khai nội bộ bằng thẻ bắt đầu bằng #.

+0

Một phân lớp của dict không phải là việc thực thi Python của từ điển; đó là của riêng bạn. –

22

Từ điển là cấu trúc dữ liệu ánh xạ khóa tới giá trị.

Bảng băm là cấu trúc dữ liệu ánh xạ khóa tới giá trị bằng cách lấy giá trị băm của khóa (bằng cách áp dụng hàm băm nào đó) và ánh xạ tới một nhóm nơi một hoặc nhiều giá trị được lưu trữ.

IMO điều này tương tự như yêu cầu sự khác biệt giữa danh sách và danh sách được liên kết. Để rõ ràng, có thể điều quan trọng là Python hiện đang thực hiện các từ điển của họ bằng cách sử dụng các bảng băm, và CÓ THỂ là trường hợp trong tương lai mà Python thay đổi thực tế đó mà không làm cho từ điển của họ ngừng sử dụng từ điển .

+0

Sự khác biệt chính là từ điển cũng lưu trữ khóa? Vì vậy, bạn có thể truy vấn một từ điển cho elsit khóa - bạn không thể cho một bảng băm –

+1

@Martin Beckett: Không. Cả hai có thể lưu trữ các phím. Từ điển là chung. Bảng băm là một triển khai cụ thể của khái niệm chung. –

+0

@Martin Beckett: Hm, điểm thú vị. Có nhất thiết phải trường hợp từ điển lưu trữ khóa và bảng băm không? "Hashtable' của Java lưu trữ các khóa - nó không phải là một bảng băm, sau đó? – danben

13

"Từ điển" có một vài ý nghĩa khác nhau trong lập trình, vì wikipedia sẽ cho bạn biết - "mảng kết hợp", ý nghĩa trong đó Python sử dụng cụm từ này (còn được gọi là "ánh xạ") ý nghĩa (nhưng "từ điển dữ liệu" và "tấn công từ điển" trong các lần thử đoán mật khẩu cũng rất quan trọng).

Bảng băm là cấu trúc dữ liệu quan trọng; Python sử dụng chúng để triển khai hai loại dữ liệu tích hợp quan trọng, dictset.

Vì vậy, ngay cả trong Python, bạn có thể không xem xét "bảng băm" là một từ đồng nghĩa với "từ điển" ... kể từ khi một cấu trúc dữ liệu tương tự cũng được sử dụng để thực hiện "bộ" -!)

0

Từ điển được triển khai bằng cách sử dụng các bảng băm. Theo tôi, sự khác biệt giữa 2 có thể được coi là sự khác biệt giữa Stacks và mảng mà chúng ta sẽ sử dụng mảng để thực hiện Stacks.

1

Bảng băm luôn sử dụng một số hàm hoạt động trên một giá trị để xác định nơi lưu trữ giá trị. Một từ điển (như tôi tin bạn dự định nó) là một thuật ngữ tổng quát hơn, và chỉ đơn giản chỉ ra một cơ chế tra cứu, có thể là một bảng băm hoặc có thể được thực hiện bởi một cấu trúc đơn giản hơn mà không xem xét giá trị của nó trong việc xác định vị trí lưu trữ của nó.

Các vấn đề liên quan