给定 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,但以后您应该在那里提出此类问题。
我正在尝试推出自己的压缩算法作为实验。对于我的部分解决方案,我需要计算输入字节中 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,但以后您应该在那里提出此类问题。