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实现的一个火车票转让信息采集器
Jul 09 Python
python 读写txt文件 json文件的实现方法
Oct 22 Python
python虚拟环境virtualenv的使用教程
Oct 20 Python
Python实现聊天机器人的示例代码
Jul 09 Python
解决Python print输出不换行没空格的问题
Nov 14 Python
Python 通过打码平台实现验证码的实现
May 13 Python
Django对models里的objects的使用详解
Aug 17 Python
Python csv文件的读写操作实例详解
Nov 19 Python
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
Nov 25 Python
Python综合应用名片管理系统案例详解
Jan 03 Python
python列表推导和生成器表达式知识点总结
Jan 10 Python
python re.match()用法相关示例
Jan 27 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
Discuz 5.0 中读取纯真IP数据库函数分析
2007/03/16 PHP
PHP分页详细讲解(有实例)
2013/10/30 PHP
php将一维数组转换为每3个连续值组成的二维数组
2016/05/06 PHP
PHP高精确度运算BC函数库实例详解
2017/08/15 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
2018/12/07 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
2020/05/02 PHP
jquery操作select option 的代码小结
2011/06/21 Javascript
如何使用Javascript获取距今n天前的日期
2013/07/08 Javascript
简单的JavaScript互斥锁分享
2014/02/02 Javascript
jQuery中inArray方法注意事项分析
2016/01/25 Javascript
简单的分页代码js实现
2016/05/17 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
2016/05/24 Javascript
AngularJS实现单一页面内设置跳转路由的方法
2017/06/28 Javascript
微信小程序中使用Async-await方法异步请求变为同步请求方法
2019/03/28 Javascript
详解Bootstrap 学习(一)入门
2019/04/12 Javascript
JS异步处理的进化史深入讲解
2019/08/25 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
JavaScript链式调用原理与实现方法详解
2020/05/16 Javascript
基于react项目打包css引用路径错误解决方案
2020/10/28 Javascript
Python Django使用forms来实现评论功能
2016/08/17 Python
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
Python爬虫框架Scrapy常用命令总结
2018/07/26 Python
Python集中化管理平台Ansible介绍与YAML简介
2019/06/12 Python
python isinstance函数用法详解
2020/02/13 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
2020/04/15 Python
香港No.1得奖零食网:香港零食大王
2016/07/22 全球购物
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
幼儿园小班教师随笔
2015/08/14 职场文书
2015年高三毕业班班主任工作总结
2015/10/22 职场文书
财务会计个人原因辞职信
2019/06/21 职场文书
创业不要错过,这4种餐饮新模式
2019/07/18 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js
Nginx部署vue项目和配置代理的问题解析
2021/08/04 Servers
Python进程间的通信之语法学习
2022/04/11 Python
vue封装数字翻牌器
2022/04/20 Vue.js
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL