繁体   English   中英

Python 中 bin() 的时间复杂度

[英]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) 因此,对于一个数nbin()的时间复杂度是O(log(n))

它是 log(n)。 想想简单的除法,我们将数字除以 2,直到余数变为 0 或 1,就像遍历树一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM