算法之排列算法与组合算法详解
1. 排列算法
1.1 概念
排列算法是指从n个不同的元素中取出m个元素,按照一定顺序进行排列,所有可能的排列情况就叫做排列数。排列数可以分为有放回排列和无放回排列。
1.2 具体实现
有放回排列实现在代码中可以使用嵌套的for循环进行实现:
def permutation_with_replacement(arr, length):
if length == 0:
return [[]]
res = []
for ele in arr:
for perm in permutation_with_replacement(arr, length - 1):
res.append([ele] + perm)
return res
无放回排列实现代码如下:
def permutation_without_replacement(arr, length):
if length == 0:
return [[]]
res = []
for i, ele in enumerate(arr):
for perm in permutation_without_replacement(arr[:i] + arr[i + 1:], length - 1):
res.append([ele] + perm)
return res
1.3 示例
假设有3个元素:A、B、C,需要从中取出2个元素进行排列。那么无放回排列的结果为:
[
['A','B'],
['A','C'],
['B','A'],
['B','C'],
['C','A'],
['C','B']
]
2. 组合算法
2.1 概念
组合算法是指从n个不同的元素中取出m个元素,不考虑顺序,所有可能的取法情况就叫做组合数。
2.2 具体实现
组合算法的实现可以使用递归的方式实现:
def combination(arr, n):
if n == 0:
return [[]]
res = []
for i, ele in enumerate(arr):
for comb in combination(arr[i+1:], n - 1):
res.append([ele]+comb)
return res
2.3 示例
假设有3个元素:A、B、C,需要从中取出2个元素进行组合。那么组合的结果为:
[
['A','B'],
['A','C'],
['B','C']
]
以上就是排列算法与组合算法的详细介绍和示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:算法之排列算法与组合算法详解 - Python技术站