前言:
而今兄弟们对“编程计算组合数”大致比较注重,大家都需要了解一些“编程计算组合数”的相关内容。那么小编同时在网络上网罗了一些有关“编程计算组合数””的相关资讯,希望小伙伴们能喜欢,同学们一起来学习一下吧!一、排列组合的数学意义
加法原理
做一件事,完成它可以有n类办法,在第一类办法中有m1种不同的方法,在第二类办法中有m2种不同的方法,……,在第n类办法中有mn种不同的方法,那么完成这件事共有N=m1+m2+m3+…+mn种不同方法。每一类中的每一种方法都可以独立地完成此任务。
乘法原理
做一件事,完成它需要分成n个步骤,做第一步有m1种不同的方法,做第二步有m2种不同的方法,……,做第n步有mn种不同的方法,那么完成这件事共有N=m1×m2×m3×…×mn种不同的方法。任何一步的一种方法都不能完成此任务,必须且只须连续完成这n步才能完成此任务。
排列的定义
从n个不同元素中,任取m(m≤n,m与n均为自然数,下同)个不同的元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列;从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号A(n,m) 表示。
排列是有顺序的,例如:排列123 和排列213是两个独立的排列,每个数字的位置看成一步,排列的原则就符合乘法原理。
推导出公式:A(n,m) = n*(n-1)*(n-2)*...*(n-m+2)*(n-m+1)
组合的定义
从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合;从n个不同元素中取出m(m≤n)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数。用符号 C(n,m) 表示。
组合没有顺序,只看元素,例如:组合123和组合213是同一个组合。组合相比于排列,就是去除数字相同的排列。
推导出公式:C(n,m) = A(n,m)/A(m,m) = n*(n-1)*(n-2)*...*(n-m+2)*(n-m+1)/ m*(m-1)*...*1
二、排列组合编程实例
需求描述
1、排列需求
1)给定自然数集合,从1开始 [1,2,3,...,n]
2)给出算法计算全排列,并按照从小到大顺序排列。
3)给出最大自然数n,返回第m个排列, str格式
2、组合需求
1)给出水果种类List,包含n种水果
2)给出m个水果的组合,m <=n
源码
#-*- coding:utf-8 -*-import itertools as itclass PermSGXH(object): def perm(self, maxNaturalNo:int, retPermNo:int): #生成自然数集合 natureNoList = [y for y in range(1, maxNaturalNo + 1)] permList = list(it.permutations(natureNoList)) # print(permList) return permList[retPermNo-1] def comb(self, fruitList:list, noOfSelected:int): return list(it.combinations(fruitList, noOfSelected))if __name__ == '__main__': p = PermSGXH() #123 print(p.perm(3,1)) #213 print(p.perm(3,3)) #2314 print(p.perm(4,9)) #给出5种水果,选出3种水果的组合 fruitList = ['苹果','火龙果','李子','桃子','香蕉'] noOfSelected = 3 print(p.comb(fruitList,noOfSelected))验证结果
PS D:\Shangouxuehui_Git\PythonAlgorithm-main> & D:/Python312/python.exe d:/Shangouxuehui_Git/PythonAlgorithm-main/sgxh_permutation_combination.py(1, 2, 3)(2, 1, 3)(2, 3, 1, 4)[('苹果', '火龙果', '李子'), ('苹果', '火龙果', '桃子'), ('苹果', '火龙果', '香蕉'), ('苹果', '李子', '桃子'), ('苹果', '李子', '香蕉'), ('苹果', '桃子', '香蕉'), ('火龙果', '李子', '桃子'), ('火龙果', '李子', '香蕉'), ('火龙果', '桃子', '香蕉'), ('李子', '桃子', '香蕉')]PS D:\Shangouxuehui_Git\PythonAlgorithm-main>
代码下载:
##山狗学会 License Start##
转载请注明出处,"今日头条"创作者"山狗学会“ ,注明出处即授权,未注明出处罚款100万元
主页链接:山狗学会主页
##山狗学会 License End##
标签: #编程计算组合数 #编程计算组合数怎么算 #组合数编程实现