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 相关文章推荐
使用url_helper简化Python中Django框架的url配置教程
May 30 Python
Python中for循环和while循环的基本使用方法
Aug 21 Python
如何在Python函数执行前后增加额外的行为
Oct 20 Python
利用Pyhton中的requests包进行网页访问测试的方法
Dec 26 Python
python基于socket进行端口转发实现后门隐藏的示例
Jul 25 Python
学习和使用python的13个理由
Jul 30 Python
Pytorch之parameters的使用
Dec 31 Python
Python中if有多个条件处理方法
Feb 26 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
Apr 02 Python
pycharm 激活码及使用方式的详细教程
May 12 Python
python小程序之4名牌手洗牌发牌问题解析
May 15 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
Sep 21 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
帖几个PHP的无限分类实现想法~
2007/01/02 PHP
php a simple smtp class
2007/11/26 PHP
PHP ignore_user_abort函数详细介绍和使用实例
2014/07/15 PHP
深入理解PHP变量的值类型和引用类型
2015/10/21 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
用PHP写的一个冒泡排序法的函数简单实例
2016/05/26 PHP
jQuery之$(document).ready()使用介绍
2012/04/05 Javascript
JS返回上一页实例代码通过图片和按钮分别实现
2013/08/16 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
jQuery操作表格(table)的常用方法、技巧汇总
2014/04/12 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
2015/03/16 Javascript
浅谈JS函数定义方式的区别
2016/10/30 Javascript
JavaScript中Math对象的方法介绍
2017/01/05 Javascript
Ionic 2 实现列表滑动删除按钮的方法
2017/01/22 Javascript
解决Extjs下拉框不显示的问题
2017/06/21 Javascript
使用angular帮你实现拖拽的示例
2017/07/05 Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
2019/01/20 Javascript
node.js中module模块的功能理解与用法实例分析
2020/02/14 Javascript
vue 重塑数组之修改数组指定index的值操作
2020/08/09 Javascript
[01:05:12]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS CIS-GAME
2014/05/21 DOTA
Django+Ajax+jQuery实现网页动态更新的实例
2018/05/28 Python
python 获取图片分辨率的方法
2019/01/08 Python
在Pycharm中执行scrapy命令的方法
2019/01/16 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
2019/06/13 Python
django连接oracle时setting 配置方法
2019/08/29 Python
Python实现快速排序的方法详解
2019/10/25 Python
Django项目uwsgi+Nginx保姆级部署教程实现
2020/04/19 Python
python用TensorFlow做图像识别的实现
2020/04/21 Python
Python函数参数定义及传递方式解析
2020/06/10 Python
python,Java,JavaScript实现indexOf
2020/09/09 Python
老人祝寿主持词
2014/03/28 职场文书
学校春季防火方案
2014/06/08 职场文书
缓刑人员思想汇报500字
2014/09/12 职场文书
SqlServer 垂直分表(减少程序改动)
2021/04/16 SQL Server
实战Python爬虫爬取酷我音乐
2022/04/11 Python
Python 装饰器(decorator)常用的创建方式及解析
2022/04/24 Python