微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

introselect 的最坏时间复杂度是如何变成 O(n) 的?

如何解决introselect 的最坏时间复杂度是如何变成 O(n) 的?

维基百科 introselect 说最坏的时间复杂度是 O(n)

但是,请参阅此答案,https://stackoverflow.com/a/29146718/7721525,introselect 的某些实现运行 2lg(n)partition_pivot,其最坏时间复杂度为 O(nlg(n))。不管你用的是堆排序的medians_of_medians算法,时间复杂度都已经是O(nlg(n))了。

如何实现最坏的时间O(n) introselect? 如果我们使用常量 k 而不是 2lg(n)。我们可以说时间是O(n)吗?你能给我一些 k(必须是常数)的实用选择吗?

解决方法

但是,请参考 [原文如此] 这个答案,https://stackoverflow.com/a/29146718/7721525,introselect 的一些实现运行 2lg(n) partition_pivot

正如那里的评论中提到的,该实现被命名为 introselect,但它实际上并没有实现 introselect algorithm

如何实现最坏的时间O(n) introselect?

您使用恒定数量的分区执行快速选择,或者要求分区高度不平衡至多恒定次数,如果不在这些限制内完成,则切换到 median of medians 算法。>

请注意,还有 A. Alexandrescu 最近的 QuickSelectAdaptive algorithm 详细介绍了如何实现确定性线性时间选择。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。