汉诺塔算法的分析与设计

汉诺塔算法的分析与设计摘要:为了提升学生的编程能力,从解决计算机科学和应用中经典的汉诺塔问题入手,分析了分治算法与递归算法的关系,分别给出了分治算法、递归算法的设计步骤,给出了分治法的时间复杂度计算公式和求解方法。深入分析了汉诺塔问题的简化过程、分解步骤,设计了汉诺塔算法,给出了完成汉诺塔搬迁需要移动盘子次数的计算公式和求解方法。使学生能够把所学的方法用于解决具体问题,并对算法进行比较分析,从而将理论和实际应用切实结合起来。关键词:汉诺塔;时间复杂度;递归方法;分治算法中图分类号:TP302文献标志码:A文章编号:1006-8228(2015)08-49-03AnalysisanddesignofHanoitoweralgorithmMaJianzhe(SchoolofInformationEngineering,TaiyuanUniversityofTechnology,Taiyuan,Shanxi030024,China)Abstract:Inordertoimprovethestudents1abilityofprogramming,startingwiththeclassicHanoitowerproblemincomputerscienceandapplication,thispaperanalyzestherelationshipbetweenthedivide-and-conqueralgorithmandtherecursivealgorithm,givesthedesignstepsofthedivide-and-conqueralgorithmandtherecursivealgorithmrespectively,givesthecalculationformulaandthesolvingmethodofthetimecomplexityforthedivide-and-conqueralgorithm,deeplyanalyzesthesimplificationprocessandthedecompositionstepsofHanoitowerproblem,designsthealgorithmforHanoitowerproblem,andgivesthecalculationformulaandthesolvingmethodtoworkoutthenumberofmovementsrequiredtocompleterelocationofHanoitower.Studentcanusethemethodlearnttosolvethespecificproblems,therebycombinetheorywithpracticalapplication.Keywords:Hanoitower;timecomplexity;recursivemethod;divide-and-conqueralgorithm0引言任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题规模越小,解题所需的计算时间往往也越少,计算也越容易。要解决一个较大的问题,有时是相当困难的。分治策略是应用最多的一种有效方法,它的基本思想是将问题分解成若干个子问题,然后求解子问题。子问题较原问题无疑是会容易些,由此得出原问题的解,就是所谓的“分而治之”的意思。分治策略还可以递归,即子问题仍然可以用分治策略来处理,最后的问题非常基本而且简单[1-2]。分治的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。找出各部分的解,然后把各部分的解组合成整个问题的解。实现算法的同时,需要估计算法所需时间。分治算法在每一层递归上分为三个步骤。⑴分:将原问题分解成一系列子问题。⑵治:递归地解各子问题,若子问题足够小,则直接解之。⑶合:将子问题的结果合并成原问题的解。分治算法的时间由解决各个子问题所需的时间(由子问题的个数、解决每个子问题的时间决定)确定。由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。这自然导致递归过程的产生。分治与递归像一对孪生兄弟,经常同时应用在算法设计之中,并由此产生许多高效算法。在C语言中,重复性操作可以通过循环结构或者递归结构完成。递归结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很大方便[3-5]。从递归算法的结构来分析,设计递归算法时,无非要解决两个问题:递归出口和递归体。即要确定何时到达递归出口,何时执行递归体,执行什么样的递归体。递归算法设计的关键是保存每一层的局部变量并运用这些局部变量。由此,递归算法的设计步骤可从以下三步来进行:(1)分析问题,分解出小问题;⑵找出小问题与大问题之间的关系,确定递归出(3)写出算法。评定算法优劣的标准要看它的时间复杂性、空间复杂性和人工复杂性,其中时间复杂性最为重要,通常是用时间复杂性来衡量某个算法的“好”或“坏”。不同的算法具有不同的时间复杂性函数...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

确认删除?