2017-01-28 55 views

回答

3

很不幸,你是对的。 SortedSet不提供获取中位数的内置方式。这是因为SortedSet的底层数据结构是红黑树。 (例如,参见维基百科上的Red-black tree

您是否可以使用其他类型的集合或它是否必须是SortedSet?否则,我建议将其转换为列表或数组,并通过访问索引length+1/2处的奇数值length或元素length/2length/2 - 1的平均值来获得O(1)时间的中位数。

+0

很好的答案。另外,我相信可以修改红黑树来跟踪每个节点的总项目数,并且如果已知该计数,那么通过O(log(n))中的索引访问元素的信息就足够了, ) 时间。 'SortedSet'不这样做,但是一个自定义的实现可能非常适合OP。 – hvd

相关问题