适当的类似列表的排序数据结构

时间:2015-06-15 17:46:41

标签: c# .net list .net-4.5 time-complexity

我正在寻找具有以下属性的类似列表的数据结构:

  1. 通用,即DataStructure<T>,其中T是通用的
  2. 必须允许T被认为相等的IComparable<T>的多个不同实例同时出现在列表中;他们的订单可以是任意的(甚至改变),但他们必须在&#34;较小的&#34;之后。 T以及之前&#34;更大&#34;的实例T
  3. 的实例
  4. O(log(n))插入时间复杂度(或更快)
  5. O(log(n))检索时间复杂度(或更快)
  6. O(1)时间复杂度
  7. 访问第一个/最后一个元素的可能性
  8. 访问具有O(1)时间复杂度的元素的前任/后继者的可能性
  9. 可在不使用其他库的情况下使用
  10. 我不关心删除时间的复杂性,因为元素只需要很少删除。我也不关心空间复杂性。

    我知道没有数据结构可以满足所有属性,但是BCL中的那些(看起来他们可以做我最初需要的东西)似乎有太多的缺点:

    • SortedSet<T>不允许IComparable<T>(2)认为相同的多个实例,并且没有前任/后续函数(6)
    • SortedSet<T, List<T>>(只有一个&#34;代表&#34; T的索引实例)需要相当多的(丑陋的)代码,并且仍然没有前任/后继功能(6 )
    • SortedList<T, T>插入速度太慢(3)
    • SortedDictionary<T, T>不允许IComparable<T>(2)认为相同的多个实例,并且不允许直接访问第一个/最后一个元素(5),也不允许使用前任/后继函数(6)
    • 继承List<T>并保持其排序可能是一种选择,但由于实施工作和可能性能不佳,我宁愿使用内置的东西(7)

    我忽略了什么吗?我的用例似乎没有其他相关的数据结构(我看了herehere等等。还有其他我没有考虑的数据结构吗?

1 个答案:

答案 0 :(得分:0)

如果您愿意放松5和6,那么您可以使用TreeMap