log base 10函数的复杂度是多少?
这实际上取决于您要计算对数值的值的域。
对于IEEE double,许多处理器可以在单个汇编指令中采用对数;例如,x86具有FYL2X和FYL2XP1指令。尽管通常这样的指令只会采用某个固定基数的对数,但是通过使用以下事实,它们可以用于采用任意基数的对数:
log a
b =日志c b / log c a通过简单地取两个对数并找到它们的商。
对于(任意精度的)普通整数,您可以将重复平方与二进制搜索结合使用,以仅使用O(log log n)算术运算来取对数(每次对数字进行平方运算,则使指数翻倍,这意味着您可以只能将数字log log平方n次,然后再超过它的值即可进行二进制搜索)。使用some cute tricks with Fibonacci numbers,只能在O(log n)空间中执行此操作。如果您正在计算binary logarithm,则可以使用一些可爱的技巧与位移一起使用,以在更短的时间内计算该值(尽管渐进复杂度相同)。
对于任意实数,逻辑更难。您可以使用牛顿方法或泰勒级数来计算对数,以达到一定的精度,尽管我承认我对执行此操作的方法并不熟悉。但是,您实际上很少需要这样做,因为大多数实数是IEEE的两倍,并且在那种情况下有更好的算法(甚至是硬件指令)。
希望这会有所帮助!
在log(n)
中执行O(1)
(其中n是整数