据我了解,binary heap不支持删除随机元素。如果我需要从中删除随机元素binary heap怎么办?
binary heap
显然,我可以删除一个元素,然后在中重新排列整个堆O(N)。我可以做得更好吗?
O(N)
是的,没有。
问题是 二进制堆不支持搜索 任意元素。找到它本身O(n)。
O(n)
但是,如果您有一个指向该元素的指针(不仅是其值),则 可以将元素与最右边 的 叶子交换,删除该叶子,然后重新 堆相关的子堆(通过筛选新放置的元素)根据需要)。这将导致O(logn)删除,但需要一个指向要查找的实际元素的指针。
O(logn)