Tôi có một hàng đợi ưu tiên các sự kiện, nhưng đôi khi các ưu tiên sự kiện thay đổi, vì vậy tôi muốn duy trì các trình vòng lặp từ những người yêu cầu sự kiện vào heap. Nếu ưu tiên thay đổi, tôi muốn heap được điều chỉnh trong thời gian log (n). Tôi sẽ luôn có chính xác một trình vòng lặp trỏ tới từng phần tử trong heap.Có một lớp heap trong C++ hỗ trợ thay đổi mức độ ưu tiên của các phần tử khác với phần đầu?
Trả lời
Tôi rất vui mừng thông báo rằng Boost hiện đã thêm một số Boost.Heap library với một số stellar data structures.
Lợi thế của việc này là các mức Fibonacci hỗ trợ thay đổi ưu tiên trong thời gian khấu hao không đổi.
Thật không may, tất cả các vùng ẩn có thể thay đổi được dựa trên nút (nói cách khác, chúng có thêm sự gián tiếp như được đề xuất bởi @wilx). Câu trả lời của @ Feruccio về "đống có thể thay đổi" của Boost có mã cho phép người ta viết đống có thể biến đổi dựa trên vectơ nếu bạn sẵn sàng có con trỏ tới các tay cầm chứa trong loại giá trị của bạn.
Điều đó nghe có vẻ như bạn cần thêm hướng dẫn. Lưu trữ con trỏ tới các sự kiện trong hàng đợi ưu tiên thay thế. Khi ưu tiên của một số phần tử của hàng đợi thay đổi, hãy xóa nó và lắp lại.
Hãy xem Boost của mutable heaps.
Một cảnh báo ở đây là bạn kết thúc với sự kiện không ổn định phân loại, tức là Trật tự của các sự kiện với các ưu tiên như nhau là undefined (đọc 'họ sẽ được sắp xếp lại.)
Bạn có thể loại bỏ một phần tử tùy ý khỏi một đống trong thời gian nhật ký (n). –
Vâng, bạn đã đúng, đang nghĩ về điều gì khác :) –
không có vấn đề :) –
- 1. Thay đổi mức độ ưu tiên trong Log4j
- 2. thay đổi mức độ ưu tiên của chuỗi gốc trên Android bằng c/C++
- 3. C# có thể thay đổi mức độ ưu tiên của việc mua khóa không?
- 4. Xóa phần tử khỏi phần giữa của tiêu chuẩn :: heap
- 5. Tôi có thể thay đổi mức ưu tiên của một quy trình trong Erlang không?
- 6. Thay đổi phần tử lớp thành phần tử giao diện
- 7. Xóa phần tử đuôi của hàng đợi ưu tiên
- 8. Làm thế nào để bảo toàn thứ tự các phần tử có cùng mức độ ưu tiên trong hàng đợi ưu tiên được thực hiện dưới dạng đống nhị phân?
- 9. Di chuột một phần tử và thay đổi một phần tử khác (không sử dụng Javascript)
- 10. Cách thay thế các phần tử trong mảng bằng các phần tử của mảng khác
- 11. Làm thế nào để có được phần tử span đầu tiên của một div và thay đổi lớp
- 12. Làm cách nào để thay đổi mức độ ưu tiên của một quy trình?
- 13. Lấy các phần tử theo tên lớp bên trong một phần tử khác bằng jQuery
- 14. Thay đổi lớp CSS của một phần tử trên runtime
- 15. Cách lấy phần tử đầu tiên trong một chuỗi?
- 16. C - phần tử nằm ngoài phần đầu của một mảng
- 17. Thay đổi thứ tự của các phần tử
- 18. Thay đổi kiểu của tất cả các phần tử khác khi một phần tử bị lơ lửng
- 19. Bộ chọn CSS để chọn phần tử đầu tiên của một lớp nhất định
- 20. Thay đổi mức độ ưu tiên của chuỗi tăng trong Windows
- 21. xoá phần tử đầu tiên khỏi mảng
- 22. Mức độ cụ thể CSS giữa các lớp/lớp giả và các phần tử/phần tử giả hoạt động như thế nào?
- 23. Cách lấy phần tử đầu tiên của tiêu chuẩn :: set
- 24. HTML, jQuery: Ràng buộc chiều rộng của một phần tử thành một phần tử khác
- 25. Thay đổi màu nền của tất cả các phần tử có cùng một lớp
- 26. Erlang: Phần tử đầu tiên trong danh sách khớp với một số điều kiện (không đánh giá phần còn lại của các phần tử)
- 27. Thay đổi lớp css cho tất cả các phần tử với lớp đã nói với Javascript
- 28. XPath - Chọn phần tử đầu tiên sau một số thành phần khác
- 29. Cách an toàn để thay đổi mức độ ưu tiên của NSOperation
- 30. Tại sao có mức độ ưu tiên cho các toán tử như static_cast?
Cảm ơn, nếu tôi phải tự cuộn, tôi sẽ sử dụng đoạn mã đó để bắt đầu. –
đã kết thúc với giải pháp này –
@Ferruccio Cảm ơn, đã lưu 45 phút và một vài lỗi của tôi. –