对数时间C#列表

时间:2011-10-08 12:49:42

标签: c# data-structures

是否存在列表集合的.NET实现,以便插入和查找都是最坏情况的O(log(n))操作?默认的System.Collections.Generic.List'Insert'方法是O(n)操作。

通过列表集合,我的意思是类似数组的可扩展数据结构。 “查找”是指按索引访问。

我怀疑这可以通过平衡树来完成,但实现起来并非易事。

4 个答案:

答案 0 :(得分:4)

我不知道.NET实现,但可能适合您的数据结构是Indexible Skiplist。它具有与平衡二叉树类似的O(lg n)性能,但在概念上更像是一个链表。

http://en.wikipedia.org/wiki/Skip_list

我认为用C#写一个不太难。

答案 1 :(得分:1)

C5 TreeSet应该为您提供具有这些特征的红色/黑色实现,包括索引访问。

答案 2 :(得分:0)

不知道.net框架中是否存在,但是你可以实现aa tree插入和搜索都是O(log n)。

答案 3 :(得分:-1)

如果您需要使用索引访问字段,则无法解决此问题。你可以使用SortedList,但是你得到O(n),或者你可以使用SortedDictionary,但是你会丢失类似数组的访问(通过索引)。