算法设计思想(3)— 迭代法
1. 迭代法基本思想
迭代法的实现,一般需要确定以下三个要点。
1.1 确定迭代变量:
迭代变量一般就是要求解的问题的解,利用迭代递推公式可以不断地由旧值递推出新值。根据问题的不同,迭代变量可以是一个,也可以是多个。
确定迭代变量,通常还要根据迭代递推关系给出迭代变量的初始值,这一点也很重要。
1.2 确定迭代递推关系:
迭代递推关系是根据旧值计算新值的关系或公式,这是迭代法实现的关键,如果不能确定迭代关系,则无法用迭代法实现算法。
1.3 确定迭代终止条件:
迭代终止条件是控制迭代过程退出的关键条件。迭代不可能无休止地进行,必须设置迭代终止条件,在适当的时候退出迭代。
迭代终止条件一般有三种假设:
- 其一,是迭代变量已经求得问题的精确值;
- 其二,是迭代变量无法得到精确值,但是某个迭代的值的精度已经满足要求;
- 其三,是指定明确的迭代计算次数。
迭代算法的具体实现,可根据问题的类型选择迭代终止条件。一般情况下,为了防止迭代关系在某个区间上发散(不收敛)使得算法进入死循环,都会把第三个条件作为异常退出条件和其他迭代终止条件配合使用,也就是说,即使无法得到符合条件的解,只要迭代计算次数达到某个限制值,也退出迭代过程。
2. 实例
2.1 用迭代法求 平方根
公式:求 a 的平方根的迭代公式为: Xn+1=(Xn + a/Xn)/2 要求前后两次求出的 x 的差的绝对值小于10-5 时结束,并输出每次迭代的结果和最后结果
def func(a):i = 0x = 1.0ret = 0while True:i += 1previous_ret = ret ret = (x + a/x)/2.0 # 迭代递推关系x = ret # 迭代变量print "i is {}".format(i)if abs(ret - previous_ret) <= 10**(-5): # 迭代终止条件breakprint "ret is {}".format(ret)func(81)
2.2 二分迭代求解低阶非线性方程
对于 f(x) = 2x2 + 3.2x - 1.8 求在 [-0.8, 8] 区间使得 f(x) = 0 的解,由于计算机无法对两个浮点数直接做相等的判断,故对其精度误差要求小于 10-9
def fun(x):f = 2*x**2 + 3.2*x - 1.8return fdef main(value_range):begin = value_range[0]end = value_range[1]i = 0while True:i += 1print "i is {}".format(i)mid = (begin + end) / 2print "mid is {}".format(mid)if fun(begin) * fun(mid) > 0.0:begin = midelse:end = midif abs(begin - end) < 10**(-9):print midbreakif __name__ == "__main__":main([-0.8, 8])
算法设计思想(3)— 迭代法相关推荐
- (十五)算法设计思想之“回溯算法”
算法设计思想之"回溯算法" 回溯算法是什么? 什么问题适合用回溯算法解决? 适合回溯算法解决的问题 全排列 LeetCode:46.全排列 LeetCode:78.子集 思考题 回 ...
- (十四)算法设计思想之“贪心算法”
算法设计思想之"贪心算法" 贪心算法是什么 LeetCode:455.分饼干 LeetCode:122.买卖股票的最佳时机II 思考题 贪心算法是什么 贪心算法是算法设计中的一种方 ...
- (十三)算法设计思想之“动态规划”
算法设计思想之"动态规划" 动态规划是什么? 动态规划的步骤 LeetCode:70.爬楼梯 LeetCode:198.打家劫舍 思考题 动态规划是什么? 动态规划是算法设计中的一 ...
- (十二)算法设计思想之“分而治之”
算法设计思想之"分而治之" 分而治之是是什么 场景一:归并排序 场景二:快速排序 LeetCode:374.猜数字大小 LeetCode:226.翻转二叉树 LeetCode:10 ...
- 算法设计与分析-迭代法-穿越沙漠问题
算法设计与分析-迭代法-穿越沙漠问题 题目: 用一辆吉普车穿越1000公里的沙漠.吉普车的总装油量为500升,耗油率为1升/公里.由于沙漠中没有油库,必须先用这辆车在沙漠中建立临时油库.该吉普车以最少 ...
- 算法设计与分析_[04] 天牛须算法设计思想分析
原文链接: https://arxiv.org/abs/1710.10724arxiv.org 算法实现: 首先,初始化参数 ,分别代表初始解,初始的搜索范围,以及更新步长,且通过原文我们知道: 在 ...
- 五大算法设计思想,你都知道吗?
作者:叫我不矜持 链接:https://www.jianshu.com/p/bf8b0668d191 一.分治法 1.概念: 将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分 ...
- 求一个任意实数c的算术平方根g的算法设计思想_算法复习第四篇——贪心法
公元2020年5月5日,距离算法考试仅剩4天. 一.知识归纳 1.设计思想 只根据当前已有的信息就做出选择,而且一旦做出了选择,将来无论如何都不能更改 不从整体最优考虑,所做的选择只是在某种意义上的局 ...
- 算法设计思想(2)— 贪婪法
1. 贪婪法定义 贪婪法,又称贪心算法,是寻找最优解问题的常用方法,这种方法模式一般将求解过程分成若干个步骤,但每个步骤都应用贪心原则,选取当前状态下最好的或最优的选择(局部最有利的选择),并以此希望 ...
最新文章
- 搞懂机器学习的常用评价指标!
- 复星金服微服务_阿里巴巴财报:蚂蚁金服净利润59亿元,支付宝服务用户约12亿...
- linux 编译文件mm,Linux编译C++文件,说没有找到头文件,怎么啊?新手,不太会用...
- 魔力宝贝服务器列表修改,魔力宝贝修改代码一览表GM.docx
- 如何判断一个网站是否被百度处罚中
- JAVAWEB入门之Servlet_体系结构
- QML工作笔记-PC端和Android端布局错位问题
- python测试代码怎么写_python unittest编写测试代码
- 怎么看电脑是不是linux系统,怎么查看自己的电脑系统是什么版本
- js正则替换字符串中的变量为变量的值
- mysql的学习笔记(六)
- MySQL 中隔离级别 RC 与 RR 的区别
- 扇贝有道180921每日一句
- 工作流框架的设计要点
- [Android]安卓简易计算器 (使用GridLayout)
- 数学建模13种常见方法
- 电影下载、播放、制作、转换、各类问题全攻略
- 惰性学习法与kNN分类
- FTP协议主动(Port)模式和被动(Passive)两种模式详解
- 淘宝联盟(淘客)常用接口整理