我正在尝试将自己的压缩算法作为实验。对于我的部分解决方案,我需要计算输入字节中的1位数。输入字节当前需要为8个字节或64位长。这意味着我可以从0到64进行1位计数。
我正在努力理解和计算的是这种方法可能遇到的最大组合数量?
示例1:
1位计数= 1 这意味着有63个零位 意味着在这种情况下总共有64种组合
我不理解
当有32位时会发生什么?到目前为止我的方法只是乘法:所以对于32位和32位(记住我们有64位最大值)所以64 x 32 = 2048。
这个数学是否正确?
老实说这太低了,但我不确定。更令人困惑的是,我知道1和0的数量但不知道它们的确切位置,以及如何减少最大可能组合的事实。很明显,如果这是一个简单的总共64个比特的组合,那将是2 ^ 64,这是一个巨大的数字。让我怀疑我之前的数学是否准确。
答案 0 :(得分:0)
这是combinations中的问题。您有64个位置,并希望选择其中的32个来放置1位。选择不能重复,选择的顺序无关紧要。这使它成为一个组合问题。
答案是64 {超过32的binomial coefficient,可以通过公式计算
64! / (32! * (64-32)!)
感叹号为factorial function。
计算结果为
1832624140942590534
比您尝试的答案要大得多。
只有一位,结果是二项式64超过1,实际上是64,所以你做对了。许多计算机语言中有许多包可以计算二项式系数。
请注意,这更像是一个数学问题而不是编程问题。由于这确实直接来自编程问题,我不仅仅指导你到Mathematics Stack Exchange,而且将来你应该在那里提出这样的问题。