首页 > 其他 > 详细

leetcode [69. x 的平方根]

时间:2020-05-09 14:42:39      阅读:41      评论:0      收藏:0      [点我收藏+]

题目:(https://leetcode-cn.com/problems/sqrtx/)

这一题可以用简单的二分来做,但在题解中看到了个以前没见过的解法:牛顿迭代法

具体方法是:假设方程 技术分享图片技术分享图片 附近有一个根,那么用以下迭代式子:
技术分享图片,依次计算x1,x2....xn,那么算出来的xn会不断逼近真正的解。

技术分享图片
所以f(x)的一次导是:
技术分享图片
牛顿迭代式:
技术分享图片

随便一个迭代的初始值,例如技术分享图片,代入上面的式子迭代。

例如计算技术分享图片,即a=2。
技术分享图片
技术分享图片
技术分享图片
……

计算器上可给出技术分享图片

上面的过程来源这个:https://www.guokr.com/question/461510/
我理解的大致原理就是不断用一段直线去代替一段曲线,这样一直做下去就可以不断逼近真实解,至于为什么?
开个坑:https://www.zhihu.com/question/20690553
等我以后数学好点了再回来看吧..

//这题代码超短
class Solution {
public:
    int mySqrt(int a) {
        long long x = a;
        while(x*x > a){
            x = (x+a/x)/2;
        }
        return (int)x;
    }
};

leetcode [69. x 的平方根]

原文:https://www.cnblogs.com/Beic233/p/12857120.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!