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 } ...
随机推荐
- 使用git和github管理项目代码
以前不知道使用代码管理工具,最后写的一些东西都没有了,由于硬盘坏了或者不小心格式化了之类的,后来使用了Git 和Github来托管自己的代码和读书笔记方便了不少,到哪里只要有网就可以把自己的东西拷贝下 ...
- python生成器简单代码了理解。
__author__ = 'ZHHT' #!/usr/bin/env python # -*- coding:utf-8 -*- #返回当前执行到的函数的返回值.并保持当前执行的状态.这时候先执行别的 ...
- 织梦channel标签中currentstyle不生效
文件:/include/taglib/channel.lib.php line约133行:if( ($row['id']==$typeid || ($topid==$row['id'] &&a ...
- MFC制作简单通讯录程序
学习c++和MFC一段时间了,苦于没有项目实战,所以自己写了一个简单的简单通讯录程序,以前用c#写简单很多,例程是这本书上的实例,我的第一个winform程序也是从这本书上学的,总结c#写的话更简单, ...
- 新手第一天学习 C#语言(进制互换)
说起来我们对一些陌生或者未知的东西有一些恐惧感,但是又有一些期待,虽然我不确定自己能不能学会这门语言,但是我会尽自己最大的努力学. 我们第一天学的的内容呢,对大多数的人都知道,计算机的语言是二进制,但 ...
- Vue风格指南总结及对应ESLint规则配置
全手打原创,转载请标明出处:https://www.cnblogs.com/dreamsqin/p/10906951.html,多谢,=.=~ 必要的:规避错误: 强烈推荐:改善可读性和开发体验: 推 ...
- Spring Mybatis PageHelper 设置使用
PageHelper是一个Mybatis的分页插件, 负责将已经写好的sql语句, 进行分页加工. 设置 现在使用的是PageHelper 5.0 版本 : 在build.gradle先引用jar包: ...
- Ubuntu下手动安装NextCloud
安装环境:阿里云VPS Ubuntu 16.04 一. 安装Apache2 sudo apt-get install apache2 安装完成后,浏览器访问http://your ip/,出现It ...
- unbuntu&vim&Kali的各种小知识
1. vmware workstation 15.0.0 2.ubuntu-18.10-desktop 使用网络地址转换 VMware workstation 1.ctrl+alt 返回 unbu ...
- c++ 读取文件 最后一行读取了两次
用ifstream的eof(),竟然读到文件最后了,判断eof还为false.网上查找资料后,终于解决这个问题. 参照文件:http://tuhao.blogbus.com/logs/21306687 ...