【发布时间】:2012-06-19 13:43:16
【问题描述】:
有人知道std::nth_element 的不同实现的预期运行时间和最坏情况下的运行时间吗?我几乎每天都使用这个算法。
我对最近的 Microsoft 编译器附带的 STL 版本特别感兴趣,但有关此主题的任何信息都会有所帮助。
Please note that this is not a duplicate of this question.我了解存在哪些算法,但我对哪些实现使用哪些算法感兴趣。
作为背景,有众所周知的算法可以做到这一点。一种是 O(n) 平均情况和 O(n log n) 最坏情况,一种是 O(n) 最坏情况但在实践中很慢(中位数的中位数)。 另请注意there is talk of interesting implementation strategies to get worst-case O(n) running times that are fast in practice。标准规定这必须是更糟糕的 O(n) 平均时间。
【问题讨论】:
-
标准规定复杂性:平均线性。您是否查看了实现的标题?这可以是一个开始。
-
好点,我在此基础上澄清问题。
-
一个相关的bug,你可能会了解VS中的优化。
-
哦,是的,我见过一些低于一定长度的实现,只需对数组进行排序,因为它足够快。在我看来,这是一个边界情况,并不违反 O(n) 平均情况,因为 O(n) 复杂度的定义必然只对大 n 有意义。
-
@dirkgently 换句话说,这根本不是错误。
标签: c++ algorithm stl nth-element