python 回溯法 子集树模板 系列 —— 12、选排问题

简介:

问题

从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]开始排列

效果图

709432-20170602090118227-859011361.jpg

本文转自罗兵博客园博客,原文链接:http://www.cnblogs.com/hhh5460/p/6931710.html ,如需转载请自行联系原作者

相关文章
|
20天前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
|
3月前
|
SQL 前端开发 JavaScript
Python 教程之 Django(10)模板
Python 教程之 Django(10)模板
34 0
|
3月前
|
Python
Python 采集77个教学课件PPT模板
Python 采集77个教学课件PPT模板
27 0
|
3月前
|
大数据 Python
Python 采集87个手绘风格PPT模板
Python 采集87个手绘风格PPT模板
44 1
|
1月前
|
机器学习/深度学习 算法 数据挖掘
请解释Python中的决策树算法以及如何使用Sklearn库实现它。
决策树是监督学习算法,常用于分类和回归问题。Python的Sklearn库提供了决策树实现。以下是一步步创建决策树模型的简要步骤:导入所需库,加载数据集(如鸢尾花数据集),划分数据集为训练集和测试集,创建`DecisionTreeClassifier`,训练模型,预测测试集结果,最后通过`accuracy_score`评估模型性能。示例代码展示了这一过程。
|
1天前
|
机器学习/深度学习 算法 数据挖掘
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享-2
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享
19 1
|
6天前
|
机器学习/深度学习 存储 算法
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
26 7
|
6天前
|
机器学习/深度学习 数据可视化 算法
PYTHON用决策树分类预测糖尿病和可视化实例
PYTHON用决策树分类预测糖尿病和可视化实例
15 0
|
机器学习/深度学习 算法 Python
Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户
Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户
18 0
|
7天前
|
BI 开发者 数据格式
Python代码填充数据到word模板中
【4月更文挑战第16天】