给定 n 最大长度和 1 位的已知计数的所有可能的位组合

all possible combinations of bits given n max length and a known count of 1 bits

我正在尝试推出自己的压缩算法作为实验。对于我的部分解决方案,我需要计算输入字节中 1 的位数。当前要求输入字节为 8 字节或 64 位长。这意味着我可以对 1 位进行计数,从 0 到 64。

我正在努力理解和计算的是我可能 运行 使用这种方法的最大组合数?

示例 1:

1 位计数 = 1 这意味着有 63 个零位 这意味着在这种情况下总共有 64 种组合

我不明白的地方

当有 32 个 1 位时会发生什么?到目前为止,我的方法只是简单的乘法:所以对于 32 个一位和 32 个零位(记住我们最多有 64 位)所以 64 x 32 = 2048.

这个数学正确吗?

老实说,这似乎太低了,但我不确定。更令人困惑的是,我知道 1 和 0 的数量,但不知道它们的确切位置,这是如何减少最大可能组合的。显然,如果这是一个简单的 64 位总组合数,那就是 2^64,这是一个巨大的数字。让我怀疑我以前的数学是否准确。

这是 combinations 中的一个问题。你有 64 个位置,想要选择其中的 32 个位置来放置 1 位。选择不能有任何重复,选择的顺序无关紧要。这使它成为一个组合问题。

答案是64 over 32的binomial coefficient,可以用公式

计算
64! / (32! * (64-32)!)

感叹号是factorial function.

计算结果为

1832624140942590534

这比您尝试的答案要大得多。

只有一位,结果是二项式 64 大于 1,确实是 64,所以你猜对了。许多计算机语言中有很多包可以计算二项式系数。

请注意,这更像是一道数学题,而不是编程题。由于这确实直接来自编程问题,所以我没有直接将您带到 Mathematics Stack Exchange,但以后您应该在那里提出此类问题。