【发布时间】:2011-04-17 13:22:40
【问题描述】:
如果给定一组数字(为方便起见,我将其存储在平衡二叉搜索树中),那么我想回答一个查询,该查询要求我告知 [A,B] 之间的第 i 个最小数字是多少,执行该任务的快速算法是什么?
从技术上讲,我可以从根遍历树搜索 A(或者如果 A 不存在,则立即大于该数字),而不是回溯搜索 B(或小于 B 的数字),同时我可以保持i 的计数器,以确定我何时会在第 i 号。但这对我来说似乎不是最优的。
我可以对用于存储通用数字集的树的高度 O(log n) 执行此操作吗?
谢谢
【问题讨论】:
-
我想我在这里弄错了,但是您不能只搜索立即大于 A 的值,然后遍历
i-1 次吗?它是一个二叉搜索树,所以它是排序的,不是吗?我想象你的树是这样的:en.wikipedia.org/wiki/File:AVLtreef.svg - 在这个例子中,f.e.在 [15,60] 中搜索第 4 个最小的数会导致结果 50,对吗? -
@schnaader 我猜,他想在大小为 100000 的树中搜索第 50000 个数字 :) 但如果 k 很小,你的方式肯定是最佳的。跨度>
-
@Nikita:感谢您的澄清。
-
@schanaader 没错。我的算法必须适用于大型数据集,例如,我可以有 100k 个随机数,然后给我一个范围,可以是 [10, 250],然后我会被要求找到我的第 27 个最小数字数据集(存储在 AVL 树中),并且也在给定的区间内
标签: algorithm optimization search binary-tree big-o