0

我无法为此作业创建算法。如果我能得到一些关于谁从第一个算法开始的提示,我将不胜感激。

该任务的目标是实现和比较各种算法,以计算给定集合的每个可能大小的子集数量。请记住,具有 n 个元素的集合有 2^n 个子集。其中两种算法将用于实际生成子集。您的程序将能够要求用户做出选择,直到他/她希望退出。您的程序的 GUI 是允许的,但不是必需的。选择应允许以下内容:

  1. 运行一个算法,该算法基于从 0 开始计算所有 2^n 个整数(您可能无法使用 C/C++/Java int 数据类型)并确定与每个数字对应的子集的大小。该算法必须以某种方式使用整数除法和模数。它需要返回一个数组,其中包含每个可能大小的子集的数量。显示每个可能大小的子集数。n 的值将由用户输入确定。应在 n 上执行错误检查。
  2. 运行一个算法,该算法基于从 0 开始计算所有 2^n 个整数(您可能无法使用 C/C++/Java int 数据类型)并确定与每个数字对应的子集的大小。该算法必须以某种方式使用位级操作(逻辑与移位)。它需要返回一个数组,其中包含每个可能大小的子集的数量。显示每个可能大小的子集数。n 的值将由用户输入确定。应在 n 上执行错误检查。

  3. 运行一个算法,为 0 到 n(含)之间的所有 k 值生成 C(n,k),其中 n 由用户输入确定。该算法需要利用递归阶乘函数。它需要返回一个数组,其中包含每个可能大小的子集的数量。显示每个可能大小的子集数。应在 n 上执行错误检查。

  4. 运行一个算法,为 0 到 n(含)之间的所有 k 值生成 C(n,k),其中 n 由用户输入确定。该算法需要利用迭代阶乘算法。它需要返回一个数组,其中包含每个可能大小的子集的数量。显示每个可能大小的子集数。应在 n 上执行错误检查。

4

1 回答 1

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)一旦你理解了递归的概念,问题是相似的。我不会为你的任务提供解决方案:)

于 2012-10-19T17:29:07.283 回答