algorithm - 函数增长的近似值
问题描述
我正在尝试学习算法分析,但我发现运行时间有点难以理解。我有一个问题,我应该找到函数增长的精确近似值和大 O 表示法。
我想知道D的增长顺序是否为N,因为函数D最多只执行n次step()?
我有这个功能
void step() {
count++;
}
void functionD(int n) {
if (n % 2 == 0) {
step();
}
else
step();
}
解决方案
看来你打错了,因为你的要求
因为
functionD
只step()
在大多数n
时候执行?
听起来很奇怪。看看就好。两个 if
分支都做同样的事情:
void functionD(int n) {
if (n % 2 == 0) { // either n is even
step(); // ... do the step()
}
else // or n is odd
step(); // ... do exactly the same - step()
}
所以我们可以将代码简化为
void functionD(int n) {
// either n is even or odd do the step;
step();
}
现在,因为step
除了增加一个conter
void step() {
count++;
}
functionD
增加 acounter
就是这样:
void functionD(int n) {
count++;
}
最后,我们有 for functionD
: ignore n
, increment a counter
,这个操作有明显的O(1)
时间复杂度(functionD
ignores n
)。
推荐阅读
- node.js - 你如何在服务器中找到你的加入位置
- python - 功能使用问题
- couchbase - Couchbase 建模技术
- android - 在 AndroidStudio 上使用 SpongyCastle 提供程序
- typescript - 如何使用 typeof 关键字缩小类型?
- ios - UIScrollView:视图不会自动滚动
- c - 为什么要使用 fgets 读取多行文本,我们需要设置 fgets()!=NULL?
- scala - scala - 如何以 8 字节的固定大小获取 Long 值的 byteArray
- excel - 在数据工作簿和绘图工作簿之间复制粘贴的宏
- amazon-web-services - Dynamodb 一次可以扫描的最大容量