【发布时间】:2017-04-17 01:36:43
【问题描述】:
这对我来说已经有一段时间了。
给定两个表示二进制数的数组 A 和 C 具有相同的大小,由数字 0 或 1 表示的位组成,使得 C > A,并且都具有相同的 X 个 1 位,什么是计算存在多少二进制 B 的最有效方法,例如 A
示例:对于 A={0,1,0,0,1} C={1,0,1,0,0} X=2
所有 B 将是 {0,1,0,1,0},{0,1,1,0,0},{1,0,0,0,1},{1,0,0,1,0 },这会给我答案 4。有 4 个二进制文件,在 01001 和 10100 之间有 2 个“1”位。
我有一个算法可以在给定一些 A 的情况下生成下一个 B,但我觉得继续生成下一个 B 并检查我是否已经命中 C 二进制文件效率不高。
有没有什么方法可以在不生成 B 的情况下计算 A 和 C 之间 B 的确切数量?
【问题讨论】:
-
你为什么担心你的算法的效率?除非您要计算数百万位的数字,或者计算数百万次,否则请追求优雅和清晰而忽略效率。从 A 到 C 迭代计数 N 1 位的数字似乎是最直接的解决方案,并且可能足够有效。
-
Integer#bitCount是一个 O(1) 操作;在这种情况下,如果我是你,我就不会担心效率。 -
你的算法在哪里?
-
我承认,其中一个原因是出于好奇。我只是想知道是否有“公式”或其他东西。另一个更重要的原因是,对于数组的任何其他单元格,总二进制数乘以 2,所以如果我有 A[50] 和 C[50],我将不得不使用的次数生成 B 的算法可能达到数百万、数十亿等。
-
老实说,很可能存在一个您可以使用的组合公式;如果我是你,我会在math.stackexchange.com 上发帖。如果你有一个算法,我可以为你编写一个程序。
标签: java binary combinatorics