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迭代器的使用方法实例
Nov 21 Python
Python中Collection的使用小技巧
Aug 18 Python
用PyQt进行Python图形界面的程序的开发的入门指引
Apr 14 Python
python 查找字符串是否存在实例详解
Jan 20 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
Apr 27 Python
对python sklearn one-hot编码详解
Jul 10 Python
Python基于递归算法求最小公倍数和最大公约数示例
Jul 27 Python
python爬取内容存入Excel实例
Feb 20 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
May 10 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
Feb 26 Python
Python Handler处理器和自定义Opener原理详解
Mar 05 Python
python使用gdal对shp读取,新建和更新的实例
Mar 10 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
简单的页面缓冲技术
2006/10/09 PHP
PHP+MySQL 手工注入语句大全 推荐
2009/10/30 PHP
php preg_replace替换实例讲解
2013/11/04 PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
2013/11/12 PHP
PHP实现仿Google分页效果的分页函数
2015/07/29 PHP
Zend Framework教程之Zend_Db_Table表关联实例详解
2016/03/23 PHP
javascript StringBuilder类实现
2008/12/22 Javascript
jQuery实现长文字部分显示代码
2013/05/13 Javascript
javascript垃圾收集机制与内存泄漏详细解析
2013/11/11 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
2015/07/27 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
2016/05/24 Javascript
浅谈jQuery hover(over, out)事件函数
2016/12/03 Javascript
js鼠标跟随运动效果
2017/03/11 Javascript
基于daterangepicker日历插件使用参数注意的问题
2017/08/10 Javascript
vue-router 实现导航守卫(路由卫士)的实例代码
2018/09/02 Javascript
详解vue项目中实现图片裁剪功能
2019/06/07 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
2020/06/05 Javascript
在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作
2020/08/10 Javascript
python正则表达式中的括号匹配问题
2014/12/14 Python
python 如何快速找出两个电子表中数据的差异
2017/05/26 Python
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
python实现WebSocket服务端过程解析
2019/10/18 Python
Python散点图与折线图绘制过程解析
2019/11/30 Python
解决使用python print打印函数返回值多一个None的问题
2020/04/09 Python
Django中template for如何使用方法
2021/01/31 Python
浅谈cookie和localStorage那些事
2019/08/27 HTML / CSS
“型”走纽约上东区:Sam Edelman
2017/04/02 全球购物
英国工具中心:UK Tool Centre
2017/07/10 全球购物
NYX Professional Makeup官方网站:专业彩妆和美容产品
2019/10/29 全球购物
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
校园歌手大赛策划书
2014/01/17 职场文书
初三政治教学反思
2014/01/30 职场文书
乡镇民主生活会发言材料
2014/10/20 职场文书
2016清明节森林防火广播稿
2015/12/17 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python