如何解决平滑排序算法在哪里使用?
在我的大学学习算法时,我遇到了称为Smoothsort的算法。这是一个很棒的算法,因为它是自适应算法,时间复杂度可以从线性复杂度到线性运算而变化,它也是就地算法。但是,该算法的资源非常稀缺,可用资源很难理解。但是,我发布此问题的原因是要了解用例,何时使用以及何时不使用?
这就是我想知道的一切,非常感谢您回答或复查此问题。
解决方法
musl libc使用Smoothsort来实现qsort()。 This Stack Overflow answer from the library author描述了这种推理:最坏的情况是O(n log n)(与Quicksort不同),就地(与mergesort不同)和自适应(与heapsort不同)。我认为Smoothsort对于以下产品的某种组合并没有太多使用
-
Smoothsort不稳定,并且在实践中通常比就地更需要稳定性,因为它意味着完全确定存在相同键的排序顺序。 musl具有C标准所允许的不稳定稳定性,并且设计目标之一是除非明确要求,否则不分配内存(例如,这就是musl
strstr()
不使用KMP的原因。请注意,存在就地,稳定的O(n log n)时间排序算法,但是常数因子太大而无法实用。
-
适应性更佳,而Smoothsort比堆排序更复杂。
-
由于几乎所有本科算法课程(甚至包括研究生课程,例如我在学校都没有看到它)的遗漏,Smoothsort并不广为人知。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。