C#SortedSet缺少索引检索O(log [n])

时间:2018-11-07 15:42:52

标签: c# .net data-structures collections

我正在尝试解决HackerRank中的挑战,而解决方案要求:

  • O(log [n])项插入。

  • 通过索引
  • O(log [n])检索项目。

令我惊讶的是,我意识到没有支持这两种操作的数据结构。

最初,我相信SortedList可以满足所有要求,但不能!

  

SortedDictionary对于未排序的数据, O(log n)具有更快的插入和删除操作,而对SortedList的 O(n)具有更快的插入和删除操作。

阅读此行提示SortedDictionary可能满足我的需求,但答案是否定的!再次

  

SortedDictionary和SortedList类之间的另一个区别是SortedList支持通过Keys and Values属性返回的集合对键和值进行有效的索引检索。访问属性时不必重新生成列表,因为列表只是键和值的内部数组的包装。以下代码显示了Values属性用于从排序的字符串列表中检索值的索引。

他们建议使用 ToList()扩展名和列表中的 BinarySearch(),但使用此 ToList()来完全检索键的集合。 >调用已经使性能达到O(n),因此没有必要调用 BinarySearch()

另一方面,索引检索 O(log [n])的一种非常流行的实现方式是,在树的每个节点上添加一个字段Count,以跟踪许多项目都位于以该节点为根的子树中。可以在O(1)中的红黑树旋转期间更新此字段,并且每个节点仅消耗 sizeof(int)个额外的内存。

问题:

  

为什么从一开始就没有这样实现?

     

将其包含在SortedSet数据结构中有什么弊端?

0 个答案:

没有答案