python算法-排列组合
排列组合
一、递归
1、自己调用自己
2、找到一个退出的条件
二、全排列:针对给定的一组数据,给出包含所有数据的排列的组合
1:1
1,2:[[1,2],[2,1]]
1,2,3:【【1,2,3】,【1,3,2】,【2,1,3】,
【2,3,1】,【3,2,1】,【3,1,2】】
三、1,2,3 的全排列 --》[2,3]-》[2]
规律:以1开头的[2,3]的全排列 + 以2开头的[1,3]的全排列 + 以3开头的[1,2]的全排列
-》
以1开头的(以2开头的[3]的全排列+以3开头的[2]的全排列)的全排列 + 以2开头的(以1开头的[3]的全排列+以3开头的[1]的全排列)的全排列 + 以3开头的(以1开头的[2]的全排列+以2开头的[1]的全排列)的全排列
习题2:当只有一个数时,他的全排列的个数是几?
答案:1
[2] ->[[2]]
[2,3] -》[[2,3],[3,2]]
表示全排列的时候,我们习惯使用列表来表示
四、全排列算法:
求n个数的全排列:
1、遍历的抽取每一个数出来,求剩下n-1个数的全排列
2、针对n-1个数的全排列,抽取一个数出来,求剩下的n-2个数的全排列
3、循环上述的步骤,直到数字个数变成1,满足递归的退出条件。
4、把上面所有的全排列求和,则是最终的全排列。
算法实现:
# encoding=utf-8
def perm(listVar):
if len(listVar) == 1:
return [listVar]
retlist = []
for i in xrange(len(listVar)):
#得到一个新的列表,列表中去掉了i指向的元素
restList = listVar[:i] + listVar[i+1:]
#
#perm([2,3])-> [[2,3],[3,2]]
#1 加到 perm(2,3) 的结果中去
perResult = perm(restList)
for x in perResult:
#习题:此行代码是否可以这样写,为何?
# retlist.append(listVar[i]+x)
retlist.append(listVar[i:i+1]+x)
return retlist
if __name__ == '__main__':
print perm([1,2,3])
python算法-排列组合的更多相关文章
- python编写排列组合,密码生产功能
python编写排列组合 python在编写排列组合是会用到 itertools 模块 排列 import itertools mylist = list(itertools.permutation ...
- python 实现排列组合
1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍. 2.一个列表数据任意组合 2.1主要是利用自带的库 #_*_ coding:utf-8 _*_ #__author__ ...
- 【Python】排列组合itertools & 集合set
■itertools 利用python的itertools可以轻松地进行排列组合运算 itertools的方法基本上都返回迭代器 比如 •itertools.combinations('abcd',2 ...
- HDU5145:5145 ( NPY and girls ) (莫队算法+排列组合+逆元)
传送门 题意 给出n个数,m次访问,每次询问[L,R]的数有多少种排列 分析 \(n,m<=30000\),我们采用莫队算法,关键在于区间如何\(O(1)\)转移,由排列组合知识得到,如果加入一 ...
- python 编写排列组合
python在编写排列组合是会用到 itertools 模块 排列 import itertools mylist = list(itertools.permutations([)) # 全排列 p ...
- Python实现排列组合
# -*- coding: utf-8 -*-"""Created on Sat Jun 30 11:49:56 2018 @author: zhen"&quo ...
- python之排列组合测试
# test permutations and combinations import itertools as it for i in it.combinations('abcd',2): prin ...
- python解决排列组合
笛卡尔积:itertools.product(*iterables[, repeat]) import itertools for i in itertools.product('BCDEF', re ...
- [经典算法] 排列组合-N元素集合的M元素子集
题目说明: 假设有个集合拥有n个元素,任意的从集合中取出m个元素,则这m个元素所形成的可能子集有那些? 题目解析: 假设有5个元素的集合,取出3个元素的可能子集如下: {1 2 3}.{1 2 4 } ...
随机推荐
- guacamole 0.9.13安装与配置
以下命令很多都需要管理权限,建议使用管理员账号执行,遇到问题可以留言. Guacamole官网文档介绍翻译:http://www.cnblogs.com/ji-yun/p/5657709.html 1 ...
- [拾零]C语言的数组指针
为了强化记忆,从而写笔记保留. 数组指针,顾名思义,是在说一个指针,这个指针是指向数组的. 区别于指针数组 int* p[5] = NULL; //指针数组 基类型 int* int (*p)[5] ...
- SQL SERVER 2014 缺少Business Intelligence 解决办法
SQL SERVER 2014安装完所有的数据库工具后,缺少开发工具 Business Intelligence 之解决办法. https://msdn.microsoft.com/en-us/l ...
- [make error ]ubuntu显示不全
make时候,输出到文件里 make >&makelog 就会自动出现一个makelog 会慢一些,不要急.
- 宿主机Windows访问虚拟机Linux文件(二)
上一篇文章中详细讲述FTP服务(基于文件传输协议的服务),本文则介绍另一种能够实现此功能Telnet(Telecommunications network 远程登陆)服务.本文介绍的telnet我常用 ...
- 本号讯 | 微软和百度携手推进全球自动驾驶技术; 微软发布新一代可垂直可水平滚动的Arc鼠标
7 月 13 日,微软宣布了与宝马的最新合作进展,继语音助手 Cortana .云服务 Azure.Office 365 和微软 Exchange 安装在部分宝马车型后——Skype for Busi ...
- Protocol Buffer学习教程之语法手册(二)
1.说明 此向导介绍如何使用protocol buffer language创建一个自己的protocolbuffer文件,包括语法与如何通过“.proto”文件生成数据访问的类,此处只介绍proto ...
- 用NPOI操作EXCEL-锁定列CreateFreezePane()
public void ExportPermissionRoleData(string search, int roleStatus) { var workbook = new HSSFWorkboo ...
- Maven:项目结构
目录结构图: project |- src |- main //工程源代码目录 |- java //工程java源代 ...
- Unicode与ASCiI之间有什么区别?java当中的转义字符 Character类的使用 String类的使用
ASCII码 称为 美国标准信息交换码 (American standard code of Information Interchange) 其中一共有多少个码?2的7次幂 128个 Unicode ...