简单迭代运算

迭代(辗转法)是一种不断用变量的旧值递推新值的过程

分类

  • 精确迭代:杨辉三角、内在移动算法等
  • 近似迭代:二分法和牛顿迭代法等

设计方法

  1. 确定迭代模型
    根据问题描述,抽象出当前值和下一个值的迭代关系。这一迭代关系应该最终收敛于所期望的目标。迭代模型时解决迭代问题的关键。
  2. 控制迭代过程
    迭代模型会包含期望的目标,根据这一目标控制迭代的次数,并最终结束算法。迭代过程的控制通常分为两种情况:一种是已知或可以计算出来迭代的次数,这时可以构建一个固定次数的循环来实现对迭代过程的控制。另一种是所需的迭代次数无法确定,需要分析出迭代过程的结束条件,还要考虑有可能得不到目标解(迭代不收敛)的情况,避免出现迭代过程的死循环。

例题

1

例题1】输出杨辉三角形

问题分析

利用一个n*n的矩阵存储信息。如下

LM迭代算法在spark 迭代计算法_LM迭代算法在spark


LM迭代算法在spark 迭代计算法_杨辉三角_02

计算模型

LM迭代算法在spark 迭代计算法_牛顿迭代法_03

算法设计与描述

输入:LM迭代算法在spark 迭代计算法_杨辉三角_04

输出:杨辉三角

step1: 输入LM迭代算法在spark 迭代计算法_杨辉三角_04,定义一个nLM迭代算法在spark 迭代计算法_杨辉三角_06n的存储矩阵LM迭代算法在spark 迭代计算法_LM迭代算法在spark_07

step2: 令LM迭代算法在spark 迭代计算法_LM迭代算法在spark_08, 定义LM迭代算法在spark 迭代计算法_杨辉三角_09

step3: 令LM迭代算法在spark 迭代计算法_牛顿迭代法_10,定义LM迭代算法在spark 迭代计算法_牛顿迭代法_11

step4: 令LM迭代算法在spark 迭代计算法_LM迭代算法在spark_12,若LM迭代算法在spark 迭代计算法_迭代_13,转step4

step5: 令LM迭代算法在spark 迭代计算法_牛顿迭代法_14,若LM迭代算法在spark 迭代计算法_杨辉三角_15 转step3

step6: 打印输出矩阵LM迭代算法在spark 迭代计算法_LM迭代算法在spark_07,算法结束

算法分析

  1. 输入LM迭代算法在spark 迭代计算法_牛顿迭代法_17,规模为LM迭代算法在spark 迭代计算法_牛顿迭代法_17
  2. 核心操作:LM迭代算法在spark 迭代计算法_杨辉三角_19
  3. 得出LM迭代算法在spark 迭代计算法_LM迭代算法在spark_20

2

例题2内存移动问题:数组中有n个数据,要将它们顺序循环向后移k位,即前面的元素向后(右)移k位,后面的元素则循环向前移k位,例:0、1、2、3、4、5循环移3位后为: 3、4、5、0、1、2。考虑到n会很大,不允许用2*n及以上个空间来完成此题。
问题分析
设原数列为LM迭代算法在spark 迭代计算法_杨辉三角_21,移动k次。

  1. 建立一个数列LM迭代算法在spark 迭代计算法_迭代_22,令LM迭代算法在spark 迭代计算法_迭代_23
    此时,时间复杂度为LM迭代算法在spark 迭代计算法_杨辉三角_24,空间复杂度为LM迭代算法在spark 迭代计算法_LM迭代算法在spark_25,不符合题目要求。
  2. 建立临时变量LM迭代算法在spark 迭代计算法_杨辉三角_26,令LM迭代算法在spark 迭代计算法_迭代_27,然后从LM迭代算法在spark 迭代计算法_迭代_28开始所有位右移一位,最后,令LM迭代算法在spark 迭代计算法_迭代_29,实现右移一位,循环实现右移k位。
    此时,时间复杂度为LM迭代算法在spark 迭代计算法_迭代_30,空间复杂度为LM迭代算法在spark 迭代计算法_迭代_31
  3. 如果按照2的方法将元素直接移动至指定位置,那么时间复杂度为LM迭代算法在spark 迭代计算法_杨辉三角_24,空间复杂度为LM迭代算法在spark 迭代计算法_杨辉三角_24
    如:n = 6,k = 3的情况,将LM迭代算法在spark 迭代计算法_LM迭代算法在spark_34,LM迭代算法在spark 迭代计算法_迭代_35;LM迭代算法在spark 迭代计算法_杨辉三角_36,LM迭代算法在spark 迭代计算法_牛顿迭代法_37,LM迭代算法在spark 迭代计算法_杨辉三角_38,LM迭代算法在spark 迭代计算法_迭代_39,共需要移动3轮,每轮移动元素个数为2。
    不难发现,此时
    LM迭代算法在spark 迭代计算法_牛顿迭代法_40
    下面给出证明
    LM迭代算法在spark 迭代计算法_迭代_41,每轮最少移动元素个数为LM迭代算法在spark 迭代计算法_杨辉三角_42
    从而有:LM迭代算法在spark 迭代计算法_杨辉三角_43LM迭代算法在spark 迭代计算法_牛顿迭代法_44
    由每轮第一次移动的元素要和最后一次移动到的元素相同可得:LM迭代算法在spark 迭代计算法_LM迭代算法在spark_45
    从而推出:LM迭代算法在spark 迭代计算法_LM迭代算法在spark_46
    LM迭代算法在spark 迭代计算法_牛顿迭代法_44可得:LM迭代算法在spark 迭代计算法_杨辉三角_48
    LM迭代算法在spark 迭代计算法_杨辉三角_42 为每轮最小移动次数,取 LM迭代算法在spark 迭代计算法_杨辉三角_50,此时移动轮数为LM迭代算法在spark 迭代计算法_LM迭代算法在spark_51

下文主要讲述第三种方法
计算模型

  1. 求出最大公约数,由欧几里得
    LM迭代算法在spark 迭代计算法_LM迭代算法在spark_52
  2. LM迭代算法在spark 迭代计算法_迭代_53 [上一步所求出来的], 移动次数:LM迭代算法在spark 迭代计算法_杨辉三角_54
  3. 计算元素移动位置:LM迭代算法在spark 迭代计算法_LM迭代算法在spark_55
    说明:初始元素为LM迭代算法在spark 迭代计算法_LM迭代算法在spark_56,第LM迭代算法在spark 迭代计算法_迭代_57次移动实现LM迭代算法在spark 迭代计算法_杨辉三角_58 ,共移动LM迭代算法在spark 迭代计算法_LM迭代算法在spark_59

算法设计与描述

LM迭代算法在spark 迭代计算法_迭代_60


算法分析

LM迭代算法在spark 迭代计算法_牛顿迭代法_61


注:可以进行改进,减少内层循环次数。【例题3】求n!(n<=100)

问题分析

int整数表示的范围为:-2147483648 —— -2147483647,显然不能直接处理规模为100的阶乘计算。所以需要借助一个int型数组a,设定每个元素存储6位整数,由式子LM迭代算法在spark 迭代计算法_牛顿迭代法_62可得数组中约需要34个元素。

计算方法:模拟竖式乘法

计算模型

设存储大数结果的数组为LM迭代算法在spark 迭代计算法_牛顿迭代法_63LM迭代算法在spark 迭代计算法_迭代_64

初始化LM迭代算法在spark 迭代计算法_迭代_65

LM迭代算法在spark 迭代计算法_迭代_66

算法设计与描述

LM迭代算法在spark 迭代计算法_杨辉三角_67


算法分析

  1. 问题规模:n次乘法
  2. 核心语句:内层的竖式乘法
  3. 算法时间复杂度:
    LM迭代算法在spark 迭代计算法_迭代_68

方程求解

非线性方程

非线性方程的收敛性及其迭代速度

定义1: 设LM迭代算法在spark 迭代计算法_迭代_69是方程LM迭代算法在spark 迭代计算法_牛顿迭代法_70的根,若存在LM迭代算法在spark 迭代计算法_迭代_69的一个邻域LM迭代算法在spark 迭代计算法_杨辉三角_72,当初值以属于LM迭代算法在spark 迭代计算法_杨辉三角_72时,迭代收敛,则称该迭代过程具有局部收敛性。
定义2:设LM迭代算法在spark 迭代计算法_杨辉三角_74为第LM迭代算法在spark 迭代计算法_牛顿迭代法_75次迭代的迭代误差,若
LM迭代算法在spark 迭代计算法_LM迭代算法在spark_76
则称迭代是p阶收敛的。称c为渐进误差常数。
定义3:称LM迭代算法在spark 迭代计算法_迭代_77为效率指数,其中,LM迭代算法在spark 迭代计算法_牛顿迭代法_78表示每次迭代的计算量,LM迭代算法在spark 迭代计算法_牛顿迭代法_79表示迭代的收敛阶。
定理1::若当LM迭代算法在spark 迭代计算法_牛顿迭代法_80时,LM迭代算法在spark 迭代计算法_迭代_81满足LM迭代算法在spark 迭代计算法_牛顿迭代法_82,则迭代收敛域唯一的根。

建立迭代方程
  1. 选取适当的初值x0
  2. 建立迭代方程,将方程f(x)=0转换成x=φ(x)的等价形式。
  3. 运用迭代方程x=φ(x),反复计算,如x1=φ(x0), x2=φ(x1),…,xn=φ(xn-1),得到x的序列,若该数列收敛,则最终可以得到满足一定精度ε的解,即有|xn-xn-1|<ε。有时候也会用f(xn)<= ε或f(xn)=0来判断。

例题1】:求LM迭代算法在spark 迭代计算法_迭代_83,在LM迭代算法在spark 迭代计算法_杨辉三角_84之间的解,要求LM迭代算法在spark 迭代计算法_杨辉三角_85

数学模型

LM迭代算法在spark 迭代计算法_杨辉三角_86

算法设计与描述

LM迭代算法在spark 迭代计算法_杨辉三角_87

二分法

若f(x)在区间[a, b]上连续,则在此区间上任取两点x1、x2,若f(x1)*f(x2)<0,则在(x1,x2)间必有解。其求解步骤为:

  1. f(x1)*f(x2)<0,方程有解,继续 (2),否则无解;
  2. 令x=(x1+x2)/2,代入方程f(x)=0,则x即为所求,算法结束。否则进行(3);
  3. f(x1)*f(x)<0,与x2同侧令x2=x,若f(x1)*f(x)>0,则与x1同侧,令x1=x,继续步骤(2)。

渐进时间复杂性

设根在区间LM迭代算法在spark 迭代计算法_LM迭代算法在spark_88,取LM迭代算法在spark 迭代计算法_牛顿迭代法_89作为根的一个近似,按上述算法框架,不断二分,则可以获得一个近似根的序列LM迭代算法在spark 迭代计算法_LM迭代算法在spark_90,该序列必以根LM迭代算法在spark 迭代计算法_LM迭代算法在spark_91为极限。那么,误差可以表示为:LM迭代算法在spark 迭代计算法_LM迭代算法在spark_92

对于给定精度LM迭代算法在spark 迭代计算法_LM迭代算法在spark_93,只需取LM迭代算法在spark 迭代计算法_牛顿迭代法_75满足LM迭代算法在spark 迭代计算法_LM迭代算法在spark_95,可得LM迭代算法在spark 迭代计算法_LM迭代算法在spark_96

例题2】用二分法求LM迭代算法在spark 迭代计算法_迭代_83,在LM迭代算法在spark 迭代计算法_杨辉三角_84之间的解,要求LM迭代算法在spark 迭代计算法_迭代_99

计算模型

初始化:LM迭代算法在spark 迭代计算法_杨辉三角_100

LM迭代算法在spark 迭代计算法_杨辉三角_101

算法设计与描述

LM迭代算法在spark 迭代计算法_迭代_102

牛顿法

设待解方程为LM迭代算法在spark 迭代计算法_迭代_103,其一个解为LM迭代算法在spark 迭代计算法_杨辉三角_104
设过点LM迭代算法在spark 迭代计算法_杨辉三角_105的切线斜率为LM迭代算法在spark 迭代计算法_迭代_106,则其切线方程为:
LM迭代算法在spark 迭代计算法_LM迭代算法在spark_107
当其与LM迭代算法在spark 迭代计算法_杨辉三角_104轴相交时,LM迭代算法在spark 迭代计算法_牛顿迭代法_70。则可以得到 LM迭代算法在spark 迭代计算法_杨辉三角_110可以做为迭代公式,反复使用,求出迭代数列LM迭代算法在spark 迭代计算法_牛顿迭代法_111,直到满足精度为止。

牛顿法时间复杂度分析

太麻烦了。后面想起来再整理吧。

例题3】:用牛顿法求LM迭代算法在spark 迭代计算法_迭代_83,在LM迭代算法在spark 迭代计算法_杨辉三角_84之间的解,要求LM迭代算法在spark 迭代计算法_迭代_99

计算模型

LM迭代算法在spark 迭代计算法_LM迭代算法在spark_115,则LM迭代算法在spark 迭代计算法_牛顿迭代法_116

迭代公式为:

LM迭代算法在spark 迭代计算法_牛顿迭代法_117

算法设计与描述

LM迭代算法在spark 迭代计算法_LM迭代算法在spark_118

线性方程组的近似解法

雅克比算法&&高斯赛德尔算法

计算模型

LM迭代算法在spark 迭代计算法_牛顿迭代法_119


算法设计与描述

LM迭代算法在spark 迭代计算法_杨辉三角_120

线性规划*

ppt上有不过带星号,不太想整理了。。。