Có bất kỳ triển khai nào của một vùng nhị phân chuẩn thuần túy không? Tôi biết có rất nhiều heaps thú vị như: Binomial, heap leftist, tất cả chúng đều có chức năng thực hiện, chỉ cần tự hỏi là có một cách để thực hiện heap nhị phân tiêu chuẩn hoặc chúng ta phải sử dụng Array để thực hiện nó, vì loại bất biến? Cảm ơn!Làm thế nào tôi có thể thực hiện một đống nhị phân chuẩn hoàn toàn chức năng (ocaml hoặc haskell)?
Làm thế nào tôi có thể thực hiện một đống nhị phân chuẩn hoàn toàn chức năng (ocaml hoặc haskell)?
Trả lời
Bạn không cần một mảng để triển khai vùng heap, bạn có thể triển khai nó dưới dạng cấu trúc cây.
data Heap t = Node t (Heap t) (Heap t) | Nil
Nhược điểm là bạn kết thúc việc phân bổ lại O(log N)
các nút cho mỗi hoạt động heap, và bạn sẽ không có bất kỳ địa phương bộ nhớ cache của một mảng dựa trên thực hiện mệnh lệnh. Một số hoạt động sẽ khó khăn với cấu trúc này, nhưng vì tôi không biết bạn muốn làm gì với heap, tôi không thể chỉ cho bạn một hướng cụ thể hơn.
Lý do chúng tôi có các cấu trúc chức năng đặc biệt như cây ngón tay là tăng tốc các hoạt động cụ thể mà bạn thường không thực hiện trên heap, như lấy nút lá tận cùng bên trái. Bạn có thể sử dụng nhiều cấu trúc dữ liệu giống nhau mà bạn đã học cho các ngôn ngữ mệnh lệnh trong Haskell chỉ với những thay đổi về cách thức chúng được cập nhật.
Cảm ơn Dietrich, hoạt động tôi muốn thực hiện là đẩy một giá trị mới ngẫu nhiên từ gốc, chỉ cần không chắc chắn đó là cách tốt nhất để thực hiện thao tác này theo kiểu chức năng. – Ang
Phích cắm không được biết: Braun trees là các ứng viên hoàn hảo cho một min-heap thuần túy chức năng (hoặc hàng đợi ưu tiên).
Bạn có thể xem qua các ý tưởng được mô tả trong bài báo này A Functional Approach to Standard Binary Heaps hoặc trong nguồn này Heap.scala.
- 1. Có chức năng `lật` trong thư viện chuẩn OCaml không?
- 2. C++ Thực hiện một Heap nhị phân
- 3. Làm thế nào để thực hiện số nhị phân trong Haskell
- 4. Làm thế nào để bạn thực hiện một chức năng ghi nhớ chung trong Haskell?
- 5. Cách chức năng thư viện trong Haskell được thực hiện
- 6. Finding yếu tố cuối cùng của một đống nhị phân
- 7. Có thể triển khai phiên bản js của giải nén Haskell theo cách hoàn toàn chức năng không?
- 8. Bộ chức năng thông minh hoàn toàn
- 9. C++ và HOÀN TOÀN chức năng động
- 10. Haskell: Làm phẳng cây nhị phân
- 11. OCaml: vẽ cây nhị phân
- 12. Danh sách Ocaml: Thực hiện chức năng chắp thêm và bản đồ
- 13. Giết một số nhị phân Haskell
- 14. module Ocaml thực hiện
- 15. Thực hiện quá tải chức năng trong Haskell
- 16. Làm thế nào chức năng này có thể được viết lại để thực hiện OrderedDict?
- 17. Làm thế nào tôi có thể hoàn thành việc thực hiện Mục tiêu-C này của một chức năng của sản phẩm Descartes?
- 18. Làm thế nào để sử dụng một cách an toàn các chức năng Linux mới?
- 19. Mới cho OCaml: Làm thế nào tôi sẽ đi về thực hiện loại bỏ Gaussian?
- 20. Làm thế nào để có được quyền kiểm soát của một đống 5GB trong Haskell?
- 21. Làm thế nào để thực hiện chức năng ajax onbeforeunload?
- 22. Heap mềm hoàn toàn chức năng
- 23. Làm thế nào tôi có thể khai báo một biến toàn cầu trong Matlab cho một vài chức năng?
- 24. q.js: tôi có thể ngừng chức năng thực hiện cho đến khi lời hứa được hoàn thành không?
- 25. msgpack C++ thực hiện: Làm thế nào để đóng gói dữ liệu nhị phân?
- 26. Làm thế nào tôi có thể làm một mã hóa nhị phân của một chuỗi trong python?
- 27. Chỉ thực hiện chức năng js sau khi yêu cầu ajax hoàn toàn bị complê
- 28. Thêm chức năng mới vào gói hiện có (tiêu chuẩn)
- 29. Làm thế nào tôi có thể thực hiện điều này một cách hiệu quả hơn
- 30. Chức năng $ thực sự làm gì trong haskell?
Đây không thực sự là một câu hỏi. Bạn có lẽ nên viết lại nó như một cái gì đó như "Làm thế nào tôi có thể thực hiện một đống nhị phân thuần túy chức năng?" - bạn có nhiều khả năng để có được câu trả lời hữu ích, sâu sắc với công thức này. –
@TikhonJelvis cảm ơn – Ang
Điều đó tùy thuộc. Bạn có mong đợi phiên bản thuần túy để sử dụng cùng một loại cấu trúc cho dữ liệu không? Hành xử theo cùng một cách cho các hoạt động nhất định? Nếu những thứ này được phép khác, thì nó có thực sự được gọi là "đống nhị phân" không? –