汉诺塔问题的算法分析及C语言实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4 结束语
其实,递归算法的执行过程分为 递推和回归两个阶段。在递推阶段,把 较为复杂的问题(如规模为 N)的求 解推到比原问题简单一些的问题 (规 模小于 N)的求解。例如上面分析过程
中,为求解 han (int n,char one,char two ,char three),推到计算 han(int n-1,char two,char one,char three)。
最后,通过经典“汉诺塔”问题移 动过程的分析、解决以及最后 C 语言 编程的实现,从而掌握了解决此类问 题的方法,对递归算法也有了更加深 刻的理解。
参考文献
[1] 王春森. 程序员教程. 北京:清华大学 出版社,2001-05.
[2] Lesley A R. 程序设计基础. 北京:高 等教育出版社,2003.
gh the realization, the learners could clearly address the issue of observing the entire process. Keyword: Hanoi Algorithm Recursive
1 问题描述
问题提出: 有三个塔(分别为 A 号,B 号和 C 号)。开始时,有 n 个圆形盘以从下到 上、从大到小的次序叠置在 A 塔上。现 要将 A 塔上的所有圆形盘,借助 B 塔,全部移动到 C 塔上,且仍按照原来 的次序叠置。移动的规则如下:这些圆 形盘只能在 3 个塔间进行移动,一次 只能移动一个盘子,且任何时候都不 允许将较大的盘子压在比它小的盘子 的上面。要求如下:从键盘输入初始圆 形盘子个数 n,用 C 语言实现 n 个盘 子最佳移动的全过程。
2 算法分析
此题的目的是设计一个盘子移动 的方案,使得 A 号塔上的所有盘子借 助于 B 号塔按照原来的次序移动到 C 号塔上,并且,要给出完整的最佳的盘 子移动的方案。
从实际的、具体的盘子的移动过 程来分析,找出问题内在的规律。经分 析,无论盘子的个数有多少,是 1、2、3 ……或 n 个,也不管怎么去移动盘子 (当然是按规则来移动),但在移动的 过程中,将始终会出现这样的状态情 况:(n-1)个盘子将会以从下到上、从 大到小的次序叠置在 B 塔上,这时,A 塔上第 n 个盘子就能被轻而易举地叠
200 9 年 10 月
电脑学习
第5期
汉诺塔问题的算法分析及 C 语言实现
周 敏*
摘 要 : 本文对经典的汉诺塔问题进行了详细的分析,给出了实现的算法,并用 C 语言实现。通过该问题的 C 语言实现,可使 学习者清晰地观测到解决该问题的全过程。
关 键 词 : 汉诺塔 算法 递归 中图分类号: TP311 文献标识码: A 文章编号:1002-2422(2009)05-0138-02
第二步:将剩下的第 N 个盘子 (也就是最底下的一个) 直接从 A 塔 叠放到空着的 C 塔上。
第三步:用第一步的方法,再次将 B 塔上的所有盘子叠放到 C 塔上。同 样,这一步实际上也是由一系列更小 的符合规则的移动盘子的操作组成 的 。 用 han (int n -1,char two,char one,char three)调用递归方法,注意: 这里是借助于 A 塔,将(N-1)个盘子 从 B 塔移动到 C 塔,B 是源塔,C 是目 标塔。
关 键 词 : 数据挖掘 关联规则 Apriori 算法 位图 中图分类号: TP311 文献标识码: A 文章编号:1002-2422(2009)05-0139-03
Discussion on Advanced Apriori Algorithm
Wang Xiao Zhao Jun Abstract: the paper introduces the basic concept of mining association rules, analyzes the classical Apriori algorithm and raises
现在,严格按照递归算法来解决
问题。先定义递归方法 han (int n, char one,char two ,char three),按如 下步骤进行解题 (设初始盘子个数为 N):若 A 塔上仅仅只有一个盘子(N= 1),则直接从 A 移动到 C,问题完全解 决。若 A 塔上有一个以上的盘子(N> 1),则需要考虑以下三个步骤。
收稿日期:2009-06-08 *王晓 张家口教育学院计算机系助教(河北张家口 075061)。
· 139 ·
Байду номын сангаас
3 算法实现
依据上述分析可知,汉诺塔问题 符合实现递归的条件,而 C 语言又可 解决递归问题,据此,用 C 语言来实现 对汉诺塔问题的求解,用 han 函数来 实现原问题转化为新问题的操作 (问 题分析的一、三步),用 move 函数实 现递归边界的操作 (问题分析的第二 步),用 main 主函数提出问题,确定需 移动盘子的数目,现编写程序如下: void move(char x,char y) /觹 将一个盘子从 x 移动到 y觹/ 邀 printf(″%c--> %c/ n″,x,y); 妖 void han (int n,char one,char two ,char three) /觹 将 n 个盘子 从 one 借 助 于 tow 移 动 到 three觹/ 邀
这 个 算 法 达 到 了 预 期 的 目 标 ,即
收稿日期:2009-09-01 *周敏 黑龙江农业经济职业学院信息工程系讲师(157041)。
· 138 ·
200 9 年 10 月
电脑学习
第5期
浅论 Apriori 算法的改进
王 晓* 赵 军
摘 要 : 本文介绍了关联规则挖掘的基本概念,分析了经典的 Apriori 算法,提出一种改进的关联规则挖掘算法,解决了挖掘课 程相关性关联规则的问题。改进算法的基本思想:① 采用位图数据格式;② 系统中会永久保留支持度为 0 的候选 1 项集和候选 2 项集,当系统需要运行时,首先采用数据库的过滤技术,可以很快得到频繁 2 项集。突破了这一瓶颈,系 统运行速度将得到较大的提升。将该算法应用于课程相关性分析,实验结果表明改进的算法性能优于 Apriori 算法。
Hanoi Problem Analysis and Algorithm Realization of C Language
Zhou Min Abstract: The paper in detail analyzes the classic Hanoi problem, and gives out the realization algorithm in C language. Throu-
第一步:把(N-1)个盘子从 A 塔 经过移动,叠放到 B 塔上。在不违反规 则情况下,所有(N-1)个盘子不能作 为一个整体一起移动,而是要符合要 求地从一个塔移到另一个塔上。用 han (int n -1,char one,char two ,char three)调用递归方法,注意:这里是借 助于 C 塔,将(N-1)个盘子从 A 塔移 动到 B 塔,A 是源塔,B 是目标塔。
放到 C 塔上;接着,再把 B 塔上的共 (n-1)个盘子移动到 C 塔上,问题好 像已经解决。
但,B 塔上(n-1)个盘子怎么移 动到 C 塔上呢 芽 这是要解决的第二个 问题。同样,不管我们怎么移动,也将 会出现这样的状态情况:(n-2) 个盘 子将会以从上到下、从大到小的次序 叠置在 A 塔上,这时,B 塔上第 (n- 1) 个盘子就能被轻而易举放到 C 塔 上;接着,把 A 塔上的共(n-2)个盘子 移动到 C 塔上。
if (n==1) move(one,three); else 邀 han(n21,one,three,two); move(one,three); han(n21,two,one,three); 妖 妖 main() 邀 int n; printf (″ Please enter the number of diskes:″) ; scanf(″%d″,&n); printf(″The step to moving %d diskes:/n″, n); han(n,'A','B','C'); 妖
这 样 ,不 断 深 入 ,不 断 细 小 化 ,最 终 ,将 到 达 仅 有 一 个 盘 的 情 形 ,这 时 , 递归也就终止了,问题也得到了解决。 通过以上分析,这里有很明显的递归 关系。
由此,想到了采用递归算法来解 决该问题,因为递归算法有这样的特 征描述:为了求解出规模为 N 的问题 的解,先设法将它分解成一些规模较 小的问题,然后从这些较小问题的解 能方便地构造出大问题的解,并且这 些规模较小的问题也能采用同样的方 法分解,分解成规模更小的问题,并能 从这些更小的问题的解构造出规模稍 大问题的解。特别地是,当规模 N=1 时,能直接得到解。
在回归阶段,当获得最简单情况 的解后,逐级返回,依次获得稍复杂问 题的解。在这里的“汉诺塔”问题中, 有特别的地方,回归的过程当中,还要 涉及到递推。另外,在编写递归方法时 要注意的是:每次调用递归方法,方法 中的参数只是局限于当前调用层的, 当递推进入“简单问题”层时,原来层 次上的参数便被隐藏起来。在一系列 “简单问题”层,都各有自己的参数。
an advanced mining association rules algorithm which solves the problem of mining data. The main idea is① it uses bitmap; ② The candidate 1-itemsets and candidate 2-itemsets whose support degree is 0 can be kept in the system permanently. When the system is running, the paper firstly adopts the database filter technique, which can get the f- requent 2-itemsets quickly. With the breaking of this bottleneck, the system running speed can be raised largely. Th- rough the reasearch, The results show that the improved algorithm is much more efficient than the Apriori algorithm. Keyword: Data Ming Association Rules Apriori Algorithm Bitmap
......................................................................................................................................
在 C 塔上按正确的次序叠放了所有的 圆形盘子。有了前面问题算法分析的 基础,继而,就可以用 C 语言来实现算 法。
相关文档
最新文档