给定一个二叉树,它的每个节点都包含一个带范围的项,例如,一个,特定节点可能包含( 1 to 1.23456 ]
如果查询元素小于或大于描述的范围,它将检查相应的子项。例如,它是1.3
如下所示,我们将查看正确的分支,执行2“if”检查以查看它是否适合元素的范围。
尽管平衡二进制搜索树(BST)是一种快速遍历数据集的优雅方式,但如果有越来越多的孩子,“if”检查的数量会显着增加。当它必须每秒进行数百万次时,它变得更加成问题。
是否存在一种优雅的存储对象的方式,例如给定一个具有值(例如1.3)的元素,它的值可以简单地输入到字典中?这将很快检索到该值适合其范围的正确元素,如果它不适合,则返回null。
但是,字典不会检查范围,而是需要单个值。因此,是否有一个数据结构可以提供项目,如果提供的密钥适合项目的范围?
Here一个人有类似的问题,但他发现内存被浪费了。他被建议采用BST方法,但它是唯一的解决方案吗?
很抱歉,如果有明确的答案,我可能会错过它。
答案 0 :(得分:3)
您在询问interval trees吗?间隔树允许您在x..y
时间内获得O(logn)
区间内的所有元素。对于C#实现,我使用了名为IntervalTreeLib的库,它运行良好。
在计算机科学中,区间树是有序树数据 保持间隔的结构。具体来说,它允许一个人 有效地找到与任何给定间隔重叠的所有间隔或 点。它通常用于窗口查询,例如,查找 在矩形视口内的计算机化地图上的所有道路,或者 找到三维场景中的所有可见元素。一个相似的 数据结构是分段树。