【问题标题】:Best DataStructure for HighPerformance Seek in c#c#中高性能搜索的最佳数据结构
【发布时间】:2012-01-13 01:17:50
【问题描述】:

我想知道哪种数据结构可以为我的场景提供更好的性能...... 我的要求是: 可能有几百万条记录的巨大数据集,我只写一次,在执行期间我不会再更改它,我不需要它以排序方式存储.... 我正在考虑使用 List 但如果我使用 Linq 查询并且在 where 条件调用 InRange 性能非常糟糕......如果我做一个 foreach,性能不是那么好......我很确定有最好的方法(我正在考虑使用结构和/或实现 IEquatable 但性能没有提高...... 女巫是 C# 中用于在我的范围内以最佳性能进行查询的最快数据结构吗? 我想要的是一个存储数百万个 Rnage 类实例的数据结构

class Range
{
    public int Low {get; set;}
    public int High {get; set;}    
    public bool InRange(int val) { return val >= Low && val <= High; }
}

List 是一个逻辑示例,但我担心 List 类没有针对我的要求进行优化...因为它是排序的,我不需要排序,它对性能有很大影响...

感谢您的帮助!

【问题讨论】:

  • 您到底想达到什么目的?数据集中存储了什么样的数据?你对数据集做了什么样的操作?另外我不太明白你的 Range 类与这个问题有什么关系,也许你可以解释一下你的代码更多。
  • 你应该改写你的问题,你要做什么不是很清楚。据我了解,您有一个 Range 对象的集合,并且您想找到 InRange 返回 true 的对象,对吗?
  • 是的,Thomas 你是对的......我想使用 List 来存储数百万个 Ranges,但是在表演方面,它的表现非常糟糕......所以我需要一个存储我的类(或最终在结构中更改它)更适合我的要求的其他方式:
  • 数据类型有什么特别之处可以帮助优化算法吗?例如,如果是年龄范围,知道数字在 0 到 130 之间会有所帮助。
  • 不幸的是我想不出什么来优化它......

标签: c# list generics search data-structures


【解决方案1】:

我想你可能想要一个区间树。 Stackoverflow 用户 alan2here 最近向几个questions 询问了他正在从事的项目; Eric Lippert 将他指向one of them 中的区间树结构。

【讨论】:

    猜你喜欢
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 2013-06-21
    • 2013-06-22
    • 1970-01-01
    • 2013-04-21
    相关资源
    最近更新 更多