python递归全排列实现方法


Posted in Python onAugust 18, 2018

本文实例为大家分享了python递归全排列的实现方法,供大家参考,具体内容如下

排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列;
全排列:当n==m时,称为全排列;

比如:集合{ 1,2,3}的全排列为:
{ 1 2 3}
{ 1 3 2 }
{ 2 1 3 }
{ 2 3 1 }
{ 3 2 1 }
{ 3 1 2 }

递归思想:

取出数组中第一个元素放到最后,即a[1]与a[n]交换,然后递归求a[n-1]的全排列

1)如果数组只有一个元素n=1,a={1} 则全排列就是{1}
2)如果数组有两个元素n=2,a={1,2} 则全排列是:
{2,1}--a[1]与a[2]交换。交换后求a[2-1]={2}的全排列,归结到1)
{1,2}--a[2]与a[2]交换。交换后求a[2-1]={1}的全排列,归结到1)
3)如果数组有三个元素n=3,a={1,2,3} 则全排列是
{{2,3},1}--a[1]与a[3]交换。后求a[3-1]={2,3}的全排列,归结到2)
{{1,3},2)--a[2]与a[3]交换。后求a[3-1]={1,3}的全排列,归结到2)
{{1,2},3)--a[3]与a[3]交换。后求a[3-1]={1,2}的全排列,归结到2)
...

依此类推。

利用python实现全排列的具体代码perm.py如下:

COUNT=0
def perm(n,begin,end):
  global COUNT
  if begin>=end:
    print n
    COUNT +=1
  else:
    i=begin
    for num in range(begin,end):
      n[num],n[i]=n[i],n[num]
      perm(n,begin+1,end)
      n[num],n[i]=n[i],n[num]
 
n=[1,2,3,4]
perm(n,0,len(n))
print COUNT

最后输出的结果如下:

======================== RESTART: D:/Python27/perm.py ========================
[1, 2, 3, 4]
[1, 2, 4, 3]
[1, 3, 2, 4]
[1, 3, 4, 2]
[1, 4, 3, 2]
[1, 4, 2, 3]
[2, 1, 3, 4]
[2, 1, 4, 3]
[2, 3, 1, 4]
[2, 3, 4, 1]
[2, 4, 3, 1]
[2, 4, 1, 3]
[3, 2, 1, 4]
[3, 2, 4, 1]
[3, 1, 2, 4]
[3, 1, 4, 2]
[3, 4, 1, 2]
[3, 4, 2, 1]
[4, 2, 3, 1]
[4, 2, 1, 3]
[4, 3, 2, 1]
[4, 3, 1, 2]
[4, 1, 3, 2]
[4, 1, 2, 3]
24
>>>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现的多线程端口扫描工具分享
Jan 21 Python
python字符串过滤性能比较5种方法
Jun 22 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
Jun 14 Python
Python实现数据结构线性链表(单链表)算法示例
May 04 Python
Python整数对象实现原理详解
Jul 01 Python
django框架模型层功能、组成与用法分析
Jul 30 Python
django 中使用DateTime常用的时间查询方式
Dec 03 Python
python实现加密的方式总结
Jan 19 Python
解决numpy矩阵相减出现的负值自动转正值的问题
Jun 03 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
Aug 07 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
Nov 30 Python
pycharm + django跨域无提示的解决方法
Dec 06 Python
python使用PIL给图片添加文字生成海报示例
Aug 17 #Python
Python在for循环中更改list值的方法【推荐】
Aug 17 #Python
Python简单读写Xls格式文档的方法示例
Aug 17 #Python
Python实现的连接mssql数据库操作示例
Aug 17 #Python
Python SQL查询并生成json文件操作示例
Aug 17 #Python
python3 flask实现文件上传功能
Mar 20 #Python
Python爬取qq空间说说的实例代码
Aug 17 #Python
You might like
Syphon 使用方法
2021/03/03 冲泡冲煮
基于PHP的cURL快速入门教程 (小偷采集程序)
2011/06/02 PHP
smarty获得当前url的方法分享
2014/02/14 PHP
PHP实现的进度条效果详解
2016/05/03 PHP
PHP检查URL包含特定字符串实例方法
2019/02/11 PHP
php简单检测404页面的方法示例
2019/08/23 PHP
javascript 利用Image对象实现的埋点(某处的点击数)统计
2012/12/28 Javascript
JS正则表达式验证数字代码
2014/01/28 Javascript
解决html按钮切换绑定不同函数后点击时执行多次函数问题
2014/05/14 Javascript
jQuery UI插件自定义confirm确认框的方法
2015/03/20 Javascript
使用jquery实现仿百度自动补全特效
2015/07/23 Javascript
JS常见问题之为什么点击弹出的i总是最后一个
2016/01/05 Javascript
基于jquery实现表格无刷新分页
2016/01/07 Javascript
JavaScript实现瀑布流布局
2020/06/28 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
2016/05/19 Javascript
JS正则表达式验证密码格式的集中情况总结
2017/02/23 Javascript
Nodejs中使用captchapng模块生成图片验证码
2017/05/18 NodeJs
JavaScript用二分法查找数据的实例代码
2017/06/17 Javascript
微信小程序模板和模块化用法实例分析
2017/11/28 Javascript
详解webpack4.x之搭建前端开发环境
2019/03/28 Javascript
nodejs脚本centos开机启动实操方法
2020/03/04 NodeJs
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
2020/05/23 Javascript
在vue中使用jsonp进行跨域请求接口操作
2020/10/29 Javascript
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
Python实现快速排序算法及去重的快速排序的简单示例
2016/06/26 Python
linux安装python修改默认python版本方法
2019/03/31 Python
Python3网络爬虫中的requests高级用法详解
2019/06/18 Python
Python math库 ln(x)运算的实现及原理
2019/07/17 Python
Django REST framework内置路由用法
2019/07/26 Python
keras中的History对象用法
2020/06/19 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
建筑毕业生自我鉴定
2013/10/18 职场文书
运动会广播稿200字(10篇)
2014/10/12 职场文书
2016年少先队活动总结
2016/04/06 职场文书