Algorithm 基数排序时间
我正在准备本周的一个考试,我遇到了一个复习题,问 范围为0的两千万个正整数。999999999将按LSD基数排序。比较使用基数0的性能。9999和基数0。9展示你的 工作 我知道基数排序的时间是θ(d(k+n));其中d=位数k=基数大小,n=记录数 我知道小数基数是θ(8(10+20000000)),对吗Algorithm 基数排序时间,algorithm,performance,sorting,radix-sort,Algorithm,Performance,Sorting,Radix Sort,我正在准备本周的一个考试,我遇到了一个复习题,问 范围为0的两千万个正整数。999999999将按LSD基数排序。比较使用基数0的性能。9999和基数0。9展示你的 工作 我知道基数排序的时间是θ(d(k+n));其中d=位数k=基数大小,n=记录数 我知道小数基数是θ(8(10+20000000)),对吗 千根是什么?θ(3(1000+20000000))?运行时是O(d(n+k))是对的。这可能有助于明确地计算出d和k之间的关系。如果你处理的是从0到U的数字,那么每个数字中的基数k位数将是Θ
千根是什么?θ(3(1000+20000000))?运行时是O(d(n+k))是对的。这可能有助于明确地计算出d和k之间的关系。如果你处理的是从0到U的数字,那么每个数字中的基数k位数将是Θ(logk U)=Θ(logu/logk)。这意味着运行时更适合O(logu(n+k)/logk) 在您的例子中,k与n相比非常小,因此此运行时将具有for O(n log U/log k) 您声称运行时为Θ(8(10+20000000))和Θ(3(1000+20000000))有点奇怪。记住,Θ表示法谈论的是长期增长率,而不是单个值,因此以这种方式插入值是没有意义的。然而,你的基本论点是正确的。从基数10到基数10000在基数的数量级上增加了3倍,因此,如果基数较大,则该算法的速度应该大约快三倍
也就是说,还有很多其他因素可能会在实践中打乱这个时机。引用的局部性在执行大量数组操作的算法的运行时起着很大的作用,随着bucket数量的增加,局部性会逐渐变差。这实际上可能会使较大的基本排序比较小的基本排序慢,因为即使轮数较少,但由于缓存效应,每轮所需的时间更长。如果没有尝试过这一点,我敢打赌,在实践中很有可能会发生这种情况。数数你的数字,它不是千基数。那么它应该是θ(2(10000+20000000))?那个基数叫什么?米里亚斯,如果你想吹嘘一点希腊语。或者一万个,如果你想被理解的话。所以我可以说,使用一万个基数大约是使用十进制基数的4倍?看起来是这样(对于足够大的数据样本)。但是,由于实现细节、缓存局部性。。。