簡體   English   中英

尋找.Net排序的集合,可以訪問上一個和下一個元素

[英]Looking for .Net sorted collection with access to previous and next elements

我正在實現Bentley-Ottman算法 ,該算法要求掃描線(SL)具有以下屬性的數據結構:

  • 維護T的排序集合,其中TIComparable<T>
  • 元素的插入應為O(log count) ,並應返回元素是否已插入,
  • 刪除元素應為O(log count)
  • 對於給定的元素e (無論是否已經在集合中),我需要按排序順序在e旁邊的集合的上一個和下一個元素。

SortedList<TKey, TValue>在插入和刪除時具有O(count) ,因為它必須移動列表中的所有連續元素。 但是,我可以索引它,因此一旦知道e的索引,就可以獲取O(1)的上一個和下一個元素。

SortedDictionary<TKey, TValue>SortedSet<T>具有O(log count)插入和刪除,但是我找不到任何迭代器可以為我提供下一個和上一個元素。

有沒有可以給我全部功能的實現方式?

如果不是,最快的實現方式是什么? LinkedList<T>不允許二進制搜索。 List<T>仍然具有O(count)插入/刪除。 我真的必須實現自己的平衡樹嗎?

例如, 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的鍵。

並應具備您所需的幾乎所有東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM