Hãy xem xét một chuỗi các n số thực dương, (một i), và trình tự tổng hợp một phần của nó, (s i). Cho một số x ε (0, s n], chúng tôi phải tìm i mà si -1 < x ≤ s i. Cũng chúng tôi muốn có thể thay đổi một trong số a i mà không phải cập nhật tất cả các khoản tiền một phần. Cả hai có thể được thực hiện trong O (log n) thời gian bằng cách sử dụng cây nhị phân với các giá trị nút lá i và giá trị của các nút không phải lá là tổng của các giá trị của các con tương ứng. Nếu n được biết và cố định, cây không phải tự cân bằng và có thể được lưu trữ hiệu quả trong một mảng tuyến tính. Hơn nữa, nếu n là công suất của hai, chỉ cần có 2 thành phần mảng n - 1. Xem Blue và cộng sự, Phys. Rev. E (1995), tr. R867 – R868 cho một ứng dụng. Do tính tổng quát của vấn đề và sự đơn giản của giải pháp, tôi tự hỏi liệu cấu trúc dữ liệu này có một tên cụ thể và liệu có các triển khai hiện có hay không (tốt nhất là trong C++). Tôi đã tự mình thực hiện, nhưng việc viết cấu trúc dữ liệu từ đầu luôn có vẻ như tạo lại bánh xe cho tôi — tôi sẽ ngạc nhiên nếu không ai làm điều đó trước đây.cây nhị phân mà các cửa hàng tiền từng phần: Tên và triển khai hiện
7
A
Trả lời
4
Fenwick tree (còn gọi là cây được lập chỉ mục nhị phân) là cấu trúc dữ liệu duy trì một chuỗi phần tử và có thể tính tổng tích lũy của bất kỳ phạm vi phần tử liên tiếp nào trong thời gian O (logn). Thay đổi giá trị của bất kỳ phần tử đơn lẻ nào cũng cần thời gian O (logn).
4
Điều này được gọi là finger tree trong lập trình hàm nhưng dường như có các triển khai bằng ngôn ngữ mệnh lệnh. Trong các bài báo có một liên kết đến một số blog post giải thích việc triển khai cấu trúc dữ liệu này trong C# có thể hữu ích cho bạn.
Các vấn đề liên quan
- 1. Cách triển khai cây không nhị phân
- 2. Tìm thư viện java đã triển khai Cây nhị phân
- 3. javascript triển khai thực hiện tìm kiếm nhị phân javascript
- 4. Thực hiện cây nhị phân trong Ruby
- 5. Sắp xếp các phần tử trong cây nhị phân
- 6. Tại sao nên sử dụng đống thay vì cây nhị phân khi triển khai hàng đợi ưu tiên?
- 7. C# Cây nhị phân và từ điển
- 8. Cách tạo cây nhị phân
- 9. JAVA: cây nhị phân
- 10. Cây nhị phân từ cây chung
- 11. Chuyển cây nhị phân
- 12. Thứ tự Traversal của cây nhị phân
- 13. Cây nhị phân từ các trình duyệt ngang hàng và trật tự cấp độ?
- 14. Thuật toán chèn cây nhị phân
- 15. Cây nhị phân Sử dụng PHP + MySQL
- 16. Tìm kiếm nhị phân Cây C thực hiện
- 17. Cân bằng một cây nhị phân (AVL)
- 18. C++ Thực hiện một Heap nhị phân
- 19. OCaml: vẽ cây nhị phân
- 20. Ranh giới in của cây nhị phân
- 21. C# - Cây nhị phân đơn giản
- 22. Traversing một cây nhị phân đệ quy
- 23. Cây tìm kiếm nhị phân trên cây AVL
- 24. Triển khai tới Cửa hàng Google Play qua API
- 25. Cây nhị phân có chứa cây khác không?
- 26. triển khai công cụ tìm kiếm cơ bản với cây tiền tố
- 27. Cây tìm kiếm nhị phân đệ quy
- 28. Haskell: Làm phẳng cây nhị phân
- 29. GraphViz cây nhị phân trái và phải con
- 30. Xây dựng cây biểu thức nhị phân