【问题标题】:Algorithm to make all possible subsets of n items生成 n 个项目的所有可能子集的算法
【发布时间】:2018-02-19 22:23:54
【问题描述】:

我有 n 个项目,我需要一个算法来生成这些项目的所有可能子集。

我真正需要的是一种算法,可以将这 n 个项目的所有可能的分区划分为两个不相交的集合。但我认为所有可能的子集都是一个很好的起点——然后对于每个子集,我可以将所有剩余的项目放入其他不相交的集合中。

【问题讨论】:

  • 请编辑您的问题并添加您已经为解决此问题所做的工作。
  • 那么,组合,而不是排列?意思是集合不依赖于顺序?
  • 既然您已经确定了您的需求,请尝试制定一个满足您需求的算法。
  • 您正在寻找PowerSet
  • 我投票决定将此问题作为题外话结束,因为our on-topic guidance 指定,“要求家庭作业帮助的问题必须包含您所做工作的摘要到目前为止已经解决了问题,并描述了您解决问题时遇到的困难。”

标签: algorithm math powerset set-theory


【解决方案1】:

n 项(包括空项)有 2^n 个可能的子集。

因此,您可以为0..2^n-1 范围内的所有整数创建循环,并将此范围内的每个整数M 映射到相应的子集:如果M 的第 k 位,第 k 项是子集 M 的一部分设置好了。

for M = 0 to 2^n-1 do
   x = M
   k = 0 
   while x <> 0 do
       if (x and 1) then //check if kth bit is set in x
           ......
       x = x >> 1  //shift right
       k = k + 1

或者,您可以为相同的范围创建二进制计数器 - 例如,对于集合 [0 0 1 1],下一个集合将是 [0 1 0 0]

【讨论】:

  • 这很有意义,但是我如何将 M 表示为 n 位二进制数,以便创建第 M 个子集?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-24
  • 2015-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多