
假设某整数 x 的二进制最高有效位位数为 n,那么 x.bit_length() 的时间复杂度是 O(n) 还是 O(1) 呢?
1 mogg 2021 年 2 月 12 日 log n 啊…… |
2 mogg 2021 年 2 月 12 日 对不起看错了,常规算法是 O(log x ) or O(n) 固定位数有优化到 O(log 32/64……)的算法(记得 csapp 上有) Python 的具体实现得看看源码( |
3 lxy42 2021 年 2 月 12 日 正好在看 Python 源码, [int_bit_length_impl]( https://github.com/python/cpython/blob/master/Objects/longobject.c#L5256). 从源码来看是 O(1). |
4 littleMaple OP @lxy42 #3 感谢解惑! |
5 littleMaple OP @mogg #2 感谢回复!我这就去看 CSAPP,之前一直放着. |
6 msg7086 2021 年 2 月 13 日 via Android 本质上应该是 lzcnt 吧,让 CPU 算的话是常数时间。 徒手算的话应该也能优化到常数时间。 |