【发布时间】:2014-08-20 00:18:35
【问题描述】:
我已经搜索过这个主题,但找不到。问题是:给定一个整数n,生成一个包含0和1的所有2^n组合的数组。
例如,当n = 2,我们应该得到{{0, 0}, {0, 1}, {1, 0}, {1, 1 }}。我发现itertools.product 在Python 中使用参数repeat 执行此操作(但我的雇主希望它严格在C 中)。
我需要代码适合n = 24, 25 案例(并且足够快 - 这是我雇主的要求)。
此外,我还有一个问题。 C 在Python 中是否有类似于Generator 的内容?
编辑
我在这里看到很多 -ve 反馈。对于这种混乱,我真的很抱歉。在这里,我尝试重新构建我的问题:
我有一个160 元素数组,其中只有24(或25)被标记(这些标记元素的索引存储在单独的数组中)。我需要获取所有160 元素2^24 次 - 每次一个或多个标记元素将被其 dual 替换,并执行一些操作(此操作需要 160 元素并产生每次都有一个二进制响应,我需要所有响应的 XOR)。我怎样才能有效地做到这一点?
我工作的农场经理除了C 不知道。所以,他希望在C 中完成。
*每个元素都是一个二维数组。
编辑#2
可能是,我仍然无法澄清我遇到的问题。我在伪代码的基础上工作:
all_elements = { <collection of elements> };
all_marked_elements = { <collection of 24 marked elements> };
all_combinations = { <all 0, 1 combinations of length 2^24> };
int operation (<160 elements>) {
...
return 0 or 1;
}
x = 0;
foreach (c in all_combinations) {
e = {};
for (i >= 0; i <= 23; i=i+1) {
if (c[i] == 1) {
append all_marked_elements[i] to e;
}
}
d = get dual of all elements in e;
x xor= operation ( <all_elements with e replaced by d>);
}
show x;
【问题讨论】:
-
这个问题是两个问题。这不好。
-
你在问如何用二进制计数。
-
我想知道这个“雇主”到底是谁......?
-
@alk: 一个……未来的,也许吧?听起来像是一个入门级的面试问题(如果不是家庭作业)