Tôi đang triển khai một vùng tối thiểu tối đa, một loại hàng đợi ưu tiên kép. Bạn có thể xem tại đây here để biết thêm thông tin về heaps tối đa.Hoạt động xóa-tối đa trong một heap tối thiểu
Mã để chèn và thao tác xóa-min rất đơn giản và có sẵn trên mạng. Tuy nhiên, tôi cũng đang cố gắng triển khai hoạt động xóa-tối đa trên heap tối thiểu. Ban đầu, tôi cảm thấy rằng xóa-max trong min-max heap sẽ giống như xóa-max trong đống tối đa (nếu chúng ta xem xét subtree của min-max heap chứa phần tử tối đa, nó giống như một max- min heap). Vì vậy, việc thực hiện sẽ đơn giản và tương tự như xóa-min của min-max heap.
Nhưng, có một vấn đề:
Như có thể thấy trong hình trên, mặc dù 70 là yếu tố tối đa, yếu tố cuối cùng (12) của heap min-max được không cây con có chứa 70. Vì vậy, tôi có thể sử dụng nó để thay thế khoảng trống còn lại trong cây con trái sau khi xóa 70?
Nếu chúng tôi không sử dụng phần tử đó và thay vào đó hãy làm theo quy trình xóa tối đa của vùng tối đa và sử dụng 20 để thay thế khoảng cách, phần tử tiếp theo được chèn vào heap sẽ ở đúng con 10 và mãi mãi sẽ không có con đúng nào của số 9.
Vì vậy, bất kỳ ai cũng có thể giúp tôi không?
Vì câu hỏi về việc xóa khóa ngẫu nhiên khác với câu hỏi về cách sửa lỗi sau khi xóa-tối đa, tôi sẽ xem xét đặt câu hỏi dưới dạng câu hỏi riêng. – templatetypedef
@templatetypedef Đã chỉnh sửa câu hỏi này để tập trung vào "cách xóa phần tử tối đa". Bây giờ bạn có thể tìm thấy một câu hỏi cụ thể với giải pháp được đề xuất về "cách xóa bất kỳ nút nào khỏi vùng heap tối thiểu" tại đây: http://stackoverflow.com/q/39392864/3924118 – nbro