假设我们有有限的数据集{x_i, y_i}
。
我正在寻找一个有效的数据集数据结构,以便给定a
,b
,可以有效地找到x
,y
这样x > a
,y > b
和x*y
是最小的。
可以用红黑树完成吗?
我们可以用复杂度O(log n)来做吗?
答案 0 :(得分:0)
好吧,没有预处理步骤,当然你不能在O(log n)
中使用任何数据结构,因为没有足够的时间来查看所有数据。所以我假设你的意思是“经过预处理”。
红黑树用于单维排序,因此在这里不太可能有太多帮助。我希望kD树在这里运行良好,使用最近邻居式查询:您执行树的深度优先遍历,跳过其边界矩形违反x和y条件或不能包含较低产品的分支比已经找到的最低允许产品。为了进一步加快速度,kD树中的每个节点还可以在其任何后代中保持最低的产品;直观地说,我希望能够获得实际的好处,但不能改善最坏情况下的时间复杂度。
顺便提一下,红黑树通常不适用于预处理数据。它们专为高效的动态更新而设计,当然,您不会在每个查询的基础上进行更新。它们提供与其他排序树相同的渐近深度保证,但具有更高的常数因子。