Algorithm 将两个数字分开的时间复杂度是多少?

Algorithm 将两个数字分开的时间复杂度是多少?,algorithm,time-complexity,Algorithm,Time Complexity,假设我有两个数字a和b(a>b),如果我用a除以b(即计算a/b)。我需要提供多少时间 人们对指令集和体系结构也有评论。这就是假设 假设a和b是两个整数,每个整数有n位,我们有标准的x86_64机器和标准指令集 有人请求提供答案,而不仅仅是一个链接,因此我将尝试一下。正如上面小灵通所指出的,有一个很好的链接 除法是一种运算,就计算复杂性理论而言,除法并不比乘法昂贵。其中一个原因是,计算复杂性理论只关心算法的成本如何随着数据量的增加而增加,在这种情况下,这意味着多精度分割。另一个原因是有一种比纸笔

假设我有两个数字a和b(a>b),如果我用a除以b(即计算a/b)。我需要提供多少时间

人们对指令集和体系结构也有评论。这就是假设


假设a和b是两个整数,每个整数有n位,我们有标准的x86_64机器和标准指令集

有人请求提供答案,而不仅仅是一个链接,因此我将尝试一下。正如上面小灵通所指出的,有一个很好的链接

除法是一种运算,就计算复杂性理论而言,除法并不比乘法昂贵。其中一个原因是,计算复杂性理论只关心算法的成本如何随着数据量的增加而增加,在这种情况下,这意味着多精度分割。另一个原因是有一种比纸笔长除法更快的除法算法——这种算法实际上足以影响计算机硬件的设计——著名的例子是Cray-1交互迭代和Pentium错误

除法的快速方法是,将a除以1/b,而不是将a除以,将问题简化为计算倒数。要计算1/b,首先用2的幂来缩放问题,得到范围内的b[1,2),并对答案进行第一次猜测,通常是从查找表中猜测答案-奔腾bug在查找表中有错误。现在您得到了一个错误很多的答案-您有1/b+x,其中x是错误,您不知道,但如果您的查找表大小合适,那么错误很小

解方程的牛顿-拉斐逊迭代理论告诉你,如果c=1/b+x是1/b的猜测,那么c(2-bc)是一个更好的猜测。如果c=1/b+x,那么一些代数会告诉你更好的猜测是1/b-bx^2。你已经平方了误差x,因为x很小(比如从0.1开始)您已将正确的位数大致增加了一倍


每次这样做都会使正确的位数翻倍,因此不需要多次迭代就可以得到(足够好的)答案因为你知道每次迭代都只是一个近似值,所以你只需要计算到你认为近似值会给出的精度,而不是你想要的答案的全部精度。大部分基础工作是c(2-b)中的乘法当你坐下来计算所有这些的成本时,你会发现,随着位数的增加,它的增长速度足够快,你得到的和看起来像1=1/2+1/4+1/8+…-很多项,但收敛到与第一项答案不太远的地方-和c多精度除法的ost不超过多精度乘法成本的常数因子。

没有更多细节,很难说。可能是单个CPU周期。请指定体系结构、指令子集(如果适用)和数字格式。一般情况下,概念复杂。(当然,特殊情况下,速度可能快得多。)基本上,除法比相同大小的操作数相乘慢2-4倍,这意味着如果您感兴趣的话,它的“大O”复杂度是相同的。如果我们将a(n位数)除以b(n位数),则不能说然后除法需要n次运算?你能期望做的最好的事情是常数因子乘以n logn,因为全精度乘法需要n logn上的某个值-参见维基百科链接phs。如果我只关心商的整数部分,怎么样?我们能用O(n)来做吗时间,其中n是除数和被除数中的位数?一个只给出A/b整数部分的框几乎和一个在二进制/小数点后给出A/b到k个二进制数字的框一样强大,因为我可以通过要求它提供(2^k*A)的整数部分来获得精度/b、 因此,我不认为你可以在那里节省时间。如果你只需要答案中的k位精度,你可能可以节省时间。克努特在第3卷第4.3.1节中分析了如何在计算机上进行长除法,并在那里分析了如果只使用a的两个前导位和b、 谢谢Mcdowella,这里我不是在寻找精度,我只是关心整数除法,比如int/int给了我一个int,我能想到的最好的算法是将n位的数字除以O(n^2)。但是我认为一定有比二次除法更好的方法。