创建算法来确定幂集中子集的大小
Posted
技术标签:
【中文标题】创建算法来确定幂集中子集的大小【英文标题】:Creating algorithms to determine the size of subsets in a power set 【发布时间】:2012-10-19 16:15:25 【问题描述】:我在为此作业创建算法时遇到问题。如果我能得到一些关于谁从第一个算法开始的提示,我将不胜感激。
本次作业的目标是实现和比较各种算法,以计算给定集合的每个可能大小的子集数。请记住,具有 n 个元素的集合有 2^n 个子集。其中两种算法将用于实际生成子集。 您的程序将能够要求用户做出选择,直到他/她希望退出。您的程序的 GUI 是允许的,但不是必需的。选择应允许以下内容:
-
运行一个算法,该算法的工作原理是计算从 0 开始的所有 2^n 个整数(您可能无法使用 C/C++/Java int 数据类型)并确定每个数字对应的子集的大小。该算法必须以某种方式使用整数除法和模数。它需要返回一个数组,其中包含每个可能大小的子集的数量。显示每个可能大小的子集数。 n 的值将由用户输入确定。应在 n 上执行错误检查。
运行一个算法,该算法基于计算从 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进行错误检查。
【问题讨论】:
噢耶!亲爱的,你用的是哪本教科书? @Vincenzo Sanchez 如果在将家庭作业复制粘贴到 SO 中时“说明来源”已成为一种普遍做法,这难道不是一个令人愉快的讽刺吗? 如果我们做功课,你将一无所获;)如果你想了解很多关于算法的知识,我建议你阅读算法设计手册. @WeirdlyCheezy 是的,那会很愉快 :) 【参考方案1】:我发现您的所有问题都与一个主题有关:递归回溯。
生成集合 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)
的问题也是类似的,一旦你理解了递归的概念。我不会为你的任务提供解决方案:)
【讨论】:
以上是关于创建算法来确定幂集中子集的大小的主要内容,如果未能解决你的问题,请参考以下文章
是否有一种快速算法可以将集合的所有分区生成为大小为 2 的子集(和一个大小为 1 的子集)?