迭代法

作者: 椰果粒 | 来源:发表于2019-03-28 14:35 被阅读0次

什么是迭代法

迭代法也叫辗转法,是一种不断利用旧变量的值,递推计算新变量的值的过程。
和迭代法相对的是直接法,一次性解决问题。

迭代法利用计算机运行速度快,适合做重复性操作的特点,让计算机对一组指令进行重复执行,每次执行这组执行时,都会从变量的原值推算出一个新值

迭代法分类

  • 精确迭代
  • 近似迭代(二分法和牛顿迭代都是近似迭代)

迭代法的例子

寒舍王赏麦
利用前一个格子麦子的数量(x),可以计算出后一个格子应当放入多少麦子(y)
y = x*2

用JS实现:

/**
 * @description getNumberOfGrid 寒舍王赏麦,计算前n个格子共可以放多少个麦子
 * @param {number} grid:第几个格子
 * @return {number} :麦粒的总数
 * 
 */

 function getNumberOfGrid(grid){
   let sum = 0;   // 麦子总数
   let currentGrid = 0; // 当前格子的麦子数
   currentGrid = 1;
   sum += currentGrid;
   for(var i=2; i<=grid; i++){
     currentGrid *= 2;
     sum += currentGrid;
   }
   return sum;
 }

在JavaScript中,最大的安全整数是(2的53次方-1)

迭代法的具体应用

迭代法运用在一下几个方面

  • 求数值的精确值或者是近似值:典型方法是二分法和牛顿迭代法
  • 在一定的范围内查找目标值:典型的方法是二分查找
  • 机器学习中的迭代:不了解,暂不研究

求数值的精确值或者近似值
求大于1的正整数(x)的平方根,不用Math.sqrt(),思路如下:

这个结果y,取值范围为:1<y<x。也就是,从1到x之间,一定有一个数y,是x的平方根。

采用的方法:迭代法中的二分法,每次检查区间中的值,看是否符合标准。

举个栗子:查找15的平方根:


 /**
  * @description 给定一个数n,求n的平方根(二分法)
  * @param {*} 要计算输入的变量
  * @return n的平方根(取一个无限接近的值)
  */
 function sqrt(n){
  if(isNaN(n)) return NaN;  // 不是数值类型的,直接返回
  if(n===0 || n ===1) return n;
  let low = 0,
      high = n,
      mid = (low+high)/2,
      lastMid = mid;
  do{
    if(Math.pow(mid,2) > n){  // 平方根在中间的左侧
      high = mid
    }else if(Math.pow(mid,2) < n){  // 平方根在中间的右侧
      low = mid
    }else{  // 中间这个数就是平方根
      return mid
    }
    lastMid = mid;
    mid = (low+high)/2
  }while(Math.abs((lastMid-mid)) >= Number.EPSILON) // 只要满足在最小误差之内,就可以了
  return mid
 }

相关文章

  • 解线性方程组的迭代法:Jacobi迭代法与Gauss-Seide

    Jacobi迭代法: import numpy as np # Jacobi 迭代法计算线性方程 # Ax = b...

  • 解线性方程组的迭代法

    Jacobi迭代法 迭代公式 代码 Gauss-Seidel迭代法 迭代公式 代码 SOR 迭代公式 其中. 代码

  • 前序遍历

    迭代法 递归法

  • 迭代思想

    求解一元高次方程的时候 ,用迭代法近似求解这类问题,梯度法,最小二乘法,牛顿迭代法。迭代法 用于 线性非线形方程组...

  • 迭代法

    什么是迭代法 迭代法,其实就是不断的用旧的变量值,递推计算新的变量值。通常是用循环语句控制 迭代法的基本步骤是什么...

  • LeetCode 206——反转链表

    对单链表进行反转有迭代法和递归法两种。 1. 迭代法 迭代法从前往后遍历链表,定义三个指针分别指向相邻的三个结点,...

  • SQR逐次超松弛迭代法

    SQR迭代法是对GS迭代法的又一改进,在每一解向量分量处取其先前分量与GS迭代法算出的分量值的加权平均。其中w松弛...

  • 常见算法思想4:迭代法

    迭代法 迭代法也被称为辗转法,是一种不断用变量的旧值递推新值的过程,在解决问题时总是重复利用一种方法。与迭代法相对...

  • 迭代法

    什么是迭代法 迭代法也叫辗转法,是一种不断利用旧变量的值,递推计算新变量的值的过程。和迭代法相对的是直接法,一次性...

  • 每日一问之初识牛顿迭代法(Newton's method)

    什么是牛顿迭代法? 今天在刷 LeetCode 的 sqrt(x) 这道题的时候,看到别人的解法中有使用牛顿迭代法...

网友评论

      本文标题:迭代法

      本文链接:https://www.haomeiwen.com/subject/xapavqtx.html