Tôi đã luôn sử dụng từ điển. Tôi viết bằng Python.Sự khác biệt thực sự giữa từ điển và bảng băm là gì?
Trả lời
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.
Từ điển Python được triển khai nội bộ bằng thẻ bắt đầu bằng #.
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. –
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 .
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 –
@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. –
@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
"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, dict
và set
.
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ộ" -!)
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.
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ó.
- 1. Sự khác biệt giữa Hashtable và Từ điển là gì?
- 2. Sự khác nhau giữa từ điển và mảng là gì?
- 3. Sự khác biệt giữa HashMap và từ điển ADT
- 4. Sự khác biệt giữa gmake và thực hiện là gì?
- 5. Sự khác biệt giữa đối tượng và từ điển?
- 6. sự khác biệt giữa băm của perl và từ điển python
- 7. là gì sự khác biệt giữa SQL_Latin1_General_CP1_CI_AS và SQL_Latin1_General_CP1_CI_AI
- 8. Sự khác biệt giữa (string [] args) và System.Environment.CommandLine là gì?
- 9. Sự khác biệt giữa 'ký tự' và 'octet' trong băm
- 10. Sự khác biệt giữa engine.io và socket.io là gì?
- 11. Sự khác biệt giữa while (true) và loop là gì?
- 12. Trong Ember.js, sự khác biệt giữa [] và Ember.A ([]) là gì?
- 13. SQLAlchemy: Sự khác biệt giữa flush() và commit() là gì?
- 14. Sự khác biệt giữa build.sbt và build.scala là gì?
- 15. Sự khác biệt giữa thuật toán băm SHA-2 và SHA-3 là gì?
- 16. Sự khác biệt giữa 'WCHAR' và 'wchar_t' là gì?
- 17. Sự khác biệt giữa "Thread.currentThread(). GetName" và "this.getName" là gì?
- 18. Sự khác biệt giữa Raphael và gRaphael là gì?
- 19. Sự khác biệt giữa RadGrid.Rebind() và RadGrid.MasterTableView.Rebind() là gì?
- 20. Sự khác biệt giữa khẳng định và static_assert là gì?
- 21. Sự khác biệt giữa một đối tượng và một băm?
- 22. Sự khác biệt giữa RoutedCommand và RoutedUICommand là gì?
- 23. sự khác biệt giữa ngSwitch và ngInclude là gì?
- 24. Sự khác biệt giữa INTERSECT và WHERE IN là gì?
- 25. sự khác biệt giữa lệnh linux và unix là gì?
- 26. Sự khác biệt giữa Caching và Memoization là gì?
- 27. Sự khác biệt giữa .closest() và .parents ('selector') là gì?
- 28. Sự khác biệt giữa chẩn đoán và metaheuristics là gì?
- 29. Sự khác biệt giữa ascx và .cshtml là gì?
- 30. sự khác biệt giữa DoCmd.SetWarnings và CurrentDB.Execute là gì
Tôi ước tôi có thể bỏ phiếu này nhiều lần. – LJM
Tôi sẽ đăng ký lại cho bạn. –