我无法为此作业创建算法。如果我能得到一些关于第一个算法开始的提示,我将不胜感激。
此分配的目标是实现和比较各种算法,以计算给定集合的每个可能大小的子集数量。请记住,具有n个元素的集合具有2 ^ n个子集。其中两个算法将用于实际生成子集。 您的程序将有能力要求用户选择,直到他/她希望退出。允许使用程序的GUI,但不是必需的。选择应允许以下内容:
运行一个算法,该算法基于从0开始计算所有2 ^ n个整数(您可能无法使用C / C ++ / Java int数据类型)并确定对应于的子集的大小每个号码。该算法必须以某种方式使用位级操作(逻辑和移位)。它需要返回一个数组,其中包含每个可能大小的子集数。显示每个可能大小的子集数。 n的值将由用户输入确定。应在n。
运行一个算法,为0和n(含)之间的所有k值生成C(n,k),其中n由用户输入确定。该算法需要利用递归因子函数。它需要返回一个数组,其中包含每个可能大小的子集数。显示每个可能大小的子集数。应在n。
运行一个算法,为0和n(含)之间的所有k值生成C(n,k),其中n由用户输入确定。该算法需要利用迭代因子算法。它需要返回一个数组,其中包含每个可能大小的子集数。显示每个可能大小的子集数。应在n。
答案 0 :(得分:0)
我发现您的所有问题都与一个主题有关:递归回溯。
生成集S的幂集:
function rec( i )
if i == S.length
print choocen elements of S
return
else
do not chooce element i of S
rec(i + 1)
choose element i of S
rec(i + 1)
一旦你理解了递归的概念,C(n, k)
的问题就差不多了。我不打算为你的任务提供解决方案:)