SortedSet千万不要使用Min()/Max()扩展方法来获取最值

C#中的集合扩展方法为编码提供了便利,但是本身没有对集合本身的数据结构做任何优化,都是很鲁棒的算法。所以使用时候要特别小心。

 

最近有交易员运用SortedSet来维护一个动态的数值集合,目的是用$T(n)=O(\log n)$的时间来实现增删查改。但是运行下来发现效率比用普通数组还要慢。最后发现是他使用了Max()/Min()来获取最值。注意:

 

1、Min/Max是SortedSet的内置属性,使用内部二叉树来检索。时间复杂度为$T(n)=O(\log n)$

2、Min()/Max()是所有Collection的扩展方法,用遍历的方式。时间复杂度为$T(n)=O(n)$

 

只差一个括号,性能相去甚远!

 

posted on 2016-11-21 12:10  米老虎M  阅读(255)  评论(0)    收藏  举报

导航