组合问题,n个元素分成k组-5

题目要求:

P(n,k)代表将n个元素分成k个非空分组集合的总集。例如,当L=[1,2,3], P(3,2)=12,3; 13,2; 1,23.我们就假设此n个元素是从1到n。P(4,3)=1,2,34;  14,2,3; 1, 24, 3;  12, 3, 4; 4,13, 2; 23, 1, 4. 这6个 ,次序不拘。

思想:结果列表R是三重列表,一个集合放在一个二重列表中,所有的集合放在一个三重列表R中。

此题目的思想类似于在解组合问题_{n}^{k}\textrm{C}时的思想。此将问题分为两部分:L1表示选取L[0]作为一组,其他n-1个元素分成k-1组;L2表示把除了L[0]之外的分成k组,L[0]插入到这k个组中。递归处理。  

代码如下: 

#此程序的作用:将n个元素分成k组,输出分组

def divide_set(L,k):#把L分成k组
    if k==0:return [[[]]]
    if k==1:return [[L]]
    L1=[];L2=[]
    if len(L)-1>=k:
        L2=divide_set(L[1:],k)  #把除了第一个元素之外的分成k组,第一个元素插入到其中
        #print(L2)
    if len(L)>=k:
        L1=divide_set(L[1:],k-1)#把第一个元素作为一组,其他分成k-1组
 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值