算法设计手册
关于这本书
编程挑战

石溪算法库

史蒂芬·斯杰纳
石溪大学
计算机科学系

1.3.5生成子集

问题输入 | 问题输出

输入输出


输入说明:一个整数n个.

问题:生成(1)全部,或(2)随机,或(3)下一个子集的整数1n个.

摘录自算法设计手册: 子集描述对象的选择,其中对象之间的顺序无关紧要。许多算法本目录中的问题寻求一组事物的最佳子集:顶点覆盖寻求最小子集与图中每条边接触的顶点;背包寻找有界总数中最有利可图的项目子集规模;集合包装寻求集合中覆盖每个项目一次的子集的最小子集。

2n个$n$元素集的不同子集,包括空集以及设置自己。这以指数形式增长,但速度比$n!$小得多的排列n个项目。事实上,自从220=1048576,对所有子集进行强制搜索20个元素很容易管理,尽管n=30230=1073741824,你会的当然是在推动事情。


启动位置

  • C.A.G.E.S.(C)(等级10)
  • Frank Ruskey的组合发电资源(C,Pascal)(评级9)
  • Nijenhuis和Wilf:组合算法(FORTRAN)(等级8)
  • FFT-快速傅里叶变换(C,FORTRAN)(等级8)
  • 组合数学(评分7)
  • Netlib/TOMS——ACM的集合算法(FORTRAN)(等级3)

  • 推荐图书

    计算机编程艺术,第4卷第3分册:生成所有组合和分区作者:D.E.Knuth 组合算法:生成、枚举和搜索作者:Donald L.Kreher和Douglas R.Stinson 计算离散数学:组合数学和图论与MathematicaS.Pemmaraju和S.Skiena
    组合算法:更新作者:H.Wilf 计算机和计算器的组合算法作者:A.Nijenhuis和H.Wilf

    相关链接

  • fxt演示:组合演示

    相关问题


      
    正在生成分区
      
    生成排列
      
    随机数生成
      
    设置数据结构



    本页上次修改日期为2008-07-10.
    网址:www.algorist.com