Python 的 int.bit_length() 函数的时间复杂度是多少呢?

2021-02-12 20:02:47 +08:00
 littleMaple

假设某整数 x 的二进制最高有效位位数为 n,那么 x.bit_length() 的时间复杂度是 O(n) 还是 O(1) 呢?

1846 次点击
所在节点    Python
6 条回复
mogg
2021-02-12 20:08:40 +08:00
log n 啊……
mogg
2021-02-12 20:13:54 +08:00
对不起看错了,常规算法是 O(log x ) or O(n)
固定位数有优化到 O(log 32/64……)的算法(记得 csapp 上有)
Python 的具体实现得看看源码(
lxy42
2021-02-12 20:34:54 +08:00
正好在看 Python 源码, [int_bit_length_impl]( https://github.com/python/cpython/blob/master/Objects/longobject.c#L5256).

从源码来看是 O(1).
littleMaple
2021-02-12 21:24:56 +08:00
@lxy42 #3 感谢解惑!
littleMaple
2021-02-12 21:25:18 +08:00
@mogg #2 感谢回复!我这就去看 CSAPP,之前一直放着.
msg7086
2021-02-13 04:22:19 +08:00
本质上应该是 lzcnt 吧,让 CPU 算的话是常数时间。
徒手算的话应该也能优化到常数时间。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/753082

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX