我正在考虑以下问题(我认为这是众所周知的/标准):
验证在二进制最小堆中列出 k 个最小元素是 O(k)。
我正在考虑遍历BFS中的大最小堆,维护一个最小堆而不是一个简单的队列。最初,辅助最小堆包含我的大最小堆的根。在每个步骤中,我提取最小值并添加其所有子项(最多 2 个)。该算法在辅助最小堆上的 k 个提取分钟后停止。辅助最小堆的大小是 O(k)(对于提取的每个最小键,我插入它的孩子,最大 2)。
问题是 extract-min 具有 O(log k) 复杂度,因此该算法具有 O(k log k) 复杂度。我必须在 O(k) 中找到一个。
你有什么我可以使用的想法/论文吗?
谢谢!