python - 求幂是如何在 Python 中实现的?

标签 python

我能够使用 Binet 的公式(即封闭解公式)计算斐波那契数,在恒定时间内计算任何通常可计算的斐波那契数(除非结果变得很大)。这是我的代码:

对于斐波那契的非递归实现:

gr = (1 + 5**0.5) / 2
def gfib(n):
    return int(((gr**n - (1-gr)**n) / 5**0.5))

我知道 a^n 表示指数运行时间复杂度,但是当代码在 python 中运行时情况并非如此,因为它会立即计算第 n 个斐波那契数。我已经对如何在 python 中实现指数(可能是通过平方取幂?)进行了一些研究,以给出我得到的常数时间解决方案,但还没有找到明确的答案。有什么想法吗?

最佳答案

float.__pow__()方法使用 C 的 libm它充分利用了对二进制浮点运算的硬件支持。后者使用对数表示数字。对数表示使得只需要一次乘法就可以实现求幂。

执行摘要:浮点指数是在硬件中实现的,并且由于对数的魔力而以几乎恒定的速度运行。

关于python - 求幂是如何在 Python 中实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12377632/

相关文章:

python - 将列表拆分为具有多个整数定界符的 block

python - 如何正确写入Azure PipelineData?

python - Bash:WAITING后台python进程

python - 使用 pyglet_ffmpeg 尝试在 Python3 上使用带有 Debian 10 错误的街机库

python - 气流 initdb : undefined symbol: Py_GetArgcArgv

python - 使用Python通过 turtle 引用列表或字典绘制正弦波

python - CKAN Paster db init sqlalchemy 编程错误

python - 使用 psutil Python 根据进程运行时间来终止进程

python - 获取部分字符串和其他字符串

python - 如何使用python批量发布到elasticsearch?