嗨,我正在尝试找出一个函数,其中给定列表 [x1, x2... xn] 的长度 n,基数为 2 的数字系统需要多少位数字才能为列表中的每个值分配一个唯一代码列表。

例如,一位数字可以包含两个唯一值:

x1 0
x2 1

两位数可以容纳四位:
x1 00
x2 01
x3 10
x4 11

等我正在尝试编写一个 python 函数 calcBitDigits(myListLength) ,它接受这个列表长度并返回所需的位数。 calcBitDigits(2) = 1, calcBitDigits(4) = 2, calcBitDigits(3) = 2, 等等。

最佳答案

>>> for i in range(10):
...    print i, i.bit_length()
0 0
1 1
2 2
3 2
4 3
5 3
6 3
7 3
8 4
9 4

我不清楚你想要什么,但看起来你想从 bit_length() 返回的内容中减去 1 - 或者可能不是 ;-)

第三个想法;-),也许你真的想要这个:
def calcBitDigits(n):
    return (n-1).bit_length()

至少这给出了您在给出的每个示例中所说的结果。

注意:对于整数 n > 0,n.bit_length() 是用二进制表示 n 所需的位数。 (n-1).bit_length() 确实是一种更快的计算 int(math.ceil(math.log(n, 2))) 的方法。

澄清:我现在理解原来的问题 ;-) 以下是如何思考答案:如果您有 n 项目,那么您可以使用 n 中的 0 整数通过 n-1 为它们分配唯一代码。这需要多少位?以二进制表示 n-1(最大的代码)所需的位数。我希望这能让答案显而易见而不是神秘;-)

正如评论所指出的,对于 n=1 的争论变得紧张。那个 (0).bit_length() == 0 是一个怪癖。所以当心那个!

关于Python在二进制中找到最大组合数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20233224/

10-12 05:25