dat*_*tta 7 c++ big-o asymptotic-complexity
我确定一个数字是否为素数的原始函数是:
bool is_prime(int x) {
for (int y = 2; y < x; ++y) {
if (x % y == 0) {
return false;
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
这很复杂,O(x)因为你可能不得不去x.
我已经了解了一些优化,需要检查我的big-o.这是改进的计划:
bool is_prime(int x)
{
if (x % 2 == 0 && x > 2) {
return false;
}
for (int y = 3; y*y <= x; y += 2) {
if (x % y == 0) {
return false;
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
事实上我现在正在sqrt()改变这个O(sqrt(x))吗?
是的,但这里没有n.新函数的复杂性为O(sqrt(x)).当你说O(N)并且没有指定N是什么时,它通常被认为是输入的大小.这对于采用单个数字参数的函数来说是令人困惑的,因此在这些情况下,您应该是明确的.
| 归档时间: |
|
| 查看次数: |
568 次 |
| 最近记录: |