在线性时间内查找堆中小于 k 的所有数字
Finding all numbers in a heap which is smaller then k in linear time
给定一个堆,堆中的某个数 k,如何在 O(r) 中找到比 k 小的 r 个数?
有人给了我一个我不明白的算法:
在堆上进行预购,当值小于 k(和 != null)时打印它们。据说这需要 O(3r+1)=O(r) 检查。
有人可以向我解释解决方案吗?谢谢!
您需要访问堆上的唯一数字是小于 k 的数字及其立即数 children。一旦你看到一个太大的 child,你就知道你不需要看它的 children。堆中的每个数字最多有两个 children,因此这对您访问的不需要的数字设置了大约 2r 的限制(显然 r=0 是一种特殊情况)。
给定一个堆,堆中的某个数 k,如何在 O(r) 中找到比 k 小的 r 个数?
有人给了我一个我不明白的算法: 在堆上进行预购,当值小于 k(和 != null)时打印它们。据说这需要 O(3r+1)=O(r) 检查。
有人可以向我解释解决方案吗?谢谢!
您需要访问堆上的唯一数字是小于 k 的数字及其立即数 children。一旦你看到一个太大的 child,你就知道你不需要看它的 children。堆中的每个数字最多有两个 children,因此这对您访问的不需要的数字设置了大约 2r 的限制(显然 r=0 是一种特殊情况)。