简单迭代运算
迭代(辗转法)是一种不断用变量的旧值递推新值的过程
分类
- 精确迭代:杨辉三角、内在移动算法等
- 近似迭代:二分法和牛顿迭代法等
设计方法
- 确定迭代模型
根据问题描述,抽象出当前值和下一个值的迭代关系。这一迭代关系应该最终收敛于所期望的目标。迭代模型时解决迭代问题的关键。 - 控制迭代过程
迭代模型会包含期望的目标,根据这一目标控制迭代的次数,并最终结束算法。迭代过程的控制通常分为两种情况:一种是已知或可以计算出来迭代的次数,这时可以构建一个固定次数的循环来实现对迭代过程的控制。另一种是所需的迭代次数无法确定,需要分析出迭代过程的结束条件,还要考虑有可能得不到目标解(迭代不收敛)的情况,避免出现迭代过程的死循环。
例题
1
【例题1】输出杨辉三角形
问题分析
利用一个n*n的矩阵存储信息。如下
有
计算模型
算法设计与描述
输入:
输出:杨辉三角
step1: 输入,定义一个nn的存储矩阵
step2: 令, 定义
step3: 令,定义
step4: 令,若,转step4
step5: 令,若 转step3
step6: 打印输出矩阵,算法结束
算法分析
- 输入,规模为
- 核心操作:
- 得出
2
【例题2】内存移动问题:数组中有n个数据,要将它们顺序循环向后移k位,即前面的元素向后(右)移k位,后面的元素则循环向前移k位,例:0、1、2、3、4、5循环移3位后为: 3、4、5、0、1、2。考虑到n会很大,不允许用2*n及以上个空间来完成此题。
问题分析
设原数列为,移动k次。
- 建立一个数列,令
此时,时间复杂度为,空间复杂度为,不符合题目要求。 - 建立临时变量,令,然后从开始所有位右移一位,最后,令,实现右移一位,循环实现右移k位。
此时,时间复杂度为,空间复杂度为 - 如果按照2的方法将元素直接移动至指定位置,那么时间复杂度为,空间复杂度为。
如:n = 6,k = 3的情况,将,;,,,,共需要移动3轮,每轮移动元素个数为2。
不难发现,此时
下面给出证明:
令,每轮最少移动元素个数为
从而有: 且
由每轮第一次移动的元素要和最后一次移动到的元素相同可得:
从而推出:
由可得:
为每轮最小移动次数,取 ,此时移动轮数为
下文主要讲述第三种方法
计算模型
- 求出最大公约数,由欧几里得
- 令 [上一步所求出来的], 移动次数:
- 计算元素移动位置:
说明:初始元素为,第次移动实现 ,共移动轮
算法设计与描述
算法分析
注:可以进行改进,减少内层循环次数。【例题3】求n!(n<=100)
问题分析
int整数表示的范围为:-2147483648 —— -2147483647,显然不能直接处理规模为100的阶乘计算。所以需要借助一个int型数组a,设定每个元素存储6位整数,由式子可得数组中约需要34个元素。
计算方法:模拟竖式乘法
计算模型
设存储大数结果的数组为,
初始化
算法设计与描述
算法分析
- 问题规模:n次乘法
- 核心语句:内层的竖式乘法
- 算法时间复杂度:
方程求解
非线性方程
非线性方程的收敛性及其迭代速度
定义1: 设是方程的根,若存在的一个邻域,当初值以属于时,迭代收敛,则称该迭代过程具有局部收敛性。
定义2:设为第次迭代的迭代误差,若
则称迭代是p阶收敛的。称c为渐进误差常数。
定义3:称为效率指数,其中,表示每次迭代的计算量,表示迭代的收敛阶。
定理1::若当时,满足,则迭代收敛域唯一的根。
建立迭代方程
- 选取适当的初值x0
- 建立迭代方程,将方程f(x)=0转换成x=φ(x)的等价形式。
- 运用迭代方程x=φ(x),反复计算,如x1=φ(x0), x2=φ(x1),…,xn=φ(xn-1),得到x的序列,若该数列收敛,则最终可以得到满足一定精度ε的解,即有|xn-xn-1|<ε。有时候也会用f(xn)<= ε或f(xn)=0来判断。
【例题1】:求,在之间的解,要求
数学模型
算法设计与描述
二分法
若f(x)在区间[a, b]上连续,则在此区间上任取两点x1、x2,若f(x1)*f(x2)<0,则在(x1,x2)间必有解。其求解步骤为:
- f(x1)*f(x2)<0,方程有解,继续 (2),否则无解;
- 令x=(x1+x2)/2,代入方程f(x)=0,则x即为所求,算法结束。否则进行(3);
- f(x1)*f(x)<0,与x2同侧令x2=x,若f(x1)*f(x)>0,则与x1同侧,令x1=x,继续步骤(2)。
渐进时间复杂性
设根在区间,取作为根的一个近似,按上述算法框架,不断二分,则可以获得一个近似根的序列,该序列必以根为极限。那么,误差可以表示为:
对于给定精度,只需取满足,可得。
【例题2】用二分法求,在之间的解,要求。
计算模型
初始化:
算法设计与描述
牛顿法
设待解方程为,其一个解为。
设过点的切线斜率为,则其切线方程为:
当其与轴相交时,。则可以得到 可以做为迭代公式,反复使用,求出迭代数列,直到满足精度为止。
牛顿法时间复杂度分析
太麻烦了。后面想起来再整理吧。
【例题3】:用牛顿法求,在之间的解,要求。
计算模型
令,则
迭代公式为:
算法设计与描述
线性方程组的近似解法
雅克比算法&&高斯赛德尔算法
计算模型
算法设计与描述
线性规划*
ppt上有不过带星号,不太想整理了。。。