
在这里部分回答。第一个问题-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%。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)