一尘不染

如何从二进制堆中删除元素?

algorithm

据我了解,binary heap不支持删除随机元素。如果我需要从中删除随机元素binary heap怎么办?

显然,我可以删除一个元素,然后在中重新排列整个堆O(N)。我可以做得更好吗?


阅读 263

收藏
2020-07-28

共1个答案

一尘不染

是的,没有。

问题是 二进制堆不支持搜索 任意元素。找到它本身O(n)

但是,如果您有一个指向该元素的指针(不仅是其值),则 可以将元素与最右边叶子交换,删除该叶子,然后重新
堆相关的子堆(通过筛选新放置的元素)根据需要)。这将导致O(logn)删除,但需要一个指向要查找的实际元素的指针。

2020-07-28