递归研究(二) 全排列问题
2015-03-09 22:58
176 查看
Permutation
从n个不同的元素中任取m(m <= n)个, 按照一定的顺序排列起来, 叫做从n个元素中取出m个元素的一个排列, 当m=n时,所有的排列情况叫做全排列.递归求全排列思路
若求n个元素的全排列, 可以先求n-1个元素的全排列, 然后针对n-1个全排列的每一种情况T, 把第n个元素依次插入到T的n个间隔中.n=1时,为递归的终结条件.
代码
def permutation(L): length = len(L) #终结条件 if length == 1: return [[L[0]]] else: LL = [] #求前n-1个的全排列 n1_permutation = permutation(L[0:-1]) last = L[-1] #遍历前n-1个全排列 for T in n1_permutation: for i in range(length): temp = T[::] #把第n个元素依次插入到T的n个间隔中 temp.insert(i, last) LL.append(temp) return LL
测试
def main(): L = ['A', 'B', 'C', 'D'] LL = permutation(L) for i in range(len(LL)): print LL[i] if __name__ == '__main__': main()
输出结果
['D', 'C', 'B', 'A'] ['C', 'D', 'B', 'A'] ['C', 'B', 'D', 'A'] ['C', 'B', 'A', 'D'] ['D', 'B', 'C', 'A'] ['B', 'D', 'C', 'A'] ['B', 'C', 'D', 'A'] ['B', 'C', 'A', 'D'] ['D', 'B', 'A', 'C'] ['B', 'D', 'A', 'C'] ['B', 'A', 'D', 'C'] ['B', 'A', 'C', 'D'] ['D', 'C', 'A', 'B'] ['C', 'D', 'A', 'B'] ['C', 'A', 'D', 'B'] ['C', 'A', 'B', 'D'] ['D', 'A', 'C', 'B'] ['A', 'D', 'C', 'B'] ['A', 'C', 'D', 'B'] ['A', 'C', 'B', 'D'] ['D', 'A', 'B', 'C'] ['A', 'D', 'B', 'C'] ['A', 'B', 'D', 'C'] ['A', 'B', 'C', 'D']
相关文章推荐
- 全排列问题之递归求解
- 递归 全排列 问题
- 递归与分治之全排列问题和火车进站问题
- 利用Python的内嵌函数和递归研究汉诺塔问题
- C++ 输出全排列 简单递归 N皇后问题
- 全排列问题之递归求解
- 递归问题——以全排列、青蛙过河问题为例
- 集合的全排列问题-递归实现方法
- Java语言描述:递归与分治策略之全排列问题
- Java递归解决全排列问题
- 《算法之美》の递归与分治策略の全排列问题
- java使用递归解决全排列问题
- 由erlang的递归理解数组的全排列问题
- 递归和分治思想解全排列问题
- 考题一:研究对全排列着色的性质 问题 A: 首先需要生成 n 的全排列然后对 n 的全排列进行着色, 使得相邻的两个数只需用最少颜色就可以把相邻的两个数用那区分开. (这里相邻包含两层含义:同时在自然
- c++ 递归问题 研究
- 递归解决全排列问题
- 递归程序与全排列问题
- 利用递归解决全排列问题
- 字符串全排列问题(递归解决有重复字符问题)