1.牛顿迭代法的原理:
1.一元方程的牛顿迭代法:可参考力扣官方解链接: https://leetcode-cn.com/problems/sqrtx/solution/x-de-ping-fang-gen-by-leetcode-solution/.
迭代公式为:
使用场景:函数可导,求函数零点
2.重根时的牛顿迭代改善
使用场景:有重根时
3.离散牛顿
使用割线法:
使用场景:函数不可导
2.使用牛顿迭代法求解此题
迭代公式即
代码为:
class Solution {
public:
int mySqrt(int x) {
int C = x;
double x0 = x;
if(x==0)
{
return 0;
}
while(true)
{
double xi = (x0 + C/x0)/2;
if(fabs(xi - x0)<1e-7){
break;
}
x0 = xi;
}
return (int)x0;
}
};
复杂度分析
时间复杂度:O(\log x)O(logx),此方法是二次收敛的,相较于二分查找更快。
空间复杂度:O(1)O(1)。