Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 以2^lg n为基数的数字到底是什么?_Sorting_Math_Base - Fatal编程技术网

Sorting 以2^lg n为基数的数字到底是什么?

Sorting 以2^lg n为基数的数字到底是什么?,sorting,math,base,Sorting,Math,Base,我一直在研究各种排序算法,有一种叫做基数排序的算法,我必须以基数2^(lgn)对数字进行排序,但我不知道这到底是什么。我的意思是,我知道基数2是二进制的,但对于logn,我真的不明白 所以我想知道基2^(lgn)实际上是什么,以及它会以何种方式影响我的代码。符号lgn是log2n的简写 既然如此,你能简化2lg n=2log2 n吗?问题是缺少信息:lg()的基数是什么:n是值的最大范围还是n是元素的数量。语句中还应该有一个上限(将分数取整到下一个整数)函数 假设n是值的最大范围,其中n=max

我一直在研究各种排序算法,有一种叫做基数排序的算法,我必须以基数2^(lgn)对数字进行排序,但我不知道这到底是什么。我的意思是,我知道基数2是二进制的,但对于logn,我真的不明白


所以我想知道基2^(lgn)实际上是什么,以及它会以何种方式影响我的代码。

符号lgn是log2n的简写


既然如此,你能简化2lg n=2log2 n吗?

问题是缺少信息:lg()的基数是什么:n是值的最大范围还是n是元素的数量。语句中还应该有一个上限(将分数取整到下一个整数)函数

假设n是值的最大范围,其中n=max()+1-min():

如果lg=log2,则为2^(ceil(log2(n)),即n,如果n不是2的幂,则为2>n的下一次幂。如果对数字进行排序,最好使用计数排序而不是基数排序

如果lg=log4,那么它是2^(ceil(log4(n)))。例如,如果n=1024,则2^(ceil(log4(1024))==2^5==32,并且需要2个基数排序过程(通常是最低有效位优先)来对数据进行排序

如果lg=log16,那么它是2^(ceil(log16(n)))。例如,如果n=65536,则2^(ceil(log16(65536))==2^4==16,并将采用4个基数排序过程对数据进行排序


顺便说一句,在典型的PC机(X86处理器)上,如果对32位或64位无符号整数使用基数排序,则使用2^8==256通常是最快的,尽管这意味着比使用2^16==65536之类的方法要多的过程。

哦,我不知道。所以2^log2n等于n,对。就像我不能改变任何东西一样,只使用基于规则的数字?我也不知道如何在2i上面写日志,它实际上等于n,所以我想你可以想象用n为基数来写数字。在理论界,用n为基数排序是有意义的。base-b基数排序的成本是O((n+b)log_b U),U是最大的值,因为轮数是log_b U,每轮进行计数排序需要时间O(n+b)。如果选择b=n,那么这将减少到O(nlog\nu)=O(nlogu/logn),这是一个非常好的运行时。因此,完全有可能OP被要求进行基数n排序。我运行了一些基准点,对3600万伪随机64位无符号整数进行排序。在我的系统(英特尔370K,Win 7 PRO 64位,Visual Studio 2015,C++代码)中,用基数为2 ^ 8的8通基数,或位字段大小{8,8,8,8,8,8,8 },花费了大约1秒。将此更改为{11,11,11,10,10}2^11 | 2^10,6次传球耗时约2秒,{16,16,16}2^16,4次传球耗时约2.5秒。问题是让计数和索引与输入数据一起适应一级缓存。哦,绝对正确。在听说base-N是一个理论上最优的基数排序后不久,我进行了类似的实验,但当事实并非如此时,我感到惊讶!基于整数的基数n排序本质上是一种计数排序,它取决于n是什么。如果n是最大值,是的,你完全正确。另一方面,如果n是数组大小,那么这并不完全是计数排序。(想象一个由三个数字组成的数组,每个数字都有一千万位长。)n是最大范围(在这种情况下,2^(log(n))更有意义)还是n是元素数?这是一个