c++ - sqrt时间复杂度比较

标签 c++ sqrt

这是循环吗--

for(int i = 0 ; i < sqrt(number) ; i++)
{
    //some operations
}

比这更快——

int length = sqrt(number);
for(int i = 0 ; i < length ; i++)
{
    //some operations
}

我在在线法官的代码中得到了 TLE,但是当我用长度替换循环中的 sqrt 时,我接受了它。

考虑到 number to be <=1000000000,您能否指出使用 sqrt 的循环的时间复杂度?

最佳答案

两个循环之间的时间复杂度本身没有区别(除非 sqrt 本身的复杂度取决于数量)但是不同的是多少次您正在计算平方根。

如果没有优化,比如编译器会自动将循环不变的东西移出循环(假设在这种情况下甚至允许这样做,因为编译器必须检查很多东西以确保它们不会影响循环的结果或副作用sqrt 调用),下面的代码将计算平方根大约一千次(每次迭代一次):

number = 1000000;
for(int i = 0 ; i < sqrt(number) ; i++) { ... }

但是,这段代码只会计算一次:

number = 1000000;
root = sqrt(number);
for(int i = 0 ; i < root ; i++) { ... }

关于c++ - sqrt时间复杂度比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30612699/

相关文章:

c++ - Visual Studio 2012 - 在单独的文件中使用 OpenGL(GLU、GLUT)的删除功能

c++ - 链接 Boost 正则表达式

<cmath> SQRT() 的 c++ 实用计算复杂度

math - 为什么 2 不等于 √2 * √2?

c - 使用 64 位或 32 位编译时的不同行为或 sqrt

c++ - std::tuple 比 std::array 快吗?

c++ - 成员与非成员函数,返回拷贝或引用?

matlab - 如何创建随行索引和数据变化的三角矩阵?

c++ - wxWidgets 程序段错误

python - 计算具有负值的大型矩阵的 sqrt 的内存有效方法