【发布时间】:2014-08-19 10:54:39
【问题描述】:
假设我们有有限的数据集{x_i, y_i}。
我正在为数据集寻找一个有效的数据结构,这样给定a,b,就可以有效地找到x,y,这样x > a,y > b和x*y 是最小的。
可以用红黑树做吗?
我们可以在复杂度 O(log n) 中做到吗?
【问题讨论】:
标签: optimization data-structures red-black-tree
假设我们有有限的数据集{x_i, y_i}。
我正在为数据集寻找一个有效的数据结构,这样给定a,b,就可以有效地找到x,y,这样x > a,y > b和x*y 是最小的。
可以用红黑树做吗?
我们可以在复杂度 O(log n) 中做到吗?
【问题讨论】:
标签: optimization data-structures red-black-tree
好吧,如果没有预处理步骤,你当然不能在 O(log n) 中使用任何数据结构进行处理,因为这没有足够的时间查看所有数据。所以我假设你的意思是“预处理后”。
红黑树用于单维排序,因此在这里不太可能有太大帮助。我希望 kD-tree 在这里可以很好地工作,使用最近邻式查询:您执行树的深度优先遍历,跳过边界矩形违反 x 和 y 条件或不能包含较低产品的分支比已经找到的最低允许产品。为了进一步加快速度,kD-tree 中的每个节点还可以保存其任何后代中最低的乘积;直觉上,我希望这会带来实际的好处,但不会提高最坏情况的时间复杂度。
顺便说一下,红黑树通常不适用于预处理数据。它们是为高效的动态更新而设计的,当然您不会在每个查询的基础上进行。它们提供与其他排序树相同的渐近深度保证,但具有更高的常数因子。
【讨论】: