[英]Time complexity of bin() in Python
Python 中bin(n)
的时间复杂度是多少,其中n
是十进制数(整数)?
例如:
如果n = 10
,则bin(n) = 0b1010
,那么幕后发生了什么? 十进制转二进制需要多长时间? 什么是Big O
表示法?
python中bin(n)的时间复杂度是多少,其中n是十进制数(整数)?
十进制转二进制需要多长时间?
数字n
没有从十进制到二进制的转换,因为内部表示已经是二进制的。 整数值表示为64-bit
值的数组(例如,如果该值小于2^64 - 1
则该数组包含一个元素)。 因此,要以二进制形式显示它,需要从最高位打印到最低位。
如果您查看bin()
或更具体的宏#define WRITE_DIGITS(p)
链接的源代码,您将看到以下循环:
for (i = 0; i < size_a; ++i) {
...
}
size_a
代表必须找到二进制表示的数字a
大小(64 位整数数组的大小)。
然后,将内for
环有一个while
将比特从i
的第位数a
被提取并保存到字符串表示p
:
...
do {
...
cdigit = (char)(accum & (base - 1));
cdigit += (cdigit < 10) ? '0': 'a' - 10;
*--p = cdigit;
...
} while (...);
...
执行内循环,直到提取出当前数字的所有位。 在此之后,外循环移动到下一位,因此所有位再次从内循环中提取。 等等。
但是迭代次数等于给定数字n
的二进制表示中的位数,即log(n)
。 因此,对于一个数n
, bin()
的时间复杂度是O(log(n))
它是 log(n)。 想想简单的除法,我们将数字除以 2,直到余数变为 0 或 1,就像遍历树一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.