我需要实现一个阶梯函数(即分段常数)。它需要有一些要求。
所以我的问题是这类东西最好的数据结构是什么?我在想,由于随机访问性质,二叉树最有可能,但我希望我不会错过任何东西。对于C ++,还有一个很好的实现。
答案 0 :(得分:0)
是的,由于间隔不能重叠,二叉树树是正确的数据结构。如果您不需要快速更新,它可能就像具有间隔端点的排序序列一样简单;例如,可以使用STL二分搜索方法std::lower_bound
或std::upper_bound
之一来查询某个位置处的函数值,使用两次搜索在一个范围内进行评估。但是,对于快速更新,自平衡二叉树自然会更好。
标准库确实定义了一个具有树状访问权限的容器:std::map
(虽然不需要使用二叉树实现,但通常是这样)。
为了完整性,应该提到Boost ICL库有interval_map
,类似std::map
的容器,它使用间隔作为键,聚合重叠插入语义。