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