当数字的基数等于要排序的数字数时,为什么要使基数排序的运行时间最小化?

当数字的基数等于要排序的数字数时,为什么要使基数排序的运行时间最小化?,第1张

当数字的基数等于要排序的数字数时,为什么要使基数排序的运行时间最小化?

在这里部分回答。第一个问题-256是基数,而32位整数中将有四个8位数字。该文章缺少的内容是,需要对数据进行一次读 *** 作才能创建一个计数矩阵,然后将其转换为索引矩阵(或指针)。在这种情况下,矩阵为[4]
[256]。创建矩阵后,需要进行4次读/写基数排序才能对数据集进行排序。

第二个问题-对于基于数学的解释,(b / r)(n + 2 ^ r)=(b(2 ^ r(r log(2)-1)-n))/ r ^ 2的导数。当导数==
0时出现最小值(或最大值),当2 ^ r(r log(2)-1)-n = 0时出现最小值。对于n == 2 ^ 20(约100万),r〜=
16.606232的结果为O()〜=2212837。一些示例值和O():

 r   O18   233016917   222051416   222822415   230686712   2807125 8   4195328

但是,由于缓存问题,r对n的最佳值变得更小。在我的系统(Intel 2600K,3.4ghz)上,对于n = 2 ^ 20,r = 8是最快的。在n = 2
^ 24时,r = 10.67,使用3个字段10、11、11最快。在n = 2 ^ 26左右,r = 16最快。再次,由于缓存问题,性能没有很大差异,r =
8与r = 16相比,不到10%。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5623078.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-15
下一篇2022-12-15

发表评论

登录后才能评论

评论列表(0条)

    保存