Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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
Algorithm 基转换的计算复杂性_Algorithm_Complexity Theory_Time Complexity_Base - Fatal编程技术网

Algorithm 基转换的计算复杂性

Algorithm 基转换的计算复杂性,algorithm,complexity-theory,time-complexity,base,Algorithm,Complexity Theory,Time Complexity,Base,将非常大的n位数字转换为十进制表示的复杂性是什么 我的想法是,重复整数除法的基本算法,取余数得到每个数字,将具有O(M(n)logn)复杂性,其中M(n)是乘法算法的复杂性;然而,除法不是2个n位数字之间的除法,而是1个n位数字和一个小的常数之间的除法,因此在我看来,复杂度可能更小。如您所述的原始基转换需要二次时间;您可以通过smallint分区来处理nbigint,其中大多数分区的时间与n位bigint的大小成线性关系 您可以在O(M(n)log(n))时间内进行基数转换,但是,通过选取目标基

将非常大的n位数字转换为十进制表示的复杂性是什么


我的想法是,重复整数除法的基本算法,取余数得到每个数字,将具有
O(M(n)logn)
复杂性,其中
M(n)
是乘法算法的复杂性;然而,除法不是2个n位数字之间的除法,而是1个n位数字和一个小的常数之间的除法,因此在我看来,复杂度可能更小。

如您所述的原始基转换需要二次时间;您可以通过smallint分区来处理
n
bigint,其中大多数分区的时间与n位bigint的大小成线性关系


您可以在O(M(n)log(n))时间内进行基数转换,但是,通过选取目标基数的幂,该幂大致等于要转换的数字的平方根,进行除法和余数(可以通过牛顿法在O(M(n))时间内完成),然后在两半上递归。

我想我的问题是,在线性时间O(n)或更短的时间内,是否可以用一个小数字除法。例如,2或4的除法是O(1);是否有一个O(n)算法可以被10除法?如何被2O(1)除法?你必须移动所有的位,不是吗?@Tanner,是的,被任何固定除数除法就是O(n),其中n是被除数的长度。只需使用通常的长除法算法。允许任意除数会改变一切。@G.Bach,我认为这里的想法是,如果你将数字表示为一个小小的位的尾端列表,你可以使用
drop 1
@xdavidliu除以2:我不明白。您是否有一种算法可以计算两个n位数字的乘积,该算法不需要检查输入位的至少一个常量部分,或写入输出位的至少一个常量部分?@xdavidliu:不需要花费O(M(n))时间来计算商和大整数的余数乘以10。线性时间足够了。@tmyklebu没关系,是的,这是正确的