c++ - 功能复杂度分析
问题描述
我怎样才能得到这个功能的成本?我知道它是 O(√n) 但除了尝试很多 n 值并获得一个模式之外,我不知道如何找到它。
void foo(int n) {
int x = 2;
int y = 1;
while(y <= n) {
y += x;
++x;
}
}
解决方案
结果是sum(1,2,3,4,...,t)
什么?它等于:
sum(1,2,3,4,...,t)=(t*(t+1))/2
所以x
in 循环增加了O(t^2)
. 所以while
循环的次数将被摊销到O(sqrt(n))
,因为y
增加x
直到达到n
。
推荐阅读
- flutter - 如何在 dart/flutter 模块中仅导入特定的方法或类
- docker - 通过 kubernetes 将烧瓶容器连接到 redis 容器
- python - 如何比较两个数据框中的两列(一列包含另一列)
- php - Laravel 刀片路线在标题上显示方法
- asynchronous - NServiceBus 的自定义日志实现与 AsyncLocal 抛出异常
- javascript - php中的Morris.js条形图?
- amazon-web-services - 是否有用于轮换 AWS RDS 证书的文档?
- matplotlib - matplotlib:如何从直方图条中获取颜色(或 facecolor)?
- c# - 提供具有复杂设置配置的 Azure Web 应用
- ansible - no_device:是的,在使用 Ansible 创建 ami 时不起作用