Nếu tôi có một vùng tối đa và nếu tôi cần thay đổi phần tử tối đa, nó sẽ đi xuống một thuật toán bong bóng đơn. Có cách nào để làm điều này thông qua thư viện chuẩn C++, mà không cần mã hóa thuật toán bằng tay?Làm thế nào để thay đổi phần tử tối đa trong một heap trong thư viện chuẩn C++?
Tôi hiểu nó phải tương đương với pop_heap + push_heap, nhưng đó là 2 hoạt động bong bóng xuống thay vì chỉ một.
Vậy - thuật toán bong bóng này có được hiển thị qua API thư viện không?
Tôi nghĩ rằng 'std :: make_heap' sẽ chậm hơn một chút so với pop và đẩy cho một đống lớn. Đối với một đống nhỏ, nó cũng có thể nhanh hơn. – rici
@rici: Tôi không biết làm thế nào 'make_heap' được thực hiện, nhưng nó là _possible_ rằng nó có thể siêu nhanh đối với những thứ đã là một đống trừ một phần tử. Đó là _possible_ nó thậm chí còn tối ưu cho tình huống đó. Phụ thuộc vào việc thực hiện mặc dù. Và tôi hoàn toàn suy đoán, nó có thể là việc thực hiện make_heap là nhiều hơn hoặc ít hơn cần thiết để được cùng một thời gian chạy không có vấn đề bố trí ban đầu. –
Tuy nhiên nó được thực hiện, nó cần phải kiểm tra mọi yếu tố để biết rằng những gì bạn cung cấp cho nó đã là một đống trừ một yếu tố. Đó là O (N). Pop và push là O (log N) với một hệ số không đổi lớn hơn một chút (có lẽ không quá hai hoặc ba), vì vậy đối với một đống lớn, 'make_heap' sẽ không mở rộng. – rici