巴比伦算法是针对求根号m的近似值情况的,它的思想是这样的:

  设根号m=X0,则如果枚举有答案X(X<X0),则m/X>X0,当精度要求不高的时候,我们可以看成X=m/X=X0,而如果精度要求比较高,我们只需取X和m/X的平均值作为新的枚举答案X再进行操作,可以证明这样会一直逼近答案,至于做几次完全取决于精度要求。而实践证明这样求根号的速度极快

% 计算数字m的平方根的巴比伦算法:

% (1)先猜一个答案guess(可以将m/2作为第一个答案);

% (2)计算r=m/guess;

% (3)令guess=(guess+r)/2;

% (4)如有必要返回第2步重复多次。步骤2和步骤3的重复次数越多, guess就越接近m的平方根。

—————————————————————————————————————————————————————————————————————————

然后本渣又想到能不能推广到n次方根,和HZH大神讨论无果后又问大神,大神给出了……一个解答……:

算法的正确性依赖于x=sqrt(N)为差分方程a(n+1)=(an+N/an)/2的吸引不动点吧,如果推广到高次根可能会使耗散力增加而导致周期倍分叉而不可做吧

(PS:本渣真是数学弱爆了完全读不懂,这里mark一下希望以后能看懂……(众:你这渣渣一辈子都不懂……))

额用人话解释一下:由于2次根号太特殊所以高次根号不能推广(BY YJT大神)

但不久后,vfk大神有说:

如果我没有脑残的话……

真相是,那家伙就是牛顿迭代

f(x) = x^2 - a
f'(x) = 2x
所以式子为
x' = x - (x^2 - a) / (2x) = (x + a / x) / 2

所以说,要想拓展到m次……
f(x) = x^m - a
f'(x) = m * x^(m - 1)
所以式子为
x' = x - (x^m - a) / (m * x^(m - 1)) = x * (1 - 1 / m) + a / (m * x^(m - 1))
只要初始估计充分接近根就可以获得很好的效果……看起来abs(f''(r) / (2 * f'(r)))不是很大的样子

大家好我是不会证其无论取何初始值一定收敛的sb

(PS:虽然本渣看不懂但是Vfk说的大概是取适当的初始貌似可以……)

求根号m(巴比伦算法)的更多相关文章

  1. 高效求幂取余 算法,复杂度 log(n)

    做TopCoder SRM 576 D2 L3 题目时,程序有个地方需要对一个数大量求幂并取余,导致程序运行时间很长,看了Editoral之后,发现一个超级高效的求幂并取余的算法,之前做System ...

  2. SPFA求最短路——Bellman-Ford算法的优化

    SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环.SPFA 最坏情况下复杂度和朴素 Bellman-Ford 相同,为 O(VE), ...

  3. POJ 1815 - Friendship - [拆点最大流求最小点割集][暴力枚举求升序割点] - [Dinic算法模板 - 邻接矩阵型]

    妖怪题目,做到现在:2017/8/19 - 1:41…… 不过想想还是值得的,至少邻接矩阵型的Dinic算法模板get√ 题目链接:http://poj.org/problem?id=1815 Tim ...

  4. 无向连通图求割点(tarjan算法去掉改割点剩下的联通分量数目)

    poj2117 Electricity Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 3603   Accepted: 12 ...

  5. hihocoder 1142 三分求极值【三分算法 模板应用】

    #1142 : 三分·三分求极值 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 这一次我们就简单一点了,题目在此: 在直角坐标系中有一条抛物线y=ax^2+bx+c和一 ...

  6. 计算几何--求凸包模板--Graham算法--poj 1113

    Wall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28157   Accepted: 9401 Description ...

  7. 求最小生成树的kruskal算法

    连通无向图有最小生成树,边权从小到大排序,每次尝试加入权最小的边,如果不成圈,就把这边加进去,所有边扫一遍就求出了最小生成树. 判断连通分支用Union-Set(并查集),就是把连通的点看成一个集合, ...

  8. 求最大流dinic算法模板

    //最短增广路,Dinic算法 struct Edge { int from,to,cap,flow; };//弧度 void AddEdge(int from,int to,int cap) //增 ...

  9. 求LCA练习+部分算法复习 2017.1.22

    第一题就LCA即可.不过推荐用Tarjan(最快,常数很小).然后Tarjan的时候顺便就出一个dist[i],表示i节点到根节点的距离.求出了LCA,那么两点间的距离就为dist[u] + dist ...

随机推荐

  1. python 小程序练习

    还有一些小bug 基本有 输入用户名密码 认证成功后显示欢迎信息 输出三次后锁定 # -*- coding:utf-8 -*- account_file=('C:\Users\guigu\Deskto ...

  2. Centos开机自启动redis

    修改redis.conf,打开后台运行选项: # By default Redis does not run as a daemon. Use 'yes' if you need it. # Note ...

  3. 八皇后,回溯与递归(Python实现)

    八皇后问题是十九世纪著名的数学家高斯1850年提出 .以下为python语句的八皇后代码,摘自<Python基础教程>,代码相对于其他语言,来得短小且一次性可以打印出92种结果.同时可以扩 ...

  4. ZOJ 3232 It's not Floyd Algorithm --强连通分量+Floyd

    题意:给你一个传递闭包的矩阵,mp[u][v] = 1表示u可以到达v,为0代表不可到达,问你至少需要多少条边组成的传递闭包符合这个矩阵给出的关系 分析:考虑一个强连通分量,如果这个分量有n个节点,那 ...

  5. Java语法基础(一)----关键字、标识符、常量、变量

    一.关键字: 关键字:被Java语言赋予特定含义的单词.组成关键字的字母全部小写.注:goto和const作为保留字存在,目前并不使用.main并不是关键字. 二.标识符: 标识符:就是给类,接口,方 ...

  6. C# Process执行bat

    Process类 System.Diagnostics 命名空间提供类,使您能够与系统进程.事件日志和性能计数器进行交互. Process类提供对本地和远程进程的访问并使您能够启动和停止本地系统进程. ...

  7. NGUI图片字(Bitmap图片转文字)

    用图片字而不是图片 美术和程序的配合,需要程序能够很快抓住问题重点并提出解决方案.美术出的图片字比我们使用的字体更好好看,那么是否要一个个图片去拼成数字呢? NGUI创建图片字 准备材料 美术提供的数 ...

  8. 2D Skeletal Animation Ready

    骨骼动画 Cool 昨天研究了一天的2D骨骼动画,自己动手做了骨骼动画,感觉比用序列帧做动画方便多了,非常Cool ! 刚开始做骨骼动画用的是一整张图,做动画时在分配完权重之后,拉伸顶点上连接着的其它 ...

  9. 如何修改myeclipse 内存,eclipse.ini中各个参数的作用。

    修改MyEclipse/eclipse文件夹中配置文件eclipse.ini中的内存分配就哦了 =================================== 一般的ini文件设置主要包括以下 ...

  10. Linux下如何知道文件被那个进程写

    http://blog.yufeng.info/archives/2581#more-2581