人工智能—问题规约法(Reduction)[二]
来源:互联网 发布:acca伦敦大学硕士知乎 编辑:程序博客网 时间:2024/04/29 19:32
梵塔问题编程
求解梵塔问题的关键在于将n盘问题分解为一个1盘问题(本原问题)和两个(n-1)盘问题。然后再将(n-1)盘规约为一个1盘问题和两个(n-2)盘问题。以此类推,最终规约为1盘问题,即本原问题。我们可以用python实现 n 盘转移过程:
这里首先要对我的变量进行说明:
n:盘子个数
x,y,z:指针表示,这里用赋值为1,2,3
state[ ]:n个盘子所在指针的位置。其中列表中位置越靠前表明盘子越大。
若n =4,则初始状态为[1,1,1,1],目标是达到状态[3,3,3,3]
取n= 4,运行文尾代码:
结果如图:
附python代码:
# -*- coding:utf-8 -*-#返回要改变盘的状态的索引def getindexz(state,x): index = [] for i in range(len(state)-1,-1,-1): if state[i]==x: index.append(i) return index[0]def hanoi(n,x,y,z,state): #如果是一盘问题,直接对x位置的盘移动到z if n ==1: state[getindexz(state, x)]=z #打印盘子的状态 print x,'--->',z,state else: #两个n-1盘问题,规约 #x位置的n-1盘移动到y hanoi(n-1, x, z, y,state) state[getindexz(state, x)]=z print x,'--->',z,state #y位置的n-1盘移动到z hanoi(n-1, y, x, z,state) n = int(raw_input(u'请输入汉诺塔的层数:'))state =[1 for x in xrange(n)]hanoi(n,1,2,3,state)
梵塔问题编程
求解梵塔问题的关键在于将n盘问题分解为一个1盘问题(本原问题)和两个(n-1)盘问题。然后再将(n-1)盘规约为一个1盘问题和两个(n-2)盘问题。以此类推,最终规约为1盘问题,即本原问题。我们可以用python实现 n 盘转移过程:
这里首先要对我的变量进行说明:
n:盘子个数
x,y,z:指针表示,这里用赋值为1,2,3
state[ ]:n个盘子所在指针的位置。其中列表中位置越靠前表明盘子越大。
若n =4,则初始状态为[1,1,1,1],目标是达到状态[3,3,3,3]
取n= 4,运行文尾代码:
结果如图:
附python代码:
# -*- coding:utf-8 -*-#返回要改变盘的状态的索引def getindexz(state,x): index = [] for i in range(len(state)-1,-1,-1): if state[i]==x: index.append(i) return index[0]def hanoi(n,x,y,z,state): #如果是一盘问题,直接对x位置的盘移动到z if n ==1: state[getindexz(state, x)]=z #打印盘子的状态 print x,'--->',z,state else: #两个n-1盘问题,规约 #x位置的n-1盘移动到y hanoi(n-1, x, z, y,state) state[getindexz(state, x)]=z print x,'--->',z,state #y位置的n-1盘移动到z hanoi(n-1, y, x, z,state) n = int(raw_input(u'请输入汉诺塔的层数:'))state =[1 for x in xrange(n)]hanoi(n,1,2,3,state)
0 0
- 人工智能—问题规约法(Reduction)[二]
- 人工智能—问题规约法(Reduction)[一]
- parallel reduction 并行规约,unroll last warp 同步问题
- 规约算法-reduction
- CUDA中并行规约(Parallel Reduction)的优化
- CUDA中并行规约(Parallel Reduction)的优化
- CUDA中并行规约(Parallel Reduction)的优化
- (二)日志规约
- (二)索引规约
- 机器学习小组知识点26:数据预处理之数据规约(Data Reduction)
- 【Java开发手册之MySql规约(二)】索引规约
- 【Java开发手册之工程规约(二)】二方库规约
- 人工智能—状态空间法(state space)[二]
- 二、( 二) 日志规约
- Java开发代码规范之编程规约(二)——常量定义
- Java开发代码规范之异常日志(二)——日志规约
- CUDA性能调优(二)—并行规约及优化
- 五、(二)索引规约
- 标签传播算法(Label Propagation)及Python实现
- UVA 11039 Building designing
- 在ccs7下进行DM6467的开发(4):实用的代码分析与编写
- 2013年第四届蓝桥杯C/C++组真题补充训练(一,2017.3.4)未完待续
- 关于View和ViewGroup
- 人工智能—问题规约法(Reduction)[二]
- 隐藏android设置自带控件
- tempdb 诊断
- Java库中的具体集合
- 人工智能—问题规约法(Reduction)[一]
- js中DOMContentLoaded和load的区别
- ViewSwitcher类解析,可以用来在两个View中切换显示,并添加切换动画
- leetcode
- 二叉搜索树的基本操作