c - 在 C 中查找短数组的所有可能子集

标签 c arrays opencl bit-manipulation subset

我在 C 中有一个相对较短的数组(<32 个元素),并且想要遍历该数组的所有可能的长度 >= 2 的子集。有很多方法可以通过递归构建所有子列表的列表来实现,但我想避免这增加的额外开销。我所需要的只是遍历每个子集;我不需要跟踪它们。

这听起来像是一个奇怪的要求,但原因是我还希望能够在每个工作项内存非常昂贵的 OpenCL 内核中使用它。分配列表列表是我真正想避免的事情。

最佳答案

如果您包含大小为 0 和 1 的子集,然后将它们过滤掉(这很简单,
if ((set & (set - 1)) == 0) ,忽略它),你实际上只是从 0 迭代到 1 << n .

这比 Gosper 的 Hack 简单得多,后者很酷,但是由于无论如何您基本上都需要所有子集长度,因此使用它没有什么意义。只有几个子集以这种方式被跳过,因为你不想要的唯一一个非平凡的组只有大小 n .

关于c - 在 C 中查找短数组的所有可能子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20634719/

相关文章:

c - 如何在另一行之前打印这一行?

c - fgets() 是否返回 NULL 并兼容短缓冲区?

c - 了解 C 中的 unsigned char 左旋转

java - 我可以将不同的 Canvas 笔划添加到数组中吗?

opencl - 重叠传输和执行 : ensure that commands are performed in the right order

python - 在 Python 中将 OpenCL 加速函数与 OpenCV3 结合使用

c - 如何在 header 中使用静态函数并与 float 组进行比较

c - 定义一个宏来交换符号

c++ - 无法打印数组中的信息,不知道如何遍历存储在类中的数组?

opengl - OpenCL 和 OpenGL 的计算着色器有什么区别?