通用步骤函数的最佳数据结构是什么?

时间:2011-08-18 14:04:13

标签: c++ data-structures computational-geometry

我需要实现一个阶梯函数(即分段常数)。它需要有一些要求。

  1. 必须在随机位置重复评估,然后在一段时间内按顺序进行评估。
  2. 必须轻松更新,即在一段时间内增加/减少。
  3. 所以我的问题是这类东西最好的数据结构是什么?我在想,由于随机访问性质,二叉树最有可能,但我希望我不会错过任何东西。对于C ++,还有一个很好的实现。

1 个答案:

答案 0 :(得分:0)

是的,由于间隔不能重叠,二叉树树是正确的数据结构。如果您不需要快速更新,它可能就像具有间隔端点的排序序列一样简单;例如,可以使用STL二分搜索方法std::lower_boundstd::upper_bound之一来查询某个位置处的函数值,使用两次搜索在一个范围内进行评估。但是,对于快速更新,自平衡二叉树自然会更好。

标准库确实定义了一个具有树状访问权限的容器:std::map(虽然不需要使用二叉树实现,但通常是这样)。

为了完整性,应该提到Boost ICL库有interval_map,类似std::map的容器,它使用间隔作为键,聚合重叠插入语义。