C#.NET是否具有满足以下属性的任何数据结构?

时间:2017-01-28 18:42:51

标签: c# .net algorithm data-structures

我试图解决问题,并且我意识到我的解决方案的复杂性高于预期,因为Insert的{​​{1}}是O(n)(来源: https://msdn.microsoft.com/en-us/library/sey5k5z4(v=vs.110).aspx)。

我想要的是像

这样的数据结构
  • 顺序容器
  • 具有二进制搜索方法,当元素按顺序运行时
  • 在索引处插入优于O(n)
  • O(1)获取容器中元素的数量
  • O(1)按索引查找

换句话说,除了更快的插入,我想要List<T>之类的东西。

2 个答案:

答案 0 :(得分:0)

是否可能最终在列表中出现重复项,或者您能否保证您不会两次看到相同的值?您是否需要指定索引,或者您是否期望根据项目的值对事物进行排序?

如果您知道不会重复,或者您不希望在存在重复时将值存储两次,并且您的索引完全基于将项目放在正确的位置值,您可以查看SortedSet<T>类型。

如果可能存在重复项,但您想手动指定该值,则可以查看SortedDictionary<TKey, TValue>,其中TKey值是整数索引。

如果您无法满足其中任何一个条件,那么您将无法实施自己的类型。好消息是你不必从头开始。 LinkedList<T>类型可以帮助您完成大部分工作。

答案 1 :(得分:0)

它并非完全内置,但您可以尝试一下。 Wintellect power collection有BigList<T>可以完成这项工作。

https://powercollections.codeplex.com/

List<T>相比,它在特定索引处的插入速度更快。我不能告诉你它的确切运作方式,但是它会对元素产生一些偏移,所以就记忆而言,它会更加苛刻。

你也可以找到它作为金块包。

**编辑:**由于@Ryan纠正了我,它有O(log n)索引访问权限。