Python 为什么此函数具有对数时间复杂度(计算数字的n次根)?

Python 为什么此函数具有对数时间复杂度(计算数字的n次根)?,python,c++,math,matplotlib,time-complexity,Python,C++,Math,Matplotlib,Time Complexity,上周,我参加了一个关于计算机科学的专门的MOOC,教授使用了一种低效的方法来计算一个数字的平方根(他后来还展示了其他方法) 下面是一个用C++实现的函数: double sqrt(double num) { double eps = 0.001; double step = 0.001; double result = 0.0; while (num - (result * result) > eps) { result += s

上周,我参加了一个关于计算机科学的专门的MOOC,教授使用了一种低效的方法来计算一个数字的平方根(他后来还展示了其他方法)

下面是一个用C++实现的函数:

double sqrt(double num)
{
    double eps = 0.001;
    double step = 0.001;

    double result = 0.0;

    while (num - (result * result) > eps)
    {
        result += step;
    }

    return result;
}
我知道
while
循环将执行(num/
步数的平方根)次

我决定使用
matplotlib
绘制一个函数增长的曲线图,范围从1到199(包括1到199),结果如下:

然后,我将其与(log(x)/
步骤
)图进行比较,结果如下:

因此,我有以下问题:

  • 为什么是对数?为什么这不仅适用于平方根,而且适用于数字的任何n次根(使用上述方法)
  • sqrt
    growth和log(x)之间的差距是什么

我知道有更有效的方法可以获得相同的数字平方根结果,但我需要有人对此有所了解。

你说循环执行
sqrt(num)
次是正确的,这就增加了它的复杂性√然而,与后面的假设相反,平方根不是对数的:它只是
num^(1/2)
,这使得它在事物的大格局中是多项式

一个清晰的标志和视觉帮助是,它不是对数图上的直线:

左边的线是平方根,右边的线是以10为底的对数


这个差距显然是因为它不是对数的。

信不信由你,你的
函数'sqrt'增长
正是
f(x)=sqrt(x)/step
图。我真的需要一些睡眠。我把它错当成对数了。。谢谢你把事情弄清楚。没关系,我也需要睡一会儿:)