013迭代法求解递推方程
迭代法

迭代法迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。
迭代是数值分析中通过从一个初始估计出发寻找一系列近似解来解决问题(一般是解方程或者方程组)的过程,为实现这一过程所使用的方法统称为迭代法(Iterative Method)。
一般可以做如下定义:对于给定的线性方程组x=Bx+f(这里的x、B、f同为矩阵,任意线性方程组都可以变换成此形式),用公式x(k+1)=Bx(k)+f(括号中为上标,代表迭代k次得到的x,初始时k=0)逐步带入求近似解的方法称为迭代法(或称一阶定常迭代法)。
如果k 趋向无穷大时lim x(k)存在,记为x*,称此迭代法收敛。
显然x*就是此方程组的解,否则称为迭代法发散。
跟迭代法相对应的是直接法(或者称为一次解法),即一次性的快速解决问题,例如通过开方解决方程x+3= 4。
一般如果可能,直接解法总是优先考虑的。
但当遇到复杂问题时,特别是在未知量很多,方程为非线性时,我们无法找到直接解法(例如五次以及更高次的代数方程没有解析解,参见阿贝耳定理),这时候或许可以通过迭代法寻求方程(组)的近似解。
最常见的迭代法是牛顿法。
其他还包括最速下降法、共轭迭代法、变尺度迭代法、最小二乘法、线性规划、非线性规划、单纯型法、惩罚函数法、斜率投影法、遗传算法、模拟退火等等。
利用迭代算法解决问题,需要做好以下三个方面的工作:折叠确定迭代变量在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
折叠建立迭代关系式所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。
迭代关系式的建立是解决迭代问题的关键,通常可以顺推或倒推的方法来完成。
折叠对迭代过程进行控制在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。
不能让迭代过程无休止地重复执行下去。
迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。
迭代法解方程

迭代法解方程•迭代法如果方程的形式可以化简成 x = f(x) ,其中f(x)是一个比较简单明了的函数例如ln(x)+1。
其相对图形如右图所示,这样我们可以先假设一个x值,将该x代入f(x)中,这样可以计算出一个新的x,重复以上步骤,直到达到一个稳定的x,即相邻两次的x值相差不大。
迭代法有可能出现振动发散的情况,因此如果循环超过一定次数应该退出循环,重新选取初始值。
此外迭代法通常只能解出一到两个方程的实数根。
•二分法如果方程的形式可以化简成 f(x)=0 ,那么我们设法得到一个x1使f(x1)大于零,再设法得到一个x2使f(x2)小于零,那么如果f(x)在x1到x2之间是连续的化,则必然有一个点x0使f(x0)=0。
于是我们计算x1和x2的中点x3,如果f(x3)大于零则说明x0在x3和x2之间否则x0在x1和x3之间,如此循环下去直到得出一个符合要求的根。
如右图所示。
二分法如果可以开始则一定有解,不会出现无解的情况。
当然二分发仍然可能遗漏一些解。
rootx=f_solve(x1,x2)例程数据类型:x1,x2和函数的返回值均为双精度类型参数说明:x1,x2为试探用的x值,要求其相应的y(x1)和y(x2)必需一正一负返 回 值:该函数返回在x1,x2区间中的一个解,如果无解或者输入参数有问题则返回-9999999.99999E-999其他要求:该函数将调用f_y(x)函数,必需有相应函数VERSION 5.00Begin VB.Form Form1Caption = "Form1"ClientHeight = 5700ClientLeft = 60ClientTop = 345ClientWidth = 7230LinkTopic = "Form1"ScaleHeight = 5700ScaleWidth = 7230StartUpPosition = 3 'Windows DefaultBegin VB.PictureBox Picture1Height = 4935Left = 120ScaleHeight = 4875ScaleWidth = 6915TabIndex = 1Top = 720Width = 6975EndBegin mandButton Command1Caption = "Command1"Height = 495Left = 120TabIndex = 0Top = 120Width = 3015EndEndAttribute VB_Name = "Form1"Attribute VB_GlobalNameSpace = FalseAttribute VB_Creatable = FalseAttribute VB_PredeclaredId = TrueAttribute VB_Exposed = FalseOption ExplicitSub draw_pic(ByVal x_min As Double, ByVal x_max As Double, ByVal y_min As Double, ByVal y_max AsDouble)Dim x, i, y As DoublePicture1.Scale (x_min, y_max)-(x_max, y_min)Picture1.Line (0, y_min)-(0, y_max)Picture1.Line (x_min, 0)-(x_max, 0)For x = x_min To x_max Step 0.01y = f_y(x)If y < y_min Then y = y_minIf y > y_max Then y = y_maxPicture1.PSet (x, y), RGB(255, 0, 0)NextEnd SubFunction f_y(ByVal x As Double) As Double ‘定义方程f_y = x + 2 * x ^ 2 - 4 * x ^ 3 + x ^ 4End FunctionFunction f_solve(ByVal x1 As Double, ByVal x2 As Double) As Double ‘定义解及过程 ??ByVal?? Dim x3 As DoubleDim y1 As DoubleDim y2 As DoubleDim y3 As DoubleDim y0 As DoubleDim dx0 As DoubleDim n As Longy1 = f_y(x1) 'x1,x2初始值是多少????? 代入方程,获得第一个试探解的函数值y2 = f_y(x2) '获得第二个试探解的函数值If y1 * y2 > 0 Then '如果两个试探解对应的函数值不是一正一负,则返回错误值f_solve = 9.999E-99MsgBox ("试探解不合适" + Str(y1) + " " + Str(y2))Exit FunctionEnd Ify0 = Abs(y1) + Abs(y2) '获得最初的y的绝对数量级,未来退出循环时需要判断其相对大小If y0 > 1 Then y0 = 1dx0 = Abs(x1 - x2) '初始试探x之间的差距n = 0 '循环计数器Don = n + 1x3 = (x1 + x2) / 2y3 = f_y(x3)If y1 * y3 > 0 Then '新的试探解和y1同号,则用新试探解替代x1x1 = x3ElseIf y2 * y3 > 0 Then '新的试探解和y2同号,则用新试探解替代x2x2 = x3ElseIf y3 = 0 Then '恰好找到了解'注意此处虽然什么也不作,但是不可以删除Elsef_solve = 9.999E-99 '出现了错误Exit FunctionEnd Ify1 = f_y(x1) '获得第一个试探解的函数值y2 = f_y(x2) '获得第二个试探解的函数值Loop While Abs(y3) > 0.000000000001 * y0 And Abs(x1 - x2) > 0.000000000001 * dx0 And n <= 20000 'Picture1.PSet (x3, 0)'Picture1.Print x3'Picture1.Print nf_solve = x3End FunctionPrivate Sub Command1_Click()Dim r As Doubler = f_solve(0.5, 2)Command1.Caption = Str(r)draw_pic -1, 4, -10, 2End Sub•牛顿法如果方程的形式可以化简成 f(x)=0 ,并且可以比较方便的求出f(x)的导数,那么我们只要知道一个点的f(x)就可以根据x,f(x)及f(x)的导数求出下一个更加接近X0的x,循环求解我们可以解出该方程的根。
递归算法 递推公式求解

递归算法递推公式求解递归算法是一种自我调用的算法,它通过不断将问题分解为更小的子问题来求解问题。
递归算法的核心是递推公式,也称为递归式,它描述了如何将问题分解为子问题,并如何从子问题的解中得到原问题的解。
递推公式通常具有以下形式:T(n) = aT(n/b) + f(n)其中,T(n) 表示问题规模为n 时的时间复杂度,a 表示每次递归调用的次数,b 表示每次递归调用后问题规模缩小的比例,f(n) 表示除了递归调用外的其他操作的时间复杂度。
为了求解递推公式,我们可以使用以下方法:1.迭代法:通过迭代递推公式的方式逐步计算出T(n) 的值。
这种方法比较直观,但对于较大的n 值,迭代次数可能非常多,计算量也会非常大。
2.替换法:通过猜测T(n) 的形式,并将其代入递推公式中进行验证。
如果猜测正确,则可以得到T(n) 的解。
这种方法需要对问题有一定的了解和猜测能力。
3.大师定理:大师定理是一种求解递推公式的通用方法。
它可以根据递推公式的形式,直接给出T(n) 的时间复杂度。
大师定理有多种形式,其中最常用的是以下三种:a. 如果f(n) = O(n^c),其中c < log_b(a),则T(n) = O(n^log_b(a))。
b. 如果f(n) = O(n^c),其中c = log_b(a),则T(n) = O(n^c * log_n)。
c. 如果f(n) = O(n^c),其中c > log_b(a),且对于所有足够大的n,有af(n/b) <= f(n),则T(n) = O(f(n))。
需要注意的是,大师定理只是一种求解递推公式的工具,它并不能解决所有类型的递推公式。
在实际应用中,我们需要根据具体问题选择合适的求解方法。
数学中的递推与迭代小学生了解递推与迭代的原理

数学中的递推与迭代小学生了解递推与迭代的原理在数学中,递推和迭代是两种常见的数学方法,用于解决问题和生成数列。
对于小学生来说,了解递推和迭代的原理可以帮助他们更好地理解数学概念,并培养他们的逻辑思维和问题解决能力。
一、递推的原理递推是一种根据前一项或前几项推导后一项的方法。
简单来说,就是通过已知条件计算未知结果。
递推通常使用递推公式或递推关系来表示,常见的递推关系有等差数列和等比数列。
1. 等差数列等差数列是一种数列,其中每一项与前一项之间的差值都相等。
例如,1,3,5,7,9就是一个等差数列,公差为2。
计算等差数列的递推关系很简单,只需要根据前一项和公差相加即可得到后一项。
2. 等比数列等比数列是一种数列,其中每一项与前一项之间的比值都相等。
例如,1,2,4,8,16就是一个等比数列,公比为2。
计算等比数列的递推关系也很简单,只需要根据前一项和公比相乘即可得到后一项。
递推在数学中有着广泛的应用,例如计算斐波那契数列、求解递推方程等。
通过递推,我们能够得到数列中任意一项的值。
二、迭代的原理迭代是一种通过不断重复计算来逼近目标值的方法。
迭代通常使用迭代公式或迭代关系来表示,每次迭代都将上一次的结果作为新的输入,循环进行计算,直到达到某个条件为止。
1. 二分法迭代二分法是一种常见的迭代方法,通过将一个区间不断二分,逼近目标值。
例如,在查找一个数的平方根时,可以利用二分法迭代来逼近。
每次迭代,我们将当前区间的中点作为新的猜测值,然后根据猜测值的平方与目标值的比较结果,将区间缩小一半,逐渐靠近目标值。
2. 牛顿迭代法牛顿迭代法是一种用于求解方程根的迭代方法。
通过不断迭代求导和替换变量的方式,求解方程的近似解。
例如,求解方程f(x)=0的根时,我们可以通过迭代公式x_(n+1) = x_n - f(x_n)/f'(x_n),不断更新变量x的值,直到满足精度要求。
迭代在数学中也有着广泛的应用,例如求解方程的根、求解最优化问题等。
迭代法求方程近似解

迭代法求方程近似解迭代法是一种求解方程近似解的方法,其基本思想是通过不断迭代,逐步逼近方程的解。
在实际应用中,迭代法常常被用于求解非线性方程、微积分方程等问题。
迭代法的具体步骤如下:1.选取一个初始值x0;2.根据某种迭代公式,计算出x1,x2,x3,...,xn;3.当满足一定的停止准则时,停止迭代,输出近似解xn。
其中,迭代公式是迭代法的核心,不同的迭代公式会对迭代的速度和精度产生不同的影响。
常见的迭代公式有牛顿迭代法、割线法、弦截法等。
以牛顿迭代法为例,其迭代公式为:xn+1 = xn - f(xn) / f'(xn)其中,f(x)是方程的函数形式,f'(x)是f(x)的导数。
牛顿迭代法的基本思想是,通过不断用切线逼近曲线,找到曲线与x轴的交点,从而求得方程的解。
下面以求解方程x^2 - 2 = 0为例,演示牛顿迭代法的具体步骤:1.选取初始值x0 = 1;2.根据牛顿迭代公式,计算出x1,x2,x3,...,xn:x1 = x0 - (x0^2 - 2) / (2 * x0) = (x0 + 2 / x0) / 2 = 1.5x2 = x1 - (x1^2 - 2) / (2 * x1) = (x1 + 2 / x1) / 2 = 1.4167x3 = x2 - (x2^2 - 2) / (2 * x2) = (x2 + 2 / x2) / 2 = 1.4142...xn = 1.414213563.当满足一定的停止准则时,停止迭代,输出近似解xn。
在实际应用中,迭代法的停止准则通常有两种:一是设定迭代次数的上限,当迭代次数达到上限时,停止迭代;二是设定一个误差范围,当迭代过程中的误差小于该范围时,停止迭代。
总之,迭代法是一种简单而有效的求解方程近似解的方法,其优点是可以适用于各种类型的方程,并且可以通过调整迭代公式和停止准则来提高求解的精度和效率。
在实际应用中,我们可以根据具体问题的特点选择合适的迭代公式和停止准则,以达到最优的求解效果。
常用算法——迭代法

常用算法——迭代法常用算法,迭代法迭代法(iteration method)是一种通过重复执行相同的步骤来逐步逼近问题解的方法。
它在计算机科学和数学中被广泛应用,可以解决各种问题,比如求近似解、优化问题、图像处理等。
迭代法的基本思想是通过不断迭代的过程,逐渐逼近问题的解。
每一次迭代都会将上一次迭代的结果作为输入,并进行相同的操作,直到满足其中一种停止条件。
在每次迭代中,我们可以根据当前的状态更新变量的值,进而改善我们对问题解的估计。
迭代法最常用的应用之一是求解方程的近似解。
对于一些复杂方程,很难通过解析方法求得解析解,这时我们可以利用迭代法来逼近方程的解。
具体地,我们可以选择一个初始的近似解,然后将其代入方程,得到一个新的近似解。
重复这个过程,直到得到一个满足我们要求的解。
这个方法被称为迭代法求解方程。
另一个常用的迭代法示例是求解优化问题。
在优化问题中,我们需要找到能使一些目标函数取得最大或最小值的变量。
迭代法可以通过不断优化变量值的方法来求解这种问题。
我们可以从一个初始解开始,然后根据目标函数的导数或近似导数的信息来更新变量的值,使得目标函数的值逐步接近最优解。
这种方法被称为迭代优化算法。
迭代法还可以应用于图像处理等领域。
在图像处理中,我们常常需要对图片进行修复、增强或变形。
迭代法可以通过对图片像素的重复操作来达到修复、增强或变形的目的。
例如,如果我们想要修复一张受损的图片,可以通过迭代地修复每个像素点,以逐渐恢复整个图片。
除了上述示例,迭代法还有很多其他应用,比如求解线性方程组、图像压缩、机器学习等。
总之,迭代法是一种非常灵活和强大的算法,可以解决各种问题。
在实际应用中,迭代法的效果往往受到选择合适的初始值、迭代次数和停止条件的影响。
因此,为了获得较好的结果,我们需要在迭代过程中不断优化这些参数。
同时,迭代法也可能会陷入局部最优解的问题,因此我们需要设计合适的策略来避免这种情况。
总的来说,迭代法是一种重要的常用算法,它可以解决各种问题。
迭代法求方程的近似解
迭代法求方程的近似解在数学中,方程是一种重要的数学工具,它可以描述各种自然现象和数学问题。
解方程是数学学习中的基本内容之一,而求解方程的近似解是数值计算中的重要问题之一。
本文将介绍一种常用的方法——迭代法,用于求解方程的近似解。
一、什么是迭代法迭代法是一种通过逐步逼近的方式求解方程的方法。
其基本思想是从一个初始值开始,通过不断迭代计算,逐步逼近方程的解。
迭代法的优点在于简单易行,适用于各种类型的方程。
二、迭代法的基本原理迭代法的基本原理是通过不断迭代计算,逐步逼近方程的解。
具体步骤如下:1. 选择一个初始值x0作为方程的近似解。
2. 根据方程的特点,构造一个递推公式xn+1=f(xn),其中f(x)是方程的函数表达式。
3. 通过不断迭代计算,得到xn+1的值。
4. 判断xn+1与xn之间的差距是否小于给定的精度要求,如果满足要求,则停止计算,否则返回第3步继续迭代计算。
三、迭代法的实例下面通过一个实例来说明迭代法的具体应用。
假设我们要求解方程x^2 - 2 = 0的近似解。
首先选择一个初始值x0=1作为方程的近似解。
然后,根据方程的特点,构造递推公式xn+1=(xn+2/xn)/2。
通过不断迭代计算,得到如下结果:初始值x0=1,迭代1次得到x1=1.5迭代1次得到x1=1.5,迭代2次得到x2=1.4167迭代2次得到x2=1.4167,迭代3次得到x3=1.4142迭代3次得到x3=1.4142,迭代4次得到x4=1.4142通过迭代计算,我们得到了方程x^2 - 2 = 0的近似解x≈1.4142。
可以发现,随着迭代次数的增加,近似解逐渐逼近方程的真实解。
四、迭代法的注意事项在使用迭代法求解方程的过程中,需要注意以下几点:1. 初始值的选择:初始值的选择对迭代结果有很大影响,一般需要根据方程的特点和实际情况进行选择。
2. 迭代公式的构造:迭代公式的构造需要根据方程的特点进行合理设计,以确保迭代过程的收敛性和稳定性。
迭代法求解方程
迭代法求解方程1 什么是迭代法?迭代法是一种求解方程的方法,通常用于在数值计算中。
迭代法的基本思想是通过不断重复一个固定的计算过程来逼近目标解,直到精度满足要求为止。
迭代法在理论研究和实际应用中都有广泛应用,例如在数学、物理、工程学等领域。
2 迭代法的例子在数学中,迭代法最常用于求解方程。
例如,我们有一个方程f(x) = 0,我们希望找到它的一个解x。
迭代法的一般形式是从一个初始值x0开始,通过重复应用某个公式,得到序列{x0, x1, x2, …, xn},使得xn逐步逼近解。
具体而言,每一次迭代都利用前一次的计算结果,求出新的解,即:xn+1 = g(xn)其中g(x)是某个函数,也被称为迭代函数。
当序列{x0, x1,x2, …, xn}满足一定条件时,我们称其为收敛序列,此时xn就是方程f(x) = 0的解。
3 迭代法的实现迭代法需要满足一定的收敛条件,才能有效地找到解。
在迭代函数的选择中,一般应满足以下要求:1. 迭代函数必须是连续的。
2. 选取的初值必须接近解。
3. 迭代函数的值域必须包含自变量的定义域。
4. 迭代函数的导数要通常利于计算。
基于以上原则,我们可以通过编写程序来实现迭代法求解方程。
代码示例如下:```python定义迭代函数def g(x):return (x**2 + 2) / 3定义初始值x0 = 1设置迭代次数n = 20进行迭代for i in range(n):x1 = g(x0)print("x{} = {}".format(i+1, x1))x0 = x1```这段代码中,我们定义了一个迭代函数g(x) = (x² + 2) / 3,初始值为x0 = 1,迭代次数为20次。
通过重复调用迭代函数g(x),我们依次求得了序列{x1, x2, …, x20},并输出每一次迭代的结果。
4 迭代法的优缺点迭代法的优点主要包括:1. 迭代法适用于求解各种类型的方程,具有较高的通用性。
迭代算法
数学模型:根据耗油量最少目标的分析,下面从后向前分段 讨论。 第一段长度为500公里且第一个加油点贮油为500加仑。 第二段中为了贮备油,吉普车在这段的行程必须有往返。下 面讨论怎样走效率高: 1)首先不计方向这段应走奇数次(保证最后向前走)。 2)每次向前行进时吉普车是满载。 3)要能贮存够下一加油点的贮油量,路上耗油又最少。
x1=x0-f0/f1;
} while(fabs(x1-x0)>=1e-4); return(x1); }
【例3】二分法求解方程f(x)=0根 用二 分法求解方程f(x)=0根的前提条件是: f(x)在求解的区间[a,b]上是连续的,且 已知f(a)与f(b)异号,即 f(a)*f(b)<0。
图4-6 二分法求解 方程示意
print(“storepoint”,k,”distance”,0,”oilquantity”,oil);
}
3.3
迭代法解方程
迭代法解方程的实质是按照下列步骤构造一个序列 x0,x1,…,xn, 来 逐步逼近方程f(x)=0的解:
1)选取适当的初值x0;
2)确定迭代格式,即建立迭代关系,需要将方程f(x)=0改 写为x=φ (x)的等价形式;
desert( ) { int dis,k,oil,k; dis=500;k=1;oil=500; do{
print(“storepoint”,k,”distance”,1000-dis,”oilquantity”,oil);
k=k+1; dis=dis+500/(2*k-1); oil= 500*k; }while ( dis<1000) oil=500*(k-1)+(1000-dis)*( 2*k-1);
递推和迭代
编程思路2
采用倒推法求解
即改为y(6)赋初值k后递推出y(5),由y(5)递推出 y(4),依此经5次递推得y(1),“由后向前”递推 式为: y(i)=(5*y(i+1)+1)/4 (i=1、2、…、5) 为确保从y(6)推出整数y(5),显然y(6)(即初始参 数k)只能取3、7、11、…,即取k%4==3。因而 k赋初值为3,k的增量为4。
注意
为保证推出的y(i)为整数,则要求4*y(i-1)-1能被5 整除(即前一个水手藏起一份后,剩下的4份能 够给猴子一个,再被分成五份)。因此,可确定 最小的k值为4,即y(1)赋初值4;若在递推过程中, 某次y(i)不为整数,则重新赋y(1)从头再来,为保 证4*y(1)-1能被5整除,因此 k 的增量可设置为5。
递推算法求解的问题的特点:
问题可以划分成多个状态 除初始状态外,其它各个状态都可以用固 定的递推关系式来表示
递推算法求解所需工作
确定递推变量 建立递推关系 确定初始(边界)条件 对递推过程进行控制
递推法分类
递推法从递推方向可分为顺推与倒推。
顺推法是从已知条件出发,通过递推关系逐步 推算出要解决的问题的结果的方法。 倒推法,就是在不知初始值的情况下,经某种 递推关系而获知了问题的解或目标,从这个解 或目标出发,采用倒推手段,一步步地倒推到 这个问题的初始情况。
【实例2-5】水手分椰子
五个水手来到一个岛上,采了一堆椰子后,因为疲 劳都睡着了。一段时间后,第一个水手醒来,悄悄 地将椰子等分成五份,多出一个椰子,便给了旁边 的猴子,然后自己藏起一份,再将剩下的椰子重新 合在一起,继续睡觉。不久,第二名水手醒来,同 样将椰子等分成五份,恰好也多出一个,也给了猴 子。然后自己也藏起一份,再将剩下的椰子重新合 在一起。以后每个水手都如此分了一次并都藏起一 份,也恰好都把多出的一个给了猴子。第二天,五 个水手醒来,发现椰子少了许多,心照不宣,便把 剩下的椰子分成五份,恰好又多出一个,给了猴子。 问原来这堆椰子至少有多少个?
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
解的正确性-归纳验证
证明:下述递推方程的解是 W(n)=n(n1)/2 W(n)=W(n1)+n1 W(1)=0 方法:数学归纳法 证 n=1,W(1)=1(11)/2 = 0 假设对于n , 解满足方程,则 W(n+1) = W(n)+n = n(n1)/2 + n = n[(n1)/2+1] = n(n+1)/2
5
二分归并排序
MergeSort (A, p, r) 输入:数组 A[p..r] 输出:按递增顺序排序的数组 A 1. if p < r 2. then q(p+r)/2 3. MergeSort (A, p, q) 4. MergeSort (A, q+1, r) 换元:将对 5. Merge (A, p,n q,的函数 r)
= 2 [ 2T(n2) + 1] + 1 = 22 T(n2) + 2 + 1 =… = 2n1T(1) + 2n2+2n3+…+2+1 = 2n1 + 2n11 代入初值 求和 = 2n1
3
插入排序算法
W(n)=W(n1) + n1 = [W(n2) + n2] + n1 = W(n2) + n2 + n1 =…
迭代法求解 递推方程
迭代法
• 不断用递推方程的右部替换左部 • 每次替换,随着 n 的降低在和式中 多出一项 • 直到出现初值停止迭代 • 将初值代入并对和式求和
• 可用数学归纳法验证解的正确性
2
Hanoi 塔算法
T(n) = 2 T(n1) + 1
T(n) = 2 T(n1) + 1 T(1) = 1
换元, 对k迭代
2[2W ( 2 k 2 ) 2 k 1 1] 2 k 1 22W ( 2k 2 ) 2k 2 2k 1
2 2 [2W ( 2 k 3 ) 2 k 2 1] 2 k 2 2 k 1 ... 2 k W (1) k 2 k ( 2 k 1 2 k 2 ... 2 1) k 2k 2k 1 n log n n 1
W ( n) W ( n 1) n 1 W (1) 0
= W(1) + 1 + 2 + … + (n2) + (n1)
= 1 + 2 + … + (n2) + (n1)
= n(n1)/2
4
换元迭代
• 将对 n 的递推式换成对其他变元 k 的递推式
• 对 k 直接迭代 • 将解 (关于 k 的函数) 转换成关于 n 的函数
9
小结
迭代法求解递推方程 • 直接迭代,代入初值,然后求和 • 对递推方程和初值进行换元,然 后求和,求和后进行相反换元, 得到原始递推方程的解 • 验证方法——数学归纳法
10
转换成对 k 的函数
6
换元
假设 n=2k, 递推方程如下: W(n)=2W(n/2)+n1 W(1)=0 换元: W(2k) = 2W(2k-1) + 2k1 W(0) = 0
7
迭代求解
W ( n) 2W ( 2 k 1 ) 2 k 1
W(2k) = 2W(2k-1) + 2k1