Trong cuộc thảo luận về cấu trúc dữ liệu heap, ví dụ: CLRS, hàng đợi ưu tiên tối đa chỉ cần INSERT, MAXIMUM, EXTRACT-MAX và INCREASE-KEY. Nhưng tại sao nó cũng không có DECREASE-KEY, ít nhất, hoạt động của nó cũng sẽ làm mất hiệu lực tài sản heap? Có thực tế không quan trọng?Tại sao hàng đợi không có mức ưu tiên tối đa có DECREASE-KEY?
Trả lời
FWIW CLR V1 của tôi nói về INSERT, MIN, EXTRACT-MIN, UNION, DECREASE-KEY và DELETE, nhưng chúng tôi có thể chuyển đổi sang phiên bản của bạn bằng cách lật các biển báo.
Tôi nghĩ rằng tập hợp này được thúc đẩy bởi các yêu cầu của thuật toán sử dụng hàng đợi ưu tiên, chẳng hạn như cây bao trùm tối thiểu, đường đi ngắn nhất Dijstra và (Tôi nghi ngờ) A *. Ví dụ, nếu bạn nhìn vào phần đầu của chương về cây bao trùm tối thiểu, bạn có thể thấy một lưu ý rằng thuật toán của Prim có thể được tăng tốc nếu bạn thay thế đống nhị phân bằng đống heaps.
"CLR V1 của tôi"? Bạn có thể giải thích được không? Chính xác, những gì tôi đã yêu cầu thực sự tương ứng với "Tại sao hàng đợi ưu tiên tối thiểu có TĂNG-KEY?" –
"CLR v1 của tôi" đề cập đến ấn bản đầu tiên của cuốn sách, mà không có Stein làm tác giả. Đoạn thứ hai trả lời câu hỏi của bạn, mặc dù: các thuật toán sử dụng hàng đợi ưu tiên chỉ cần có khả năng di chuyển các mục nhập trước đó trong hàng đợi, không muộn hơn. – Novelocrat
Không có gì ngăn bạn thực hiện DECREASE-KEY trong heap nhị phân của bạn. Nó có thể được thực hiện trong O (log N) mà không vi phạm bất kỳ bất biến nào.
Tôi đoán là nó không được bao gồm, bởi vì nó không cần thiết rất thường xuyên.
Mã giả của bạn để thực hiện điều này là gì? Chỉ cần heapify tại vị trí hiện tại? –
Giả sử "heapify" có nghĩa là di chuyển nút hiện tại xuống cho đến khi các bất biến heap được thỏa mãn, sau đó vâng. – svick
Nếu bạn có MAX-HEAP, DECREASE-KEY sẽ là MAX-HEAPIFY trong phần 6.2 "Duy trì thuộc tính đống" của CLRS, ấn bản thứ ba.
- 1. Hàng đợi ưu tiên với các ưu tiên mục động
- 2. Hàng đợi ưu tiên có thể thay đổi đồng thời
- 3. Cài đặt mức độ ưu tiên (ưu tiên) không có hiệu lực trên Linux
- 4. Tại sao PriorityQueue không hoạt động như một Hàng đợi?
- 5. Tại sao khung .Net không có lớp xếp hàng ưu tiên?
- 6. hợp nhất hai hàng đợi ưu tiên
- 7. Tại sao hàng đợi ưu tiên chủ yếu sử dụng 0 làm ưu tiên quan trọng nhất?
- 8. Có hàng đợi ưu tiên dựa trên Fibonacci cho Haskell không?
- 9. Hàng đợi ưu tiên STL với các phím trùng lặp - có thể không?
- 10. Tại sao có mức độ ưu tiên cho các toán tử như static_cast?
- 11. Xóa phần tử đuôi của hàng đợi ưu tiên
- 12. Cách sửa đổi mức độ ưu tiên của hàng đợi GCD tùy chỉnh?
- 13. Hàng đợi ưu tiên an toàn cho Delphi?
- 14. Hàng đợi ưu tiên cho đối tượng HashMap trong Java
- 15. Hàng đợi ưu tiên có thể theo dõi chuỗi an toàn được đệm?
- 16. Tôi có thể thay đổi mức ưu tiên của một quy trình trong Erlang không?
- 17. Tại sao index.html có ưu tiên hơn index.php?
- 18. Thực hiện hàng đợi ưu tiên có thể được lặp lại trong C++
- 19. Thiết kế đa luồng có tối ưu hóa tốt không?
- 20. java có xếp hàng ưu tiên tối thiểu được lập chỉ mục không?
- 21. Triển khai hàng đợi ưu tiên của Brodal
- 22. Hàng đợi ưu tiên STL - xóa một mục
- 23. Hàng đợi thư của Microsoft - cờ ưu tiên hoặc hàng đợi riêng biệt?
- 24. Hàng đợi ưu tiên STL trên lớp tùy chỉnh
- 25. Xóa một mục tùy ý khỏi hàng đợi ưu tiên
- 26. Linux & C: Cách đặt mức độ ưu tiên đọc tệp trong chương trình đa tiến trình?
- 27. Bộ sưu tập nhanh nhất trong C# để triển khai hàng đợi ưu tiên là gì?
- 28. Hàng đợi ưu tiên Java và giao diện có thể so sánh
- 29. Tại sao vẫn có giới hạn hàng trong Microsoft Excel?
- 30. Android: cách phát nhạc ở mức tối đa có thể?
Tôi nghĩ rằng điều này liên quan đến cách hàng đợi ưu tiên tối thiểu thường không có INCREASE-KEY, mặc dù nó là một hoạt động hoàn toàn được xác định rõ ràng. Tôi đoán là đây chỉ là thứ không phát sinh nhiều. Ngoài ra, w00t ngày nhận được chính xác 1337 danh tiếng! – templatetypedef
Tôi có thể thề rằng tôi đã hỏi câu hỏi chính xác này trước đây nhưng tôi không thể tìm thấy nó. –
https://cs.stackexchange.com/questions/10203/increase-key-and-decrease-key-in-a-binary-min-heap – max