给定n max length和1位已知计数的所有可能的位组合

时间:2018-02-19 09:34:32

标签: math combinations bit

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

我正在努力理解和计算的是这种方法可能遇到的最大组合数量?

示例1:

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

我不理解

当有32位时会发生什么?到目前为止我的方法只是乘法:所以对于32位和32位(记住我们有64位最大值)所以64 x 32 = 2048。

这个数学是否正确?

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

1 个答案:

答案 0 :(得分:0)

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

答案是64 {超过32的binomial coefficient,可以通过公式计算

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

感叹号为factorial function

计算结果为

1832624140942590534

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

只有一位,结果是二项式64超过1,实际上是64,所以你做对了。许多计算机语言中有许多包可以计算二项式系数。

请注意,这更像是一个数学问题而不是编程问题。由于这确实直接来自编程问题,我不仅仅指导你到Mathematics Stack Exchange,而且将来你应该在那里提出这样的问题。