Python基于回溯法子集树模板解决选排问题示例


Posted in Python onSeptember 07, 2017

本文实例讲述了Python基于回溯法子集树模板解决选排问题。分享给大家供大家参考,具体如下:

问题

从n个元素中挑选m个元素进行排列,每个元素最多可重复r次。其中m∈[2,n],r∈[1,m]。

如:从4个元素中挑选3个元素进行排列,每个元素最多可重复r次。

分析

解x的长度是固定的,为m。

对于解x,先排第0个位置的元素x[0],再排第1个位置的元素x[1]。我们把后者看作是前者的一种状态,即x[1]是x[0]的一种状态!!

一般地,把x[k]看作x[k-1]的状态空间a中的一种状态,我们要做的就是遍历a[k-1]的所有状态。

那么,套用子集树模板即可。

代码

'''
选排问题
从n个元素中挑选m个元素进行排列,每个元素最多可重复r次。其中m∈[2,n],r∈[1,m]。
作者:hhh5460
时间:2017年6月2日 09时05分
声明:此算法版权归hhh5460所有
'''
n = 4
a = ['a','b','c','d']
m = 3  # 从4个中挑3个
r = 2  # 每个元素最多可重复2
x = [0]*m  # 一个解(m元0-1数组)
X = []   # 一组解
# 冲突检测
def conflict(k):
  global n, r, x, X, a
  # 部分解内的元素x[k]不能超过r
  if x[:k+1].count(x[k]) > r:
    return True
  return False # 无冲突
# 用子集树模板实现选排问题
def perm(k): # 到达第k个元素
  global n,m, a, x, X
  if k == m: # 超出最尾的元素
    print(x)
    #X.append(x[:]) # 保存(一个解)
  else:
    for i in a: # 遍历x[k-1]的状态空间a,其它的事情交给剪枝函数!
      x[k] = i
      if not conflict(k): # 剪枝
        perm(k+1)
# 测试
perm(0) # 从x[0]开始排列

效果图

 Python基于回溯法子集树模板解决选排问题示例

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python自动化测试之setUp与tearDown实例
Sep 28 Python
python各种语言间时间的转化实现代码
Mar 23 Python
python爬虫_自动获取seebug的poc实例
Aug 05 Python
Python元组拆包和具名元组解析实例详解
Mar 26 Python
Django中的Model操作表的实现
Jul 24 Python
django的csrf实现过程详解
Jul 26 Python
tensorflow实现训练变量checkpoint的保存与读取
Feb 10 Python
Python列表切片常用操作实例解析
Mar 10 Python
Python unittest框架操作实例解析
Apr 13 Python
Python timeit模块原理及使用方法
Oct 10 Python
使用Python提取文本中含有特定字符串的方法示例
Dec 09 Python
Pytest中skip和skipif的具体使用方法
Jun 30 Python
Python基于回溯法子集树模板解决全排列问题示例
Sep 07 #Python
python中利用await关键字如何等待Future对象完成详解
Sep 07 #Python
Python基于回溯法子集树模板解决m着色问题示例
Sep 07 #Python
python中利用Future对象异步返回结果示例代码
Sep 07 #Python
python中利用Future对象回调别的函数示例代码
Sep 07 #Python
Python标准库之itertools库的使用方法
Sep 07 #Python
在Python的一段程序中如何使用多次事件循环详解
Sep 07 #Python
You might like
codeigniter上传图片不能正确识别图片类型问题解决方法
2014/07/25 PHP
在Javascript里访问SharePoint列表数据的实现方法
2011/05/22 Javascript
showModalDialog在谷歌浏览器下会返回Null的解决方法
2013/11/27 Javascript
jquery选择器需要注意的问题
2014/11/26 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
使用jQuery实现Web页面换肤功能的要点解析
2016/05/12 Javascript
JSON中key动态设置及JSON.parse和JSON.stringify()的区别
2016/12/29 Javascript
es6的数字处理的方法(5个)
2017/03/16 Javascript
JS实现列表页面隔行变色效果
2017/03/25 Javascript
vuex学习之Actions的用法详解
2017/08/29 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
2019/09/02 Javascript
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
2020/02/14 Javascript
Element Backtop回到顶部的具体使用
2020/07/27 Javascript
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
2020/11/06 Javascript
[04:50]2019DOTA2高校联赛秋季赛四强集锦
2019/12/27 DOTA
Python多线程编程(七):使用Condition实现复杂同步
2015/04/05 Python
Python下线程之间的共享和释放示例
2015/05/04 Python
Python的条件语句与运算符优先级详解
2015/10/13 Python
使用Mixin设计模式进行Python编程的方法讲解
2016/06/21 Python
Python脚本实现12306火车票查询系统
2016/09/30 Python
Python  pip安装lxml出错的问题解决办法
2017/02/10 Python
python编写微信远程控制电脑的程序
2018/01/05 Python
Python获取系统所有进程PID及进程名称的方法示例
2018/05/24 Python
python文件拆分与重组实例
2018/12/10 Python
Python 数据可视化pyecharts的使用详解
2019/06/26 Python
python3获取当前目录的实现方法
2019/07/29 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
html5 拖拽上传图片实例演示
2013/04/01 HTML / CSS
详解使用双缓存解决Canvas clearRect引起的闪屏问题
2019/04/29 HTML / CSS
Cole Haan官方网站:美国时尚潮流品牌
2017/12/06 全球购物
俄罗斯最大的香水和化妆品网上商店:Randewoo
2020/11/05 全球购物
反四风对照检查材料
2014/09/22 职场文书
放弃继承权公证书
2015/01/23 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
OpenFeign实现远程调用
2022/08/14 Java/Android