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

2021 年 2 月 12 日
 littleMaple

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

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

从源码来看是 O(1).
littleMaple
2021 年 2 月 12 日
@lxy42 #3 感谢解惑!
littleMaple
2021 年 2 月 12 日
@mogg #2 感谢回复!我这就去看 CSAPP,之前一直放着.
msg7086
2021 年 2 月 13 日
本质上应该是 lzcnt 吧,让 CPU 算的话是常数时间。
徒手算的话应该也能优化到常数时间。

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

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

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

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

© 2021 V2EX