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

时间:2014-10-19 19:05:24

标签: c# data-structures range

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

的范围

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

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

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

是否存在一种优雅的存储对象的方式,例如给定一个具有值(例如1.3)的元素,它的值可以简单地输入到字典中?这将很快检索到该值适合其范围的正确元素,如果它不适合,则返回null。

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

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

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

1 个答案:

答案 0 :(得分:3)

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

  

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