正在查找可访问上一个和下一个元素的.Net排序集合



我正在实现Bentley-Ottman算法,该算法要求扫描线(SL)具有以下属性的数据结构:

  • 维护T的排序集合,其中TIComparable<T>
  • 元素的插入应该是O(log count)并且应该返回元素是否已经插入
  • 元素的删除应该是CCD_ 5
  • 对于给定的元素e(无论是否已经在集合中),我需要按排序顺序排列在e旁边的集合的上一个和下一个元素

SortedList<TKey, TValue>在插入和删除时有一个O(count),因为它必须移动列表中的所有连续元素。然而,一旦我知道了e的索引,我就可以对它进行索引,从而获得O(1)中的前一个和下一个元素。

SortedDictionary<TKey, TValue>SortedSet<T>O(log count)插入和删除,但我找不到任何迭代器来提供下一个和上一个元素。

是否有任何实现可以为我提供完整的功能?

如果没有,实现它的最快方法是什么?LinkedList<T>不允许二进制搜索。CCD_ 16仍然具有CCD_ 17插入/删除。我真的必须实现我自己的平衡树吗?

例如,c5集合库的TreeDictionary以及nuget和github具有

如果存在是k的前身,在这种情况下,前身与res有约束力;否则返回false,并将KeyValuePair的默认值绑定到resk的前身是排序字典中具有最大关键字的条目根据密钥比较器,严格小于k。抛出NoSuchItemException如果k不具有前置条目;即没有密钥小于k。

bool TrySSuccessor(K K,out KeyValuePair res)如果存在是k的继承人,在这种情况下,继承人对res具有约束力;否则返回false,并将KeyValuePair的默认值绑定到res.继承者of k是排序字典中具有严格大于k。如果k没有抛出NoSuchItemException有继任者;也就是说,字典中没有任何条目的关键字大于

并且应该拥有几乎所有您需要的东西。

最新更新