【发布时间】:2018-01-25 20:52:54
【问题描述】:
我最近一直在学习基数排序,我使用的资源之一是维基百科页面。目前关于算法的效率有以下段落:
基数排序相对于其他排序效率的话题 算法有些棘手,并且受制于很多 误解。基数排序是否同样有效,更少 比最好的基于比较的算法更有效或更有效 取决于所做假设的细节。基数排序复杂度 对于 n 个字长为 w 的整数的键是 O(wn)。有时 w 是 表示为常数,这将使基数排序更好(对于 n) 比最好的基于比较的排序足够大 算法,它们都执行 O(n log n) 比较来对 n 个键进行排序。 然而,通常 w 不能被认为是一个常数:如果所有 n 密钥是不同的,那么 w 必须至少为 log n 才能进行随机访问 机器能够将它们存储在内存中,这充其量是一个时间 复杂度 O(n log n)。 这似乎最多只能进行基数排序 与最好的基于比较的排序一样有效(如果 密钥比 log n 长得多)。
很遗憾,粗体部分变成了我无法通过的部分。我知道一般基数排序是 O(wn),并且通过其他来源已经看到如何实现 O(n),但不能完全理解为什么 n 个不同的键需要 O(n log n) 时间来随机存储 -访问机。我相当肯定它归结为一些简单的数学,但不幸的是,我仍然无法掌握扎实的理解。
我最接近的尝试如下:
给定一个基数“B”和该基数中的一个数字“N”,“N”可以有的最大位数是:
(logB of N) + 1.
如果给定列表中的每个数字 L 都是唯一的,那么我们有:
L *((logB of N) + 1) 个可能性
在这一点上我不确定如何进步。
是否有人能够以粗体扩展上述部分并分解为什么 n 个不同的键需要至少 log n 才能进行随机访问存储?
【问题讨论】:
标签: sorting big-o radix-sort