【发布时间】:2017-09-20 15:34:36
【问题描述】:
我被要求仅使用位移、加法和减法来实现具有对数时间复杂度的整数除法。
我可以看到如何处理 2 的幂的除数,但如何处理奇数除数,以使时间保持对数?
有可能吗?
编辑:一种在非对数但仍优于线性的时间复杂度内的方法也将受到欢迎。
谢谢
【问题讨论】:
-
据我所知,一般情况下不可能。除法最多可以像乘法一样有效,即 O(M(n)) 的时间复杂度,而基于 Schönhage-Strassen 的乘法的复杂度为 O(n log n log log n)。常数很大,所以这种方法通常只对数千位的操作数有意义。你的问题是理论上的吗?如果是这样,我建议在Computer Science Stackexchange 上提问。如果你有一个实际的应用程序(用例),你的操作数有多大?
-
嗨,这是一个装配练习。我认为下面建议的方式有对数时间。
-
以下答案中概述的方法的时间复杂度为 O(n)。
-
这取决于你选择的 n - 如果 n 是被除数,它是对数的(例如,40 亿需要 32 次移位),如果 n 是被除数中的位数,它是线性的,但是您已经记录了股息的日志以获取位数。
-
@Tony Lee 这不是传统的算术函数复杂性衡量方式。
标签: bit-shift integer-division