数据结构类似于字典,但有范围?

5 c# range data-structures

给定一棵二叉树,它的每个节点都包含一个具有范围的项目,例如,一个特定的节点可能包含一个范围 ( 1 to 1.23456 ]

如果查询元素小于或大于所描述的范围,它会检查相应的子元素。例如,它是1.3

如下,我们将查看右侧的分支,执行 2 个“if”检查以查看它是否适合元素的范围。

尽管平衡二叉搜索树 (BST) 是一种快速遍历数据集的优雅方式,但如果孩子越来越多,“if”检查的数量就会显着增加。当每秒必须执行数百万次时,它就变得更加成问题。

有没有一种优雅的存储对象的方法,这样给定一个具有值的元素(例如 1.3),它的值可以简单地输入到字典中?这将快速检索该值适合其范围的适当元素,如果不适合则为 null。

但是,字典不会检查范围,而是需要一个值。因此,如果提供的键适合项目的范围,是否有可以提供项目的数据结构?

这里有一个人有类似的问题,但他发现内存被浪费了。他被建议采用 BST 方法,但这是唯一的解决方案吗?

抱歉,如果有明显的答案,我可能会错过。

Ert*_*maa 5

你问的是区间树吗?区间树允许您在时间x..y范围内获取区间上的所有元素O(logn)。对于 C# 实现,我使用了名为IntervalTreeLib 的库,它运行良好。

在计算机科学中,区间树是用于保存区间的有序树数据结构。具体来说,它允许人们有效地找到与任何给定区间或点重叠的所有区间。它通常用于窗口查询,例如,在矩形视口内的计算机地图上查找所有道路,或在 3D 场景中查找所有可见元素。类似的数据结构是段树。