Việc đặt tên phương thức có thể có chủ ý trong một số sách giáo khoa (ví dụ CLRS ) vì:
- Logic cho "thả xuống" hoặc "sủi bọt" một khóa trong một đống nhị phân rất đơn giản nếu bạn biết bạn đang đi theo hướng nào (lên / xuống). Ví dụ: "sủi bọt" một phím chỉ đơn giản là một cuộc gọi đệ quy trên nút cha mẹ, so với thả xuống nơi bạn cần so sánh với từng đứa trẻ , trước khi tiến hành đệ quy.
- Nhiều thuật toán sử dụng heap tối đa / phút yêu cầu bạn chỉ tăng hoặc giảm các khóa, do đó, nó đủ để cung cấp phương thức "thả xuống" hoặc "nổi bọt" tương ứng.
Lưu ý rằng nếu bạn muốn thực hiện một phương pháp "set key" chung, bạn có thể chỉ cần kết hợp hai thói quen này để quyết định hướng đi nào dựa trên việc bạn có cần phải bong bóng lên hay thả xuống phím.
Để thêm vào những gì Hendrick đã nói, đáng chú ý là ngay cả đối với các thuật toán của Dijkstra hay Prim, trong đó về mặt kỹ thuật, thao tác khóa giảm là đủ, sử dụng một đống nhị phân không nhất thiết phải theo dõi vị trí của từng khóa.
Trong các thuật toán này, một khóa đã cho chỉ được trích xuất từ heap một lần . Ví dụ, trong Dijkstra một nút đồ thị chỉ thêm một lần để cây đường đi ngắn nhất, và trong Thuật toán Prim, một cạnh có thể chỉ được thêm một lần để các cây bao trùm nhỏ nhất.
Do đó, thay vì theo dõi các vị trí chủ chốt (hoặc tìm kiếm chúng khi nhu cầu thuật toán để giảm chúng), trên có thể chỉ đơn giản là chèn các mới (trong trường hợp này giảm ) giá trị cho khóa trong đống (dẫn đến các bản sao trong đống) và sau đó, khi bạn trích xuất "khóa" từ heap (dữ liệu vệ tinh về mặt kỹ thuật vì khóa không phải là thứ bạn đang tiêu thụ một cách tham lam), bạn có thể bỏ qua tất cả các lần trích xuất tiếp theo của nó (ví dụ: sử dụng một bộ vớiÔ ( 1 )).
Các bản sao chính và tập hợp như vậy trong heap rõ ràng sẽ khiến bạn phải trả giá Ô ( n )trong độ phức tạp không gian, nhưng bạn có thể nghĩ về giải pháp kết hợp như một phương pháp "khóa giảm" không đòi hỏi kiến thức hoặc theo dõi các vị trí trong heap.