Python基于回溯法子集树模板解决数字组合问题实例


Posted in Python onSeptember 02, 2017

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

问题

找出从自然数1、2、3、...、n中任取r个数的所有组合。

例如,n=5,r=3的所有组合为:

1,2,3
1,2,4
1,2,5
1,3,4
1,3,5
1,4,5
2,3,4
2,3,5
2,4,5
3,4,5

分析

换个角度,r=3的所有组合,相当于元素个数为3的所有子集。因此,在遍历子集树的时候,对元素个数不为3的子树剪枝即可。

注意,这里不妨使用固定长度的解。

直接套用子集树模板。

代码

'''数字组合问题'''
n = 5
r = 3
a = [1,2,3,4,5] # 五个数字
x = [0]*n # 一个解(n元0,1数组) 固定长度
X = []  # 一组解
def conflict(k):
  global n, r, x
  if sum(x[:k+1]) > r: # 部分解的长度超出r
    return True
  if sum(x[:k+1]) + (n-k-1) < r: # 部分解的长度加上剩下长度不够r
    return True
  return False # 无冲突
# 套用子集树模板
def comb(k): # 到达第k个元素
  global n, x, X
  if k >= n: # 超出最尾的元素
    #print(x)
    X.append(x[:]) # 保存(一个解)
  else:
    for i in [1, 0]: # 遍历元素 a[k] 的两种选择状态:1-选择,0-不选
      x[k] = i
      if not conflict(k): # 剪枝
        comb(k+1)
# 根据一个解x,构造对应的一个组合
def get_a_comb(x):
  global a
  return [y[0] for y in filter(lambda s:s[1]==1, zip(a, x))]
# 根据一组解X,构造对应的一组组合
def get_all_combs(X):
  return [get_a_comb(x) for x in X]
# 测试
comb(0)
print(X)
print(get_all_combs(X))

效果图

Python基于回溯法子集树模板解决数字组合问题实例

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

Python 相关文章推荐
Python中max函数用法实例分析
Jul 17 Python
python实现给微信公众号发送消息的方法
Jun 30 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
Feb 10 Python
Python应用领域和就业形势分析总结
May 14 Python
pandas的qcut()方法详解
Jul 06 Python
Python实现蒙特卡洛算法小实验过程详解
Jul 12 Python
python 用所有标点符号分隔句子的示例
Jul 15 Python
python修改FTP服务器上的文件名
Sep 11 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
Jul 14 Python
Python实现给PDF添加水印的方法
Jan 25 Python
python源文件的字符编码知识点详解
Mar 04 Python
Django与数据库交互的实现
Jun 03 Python
Python基于回溯法子集树模板解决0-1背包问题实例
Sep 02 #Python
基于python 字符编码的理解
Sep 02 #Python
Python实现的简单模板引擎功能示例
Sep 02 #Python
Python实现Logger打印功能的方法详解
Sep 01 #Python
Python数据分析之如何利用pandas查询数据示例代码
Sep 01 #Python
Python使用回溯法子集树模板解决迷宫问题示例
Sep 01 #Python
Python基于回溯法子集树模板实现8皇后问题
Sep 01 #Python
You might like
星际原理概述
2020/03/04 星际争霸
PHP合并两个数组的两种方式的异同
2012/09/14 PHP
php中的ini配置原理详解
2014/10/14 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
2014/11/17 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
2015/03/19 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
postman的安装与使用方法(模拟Get和Post请求)
2018/08/06 PHP
PHP基于cookie实现统计在线人数功能示例
2019/01/16 PHP
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
今天是星期几的4种JS代码写法
2013/09/17 Javascript
Javascript基础教程之for循环
2015/01/18 Javascript
javascript内置对象操作详解
2015/02/04 Javascript
IE6兼容透明背景图片及解决方案
2015/08/19 Javascript
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
2016/01/26 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
vue router 跳转时打开新页面的示例方法
2019/07/28 Javascript
vue移动端实现手机左右滑动入场动画
2020/06/17 Javascript
javascript实现点击星星小游戏
2019/12/24 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
小程序实现图片移动缩放效果
2020/05/26 Javascript
在Vue中使用mockjs代码实例
2020/11/25 Vue.js
使用url_helper简化Python中Django框架的url配置教程
2015/05/30 Python
python实现斐波那契数列的方法示例
2017/01/12 Python
tensorflow 重置/清除计算图的实现
2020/01/19 Python
Pycharm-community-2020.2.3 社区版安装教程图文详解
2020/12/08 Python
python线程优先级队列知识点总结
2021/02/28 Python
通过css3动画和opacity透明度实现呼吸灯效果
2019/08/09 HTML / CSS
LN-CC英国:伦敦时尚生活的缩影
2019/09/01 全球购物
经理管理专业毕业自荐书范文
2014/02/12 职场文书
汉语言文学职业规划
2014/02/14 职场文书
结婚周年感言
2014/02/24 职场文书
征婚广告词
2014/03/17 职场文书
2015年幼儿园大班工作总结
2015/04/25 职场文书
2015暑期社会实践调查报告
2015/07/14 职场文书
高中地理教学反思
2016/02/19 职场文书
聊聊pytorch测试的时候为何要加上model.eval()
2021/05/23 Python