集合划分问题算法探讨

原题:

n个元素的集合{1,2,3,..., n }划分非空子集,有多少种分法?

例如,当n=4 时,集合{1,2,3,4}可以划分为15 个不同的非空子集如下:
{{1},{2},{3},{4}},
{{1,2},{3},{4}},
{{1,3},{2},{4}},
{{1,4},{2},{3}},
{{2,3},{1},{4}},
{{2,4},{1},{3}},
{{3,4},{1},{2}},
{{1,2},{3,4}},
{{1,3},{2,4}},
{{1,4},{2,3}},
{{1,2,3},{4}},
{{1,2,4},{3}},
{{1,3,4},{2}},
{{2,3,4},{1}},
{{1,2,3,4}}

一个子问题,就是n个元素划分成m个子集,有多少种方法?

f(n, m) = { m=1时,=1;n=m时,=1; 其他情况,分为两类:

一类是f(n-1, m),然后第n个添加到m个分好的当中,为 m*f(n-1, m);另一类是f(n-1, m-1),然后第n个独立为一份;

所以f(n, m) = m*f(n-1, m) + f(n-1, m-1)。

就可以编程求出了。可以适当地使用动态规划(或动态规划记表法)来提升效率、减少递归。

时间: 2024-10-18 04:28:35

集合划分问题算法探讨的相关文章

数组集合删除算法

数组集合删除算法: 删除: /** * 更多资料欢迎浏览凯哥学堂官网:http://kaige123.com * @author 小沫 */ public void remove(int index){ //objs的长度如果小于0或对象值小于等于0那么抛出数组越界异常 if(objs.length<0||this.index.0){ throw new IndexOutOfBoundsException(); } if(this.index-1==index){ //当前对象的是所占长度-1等

数组集合添加算法

集合是无限存储的容器: 数组集合采用的算法是一开始先开辟好有限的空间进行存储放进来的数据. 等需要再次存放数据的时候,再去开辟一块比原来的空间多的容量之前,老的数据导入进新开辟的空间,然后再把新进来的数据放进空间里,依次这样进行开辟导入就形成了无限的容器.这就是数组集合的算法.  在java源码里面,采用的导入方式是直接调用本地系统语言来直接导入数据,这样提高了效率,一万毫秒才能完成的事情也许四千毫秒就执行完毕. 取消for循环导入使用System.arraycopy如下代码: /** * 更多

LeetCode OJ平台上Sort Colors题目算法探讨

原题如下,意思就是说无序数组(由0,1,2组成),一遍扫描,把数组整理成若干个0-若干个1-若干个2这样的序列. Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue. Here, we will use the integ

黄聪:博客园的积分和排名算法探讨,积分是怎么计算的?(转)

我们先来看看现行规则,用公式表示为:-------------------------------------------------------------------BlogScore = BeRead + 10 * BeComment + 50 * CommentBlogScore:博客积分BeRead:个人博客所有随笔和文章的阅读数之和BeComment:个人博客被评论总数Comment: 个人所发表的评论总数---------------------------------------

[ACM] FZU 1570 集合划分问题( 不同小球放入相同盒子,第二类Stirling数)

Problem Description n个元素的集合{1,2,...,n}可以划分若干个非空子集.例如,当n=4时,集合{1,2,3,4}可以划分为15个不同的非空子集如下: {{1},{2},{3},{4}}, {{1,2},{3},{4}}, {{1,3},{2},{4}}, {{1,4},{2},{3}}, {{2,3},{1},{4}}, {{2,4},{1},{3}}, {{3,4},{1},{2}}, {{1,2},{3,4}}, {{1,3},{2,4}}, {{1,4},{2,

集合划分问题(转载)

集合划分问题 问题描述:n个元素的集合{1,2,?, n }可以划分为若干个非空子集.例如,当n=4 时,集合{1,2,3,4}可以划分为15 个不同的非空子集如下:[注:这里和高中数学的子集有区别]{{1},{2},{3},{4}},{{1,2},{3},{4}},{{1,3},{2},{4}},{{1,4},{2},{3}},{{2,3},{1},{4}},{{2,4},{1},{3}},{{3,4},{1},{2}},{{1,2},{3,4}},{{1,3},{2,4}},{{1,4},{

海量用户积分排名算法探讨

这篇可参考 http://www.cnblogs.com/weidagang2046/archive/2012/03/01/massive-user-ranking.html#!comments 问题 某海量用户网站,用户拥有积分,积分可能会在使用过程中随时更新.现在要为该网站设计一种算法,在每次用户登录时显示其当前积分排名.用户最大规模为2亿:积分为非负整数,且小于100万. PS: 据说这是迅雷的一道面试题,不过问题本身具有很强的真实性,所以本文打算按照真实场景来考虑,而不局限于面试题的理想

Java集合与算法

梗概: 集合接口 集合实现(链表.数组列表.散列集.树集.队列与双端队列.映射表) 集合与数组之间的转换 算法(排序.二分查找). 文章链接: http://mp.weixin.qq.com/s?__biz=MzIyNzUzNjQ3MA==&tempkey=9YdXfd6Y7dM6wn2ZeFV9CfKOID6y3G3SAokFuwJB5LoEGWs2RfMrN1F05Ywv4f3o2EH0vsB2h%2Blj4zm3T0d%2BraVDuJvckGBesEADN4onuufzz4hb%2F7o

海量用户积分排名算法探讨【转载】

本文内容 问题 存储结构 算法1:简单SQL查询 算法2:均匀分区设计 算法3:树形分区设计 算法4:积分排名数组 该问具体出自哪里,不是很确定,而我是在某个微信公众号上看到的~文中的内容比较有启发性的~ 问题 某海量用户网站,用户拥有积分,积分可能会在使用过程中随时更新.现在要为该网站设计一种算法,在每次用户登录时显示其当前积分排名.用户最大规模为2亿:积分为非负整数,且小于100万. PS:据说这是迅雷的一道面试题,不过问题本身具有很强的真实性,所以本文打算按照真实场景来考虑,而不局限于面试