将要求解的较大规模的问题分割成k个更小规模的子问题把规模为n的问题进行分解产生k个子问题对这k个子问题分别求解如果子问题的规模仍然不够小则再划分为k个子问题如此递归的进行下去直到问题规模足够小很容易求出其解为止T(n4)T(n4)算法总体思想n2n2直接或间接地调用自身的算法称为递归算法用函数自身给出定义的函数称为递归函数由分治法产生的子问题往往是原问题的较小模式这就为使用递归技术提供了方便在这种
例如阶乘函数问题的解法是递归的 例如汉诺塔(Tower of Hanoi)问题基本思想: 将一个规模为N的问题分解为K个规模较小的子问题这些子问题相互独立且与原问题性质相同求出子问题的解就可得到原问题的解 分治法解题的一般步骤: (1)分解将要解决的问题划分成若干规模较小的同类问题 (2)求解当子问题划分得足够小时用较简单的方法解决 (3)合并按原问题的要求
T(n2)算法总体思想n2n2将求出的小规模的问题的解合并为一个更大规模的问题的解自底向上逐步求出原来问题的解T(n4)T(n4)=T(n4)T(n4) 递归的概念递归方程本例中的Ackerman函数却无法找到非递归的定义在问题规模较大时较难找到一般的方法因此我们尝试用递归技术来解决这个问题缺点:递归算法的运行效率较低无论是耗费的计算时间还是占用的存储空间都比非递归算法要多分治法的适用条件人们从
简单地说递归就是用自己来定义自己一般地说一个递归过程P可以表示为基语句S(不含P)和P自身的组合β:P ? β(S P)这样的表示包含了过程不终止的可能因此递归算法应更准确地表述为Hanoi塔问题(3)最后将C上的n–1个盘移至B 常见的递归形式例如ρ(6) = 11 即整数6的划分数为11种: 6 51 42 411 33 321 3111 222 2211 21
#
算法设计与分析 Design and Analysis ofputer Algorithm第四章 贪心算法算法设计与分析 > 算法概述4)算法的正确性证明令 N:问题的规模 I:输入数据 A:算法本身 则算法的复杂性 C=F (NIA)最好情况:Tmin(N) = T(NI) = =
单击此处编辑母版标题样式单击此处编辑母版文本样式第二级第三级第四级第五级第2章 递归与分治策略 学习要点:理解递归的概念掌握设计有效算法的分治策略通过下面的范例学习分治策略设计技巧(1)二分搜索技术 (2)大整数乘法(3)Strassen矩阵乘法(4)棋盘覆盖(5)合并排序和快速排序(6)线性时间选择(7)最接近点对问题(8)循环赛日程表将要求解的较大规模的问题分割成k个更小规模的子问题
单击以编辑母版标题样式单击以编辑母版文本样式第二级第三级第四级第五级 第三讲 分治法及递归算法设计与分析§1 分治法与递归算法 设:被求解问题的输入规模为n 步骤2:逐步合并子问题的解直到获得原问题的解 步骤1:把问题分解为k 个性质相同但规模 较小的子问题(1 ? k ? n)并求解这些子问题 (如果这些子问题的规模还不
T(n4)T(n4)将求出的小规模的问题的解合并为一个更大规模的问题的解自底向上逐步求出原来问题的解T(n4)T(n4) 算法总体思想n2n2直接或间接地调用自身的算法称为递归算法用函数自身给出定义的函数称为递归函数由分治法产生的子问题往往是原问题的较小模式这就为使用递归技术提供了方便在这种情况下反复应用分治手段可以使子问题与原问题类型一致而其规模却不断缩小最终使子问题缩小到很容易直接求出其解这自
递归与分治:姜韶增 :0212747导师:魏宗寿递归算法的特点 递归算法是一种直接或者间接地调用自身的算法。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数称为递归函数。递归阶乘函数阶乘函数可递归地定义为:递归方程边界条件边界条件与递归方程是递归函数的二个要素,递归函数只有具备了
违法有害信息,请在下方选择原因提交举报