C#:是否有适合快速范围相关搜索的集合?
C# : is there an appropriate collection for fast range-related search?
我有这样的数据:
Time(seconds from start)
Value
15
2
16
4
19
2
25
9
有很多条目(10000+),我需要一种方法来找到任何时间范围的足够快的总和,比如范围 16-25 秒的总和(即 4+2+9=15 ).此数据将动态更改多次(始终在列表底部添加新条目)。
我正在考虑使用排序列表 + 二进制搜索来确定位置并仅对值求和,但是计算它可能会花费太多时间。有没有更合适的方法呢? Nuget 数据包或算法参考将不胜感激。
只计算累计和:
Time Value CumulativeSum
15 2 2
16 4 6
19 2 8
25 9 17
然后对于范围 [16,25] 将是对 16 和 25 的左边界进行二进制搜索的任务成 17 - 2 = 15
复杂度:O(log(n)),其中 n - 列表的大小。
lower/upper 绑定的二进制搜索实现可以在我的 repo 中找到 - https://github.com/eocron/Algorithm/blob/master/Algorithm/Sorted/BinarySearchExtensions.cs
我有这样的数据:
Time(seconds from start) | Value |
---|---|
15 | 2 |
16 | 4 |
19 | 2 |
25 | 9 |
有很多条目(10000+),我需要一种方法来找到任何时间范围的足够快的总和,比如范围 16-25 秒的总和(即 4+2+9=15 ).此数据将动态更改多次(始终在列表底部添加新条目)。
我正在考虑使用排序列表 + 二进制搜索来确定位置并仅对值求和,但是计算它可能会花费太多时间。有没有更合适的方法呢? Nuget 数据包或算法参考将不胜感激。
只计算累计和:
Time Value CumulativeSum
15 2 2
16 4 6
19 2 8
25 9 17
然后对于范围 [16,25] 将是对 16 和 25 的左边界进行二进制搜索的任务成 17 - 2 = 15
复杂度:O(log(n)),其中 n - 列表的大小。
lower/upper 绑定的二进制搜索实现可以在我的 repo 中找到 - https://github.com/eocron/Algorithm/blob/master/Algorithm/Sorted/BinarySearchExtensions.cs