程序员的数学基础课 迭代法(自我提升第十三天)

昨天菜鸟自己为自己放了一天假,所以没有更新,也没有看学习内容(QωQ),望大家理解!

今天心情大好,因为菜鸟的博客总算3级了,以前写博客没等级限制就可以自定义标签的,结果不知道什么时候搞了一个要到3级才能自定义了,搞得菜鸟先前的文章都是有什么标签就用什么,难受(QwQ),不过现在到了3级,也就是表示菜鸟也算是正式获得了一些认可,我还会努力的o<(v)>o

话不多说,冲冲冲!!!

文章目录

程序员的数学基础课

基础思想篇三知识点:

首先,讲知识点之前,先讲一个故事

古印度国王舍罕酷爱下棋,他打算重赏国际象棋的发明人宰相西萨·班·达依尔。这位聪明的大臣指着象棋盘对国王说:“陛下,我不要别的赏赐,请您在这张棋盘的第一个小格内放入一粒麦子,在第二个小格内放入两粒,第三小格内放入给四粒,以此类推,每一小格内都比前一小格加一倍的麦子,直至放满 64 个格子,然后将棋盘上所有的麦粒都赏给您的仆人我吧!”

国王自以为小事一桩,痛快地答应了。可是,当开始放麦粒之后,国王发现,还没放到第二十格,一袋麦子已经空了。随着,一袋又一袋的麦子被放入棋盘的格子里,国王很快看出来,即便拿来全印度的粮食,也兑现不了对达依尔的诺言。

相信这个故事,大家都不陌生,而这里也正是用到了我们今天要讲的迭代法

1、到底什么是迭代法?

迭代法,简单来说,其实就是不断地用旧的变量值,递推计算新的变量值。

可能这样还是有点难以理解,所以借用上面的故事。故事里的大臣要求每一个格子的麦子数都是上一个格子的两倍,而这里上一个格子里的麦子数相当于就是旧的变量 Xn-1 ,而该格子的麦子数量就是新的变量值 Xn 。这里可以用公式表示:
《程序员的数学基础课 迭代法(自我提升第十三天)》
大家很容易就可以看出来,迭代法的思想可以很容易的用循环语句或者递归语句表示出来。

2、迭代法有什么具体应用?

大体上,迭代法可以运用在以下几个方面:

  1. 求数值的精确或者近似解。典型的方法包括二分法(Bisection method)和牛顿迭代法(Newton’s method)

  2. 在一定范围内查找目标值。典型的方法包括二分查找

  3. 机器学习算法中的迭代。相关的算法或者模型有很多,比如 K- 均值算法(K-means clustering)、PageRank 的马尔科夫链(Markov chain)、梯度下降法(Gradient descent)等等。迭代法之所以在机器学习中有广泛的应用,是因为很多时候机器学习的过程,就是根据已知的数据和一定的假设,求一个局部最优解。而迭代法可以帮助学习算法逐步搜索,直至发现这种解。

相信大家有点不解,为什么二分法是迭代法?

这就要从代码入手了,二分法的每个新值(二分点)都必须由旧的值(两端点)推导而出。

而且希望大家不要忘了迭代法的另一个必要条件,即:不断地,所以只要是循环语句或递归语句,其中新值的推导用到了旧值,那么就是迭代法。

1. 求方程的精确或者近似解

迭代可以帮我们无穷次的逼近,求得方程的精确或者近似解。

假设有正整数 n,这个平方根一定小于 n 本身,并且大于 1。那么这个问题就转换成,在 1到 n 之间,找一个数字等于 n 的平方根。

我这里采用迭代中常见的二分法:每次查看区间内的中间值,检验它是否符合标准

举个例子,假如我们要找到 10 的平方根。我们需要先看 1 到 10 的中间数值,也就是11/2=5.5。5.5 的平方是大于 10 的,所以我们要一个更小的数值,就看 5.5 和 1 之间的3.25。由于 3.25 的平方也是大于 10 的,继续查看 3.25 和 1 之间的数值,也就是2.125。这时,2.125 的平方小于 10 了,所以看 2.125 和 3.25 之间的值,一直继续下去,直到发现某个数的平方正好是 10。

这里有一个图解:
《程序员的数学基础课 迭代法(自我提升第十三天)》

2. 查找匹配记录

二分法中的迭代式逼近,不仅可以帮我们求得近似解,还可以帮助我们查找匹配的记录。(二分查找)

这个过程就像我们差英语字典一样

第一步,将整个字典先进行排序(假设从小到大,我们查的字典就是这样,从字母a一直到字母z)。二分法中很关键的前提条件是,所查找的区间是有序的。这样才能在每次折半的时候,确定被查找的对象属于左半边还是右半边。

第二步,使用二分法逐步定位到被查找的单词。每次迭代的候,都找到被搜索区间的中间点,看看这个点上的字母,是否和待查单词一致。如果一致就继续比较第二个字母(第二个字母自然也是排好序的);如果不一致,要看被查字母比中间点上的字母是小还是大。如果小,那说明被查的单词如果存在字典中,那一定在左半边;否则就在右半边。

第三步,根据第二步的判断,选择左半边或者后半边,继续迭代式地查找,直到范围缩小到单个的词。如果到最终仍然无法找到,则返回不存在。

在 a 到 g 的 7 个字符中查找 f 的过程,画成了一张图:
《程序员的数学基础课 迭代法(自我提升第十三天)》
说的这两个例子,都属于迭代法中的二分法,二分法其实也体现了二进制的思想(这个菜鸟不是很清楚,为什么能体现,搜索‘一下,发现二分法又叫二进制搜索法,希望有理解的读者,积极留言!!!)。

小结

到这里,我想你对迭代的核心思路有了比较深入的理解。

实际上,人类并不擅长重复性的劳动,而计算机却很适合做这种事。这也是为什么,以重复为特点的迭代法在编程中有着广泛的应用。不过,日常的实际项目可能并没有体现出明显的重复性,以至于让我们很容易就忽视了迭代法的使用。所以,你要多观察问题的现象,思考其本质,看看不断更新变量值或者缩小搜索的区间范围,是否可以获得最终的解(或近似解、局部最优解),如果是,那么你就可以尝试迭代法。

菜鸟自己总结其实就一句话:迭代法,对应的就是循环语句递归语句,记住不断的新的变量由旧的推出就行了。

其实该讲里面还有代码,不过都是java写的,考虑到读者可能没学过java,所以菜鸟没有将其列出。[ 其实就是菜鸟想自己写,因为java忘记了(XωX) ]

    原文作者:PBitW
    原文地址: https://blog.csdn.net/langwang_100/article/details/106784036
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞