寻找.Net排序的集合,可以访问上一个和下一个元素

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

  • 维护的分类收集T,这里TIComparable<T>
  • 元素的插入应为O(log count),并且应返回元素是否已插入,
  • 元件的缺失应O(log count)
  • 对于给定的元素e(无论是否已经在集合中),我需要e按排序顺序在集合旁边的上一个和下一个元素

SortedList<TKey, TValue>O(count)在插入和删除处有一个at,因为它必须移动列表中的所有连续元素。但是,O(1)一旦知道的索引,便可以为其编制索引,并因此获得上一个和下一个元素e

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

有没有可以给我全部功能的实现方式?

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

Xanatos

例如,TreeDictionary中的C5收集库的NuGetgithub上有一个

如果存在k的前置变量,则bool TryPredecessor(K k,out of KeyValuePair res)返回true,在这种情况下,将前任绑定到res;否则返回false并将KeyValuePair的默认值绑定到res。根据密钥比较器,k的前身是排序字典中的最大密钥严格小于k的条目。如果k没有前置项,则抛出NoSuchItemException;否则,抛出NoSuchItemException。即,任何密钥都不小于k。

和一个

如果存在k的后继,则bool TrySuccessor(K k,out of KeyValuePair res)返回true,在这种情况下,将后继绑定到res;否则返回false并将KeyValuePair的默认值绑定到res。k的后继项是排序字典中的条目,根据密钥比较器,其最小密钥严格大于k。如果k没有后继,则抛出NoSuchItemException;否则,抛出NoSuchItemException。也就是说,词典中的任何条目都不具有大于k的键。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

寻找.Net排序的集合,可以访问上一个和下一个元素

来自分类Dev

寻找下一个可被4整除的元素

来自分类Dev

寻找针对寻找下一个最接近元素而优化的数据结构

来自分类Dev

寻找一个可以

来自分类Dev

寻找下一个最小的回文,无限循环

来自分类Dev

寻找下一个值变化的算法

来自分类Dev

在集合中寻找一个值

来自分类Dev

寻找下一个斐波那契数

来自分类Dev

使用DAX寻找下一个工作日

来自分类Dev

使用DAX寻找下一个工作日

来自分类Dev

从今天起寻找下一个30天

来自分类Dev

寻找一个特定的数字并将其排序

来自分类Dev

MySQL寻找一个不错的索引

来自分类Dev

寻找一个可逆的子矩阵

来自分类Dev

寻找一个jQuery Radio Carousel

来自分类Dev

寻找一个CSS属性

来自分类Dev

寻找一个Windows窗体控件

来自分类Dev

如何在angularjs ng-repeat中访问上一个和下一个项目

来自分类Dev

有效地寻找下一个星期五第十三届

来自分类Dev

寻找一个提供随机和“顺序”访问的数据结构

来自分类Dev

寻找一个兄弟是否唯一的节点

来自分类Dev

我可以编写一个Twig Extension来访问循环中的上一个和下一个元素

来自分类Dev

寻找一对独特的对

来自分类Dev

获取有序集合中的上一个和下一个元素

来自分类Dev

寻找深度最小的元素

来自分类Dev

寻找深度最小的元素

来自分类Dev

寻找一个解析器的smali文件

来自分类Dev

寻找一个.fil转换器

来自分类Dev

寻找一个虚拟的“理货柜台”