草庐IT

GetViewBetween

全部标签

c# - 为什么 SortedSet<T>.GetViewBetween 不是 O(log N)?

在.NET4.0+中,类SortedSet有一个方法叫做GetViewBetween(l,r),它返回树部分的接口(interface)View,其中包含两个指定值之间的所有值。鉴于SortedSet实现为红黑树,我自然期望它运行在O(logN)时间。C++中类似的方法是std::set::lower_bound/upper_bound,在Java中是TreeSet.headSet/tailSet,它们是对数的。然而,事实并非如此。以下代码在32秒内运行,而等效的O(logN)GetViewBetween的版本将使此代码在1-2秒内运行。vars=newSortedSet();intn

c# - 为什么 SortedSet<T>.GetViewBetween 不是 O(log N)?

在.NET4.0+中,类SortedSet有一个方法叫做GetViewBetween(l,r),它返回树部分的接口(interface)View,其中包含两个指定值之间的所有值。鉴于SortedSet实现为红黑树,我自然期望它运行在O(logN)时间。C++中类似的方法是std::set::lower_bound/upper_bound,在Java中是TreeSet.headSet/tailSet,它们是对数的。然而,事实并非如此。以下代码在32秒内运行,而等效的O(logN)GetViewBetween的版本将使此代码在1-2秒内运行。vars=newSortedSet();intn