algorithm - 大概是简单的运行时分析,需要解释

标签 algorithm code-analysis

根据今天的讲座,第一个循环的运行时间为 O(n),而第二个循环的运行时间为 O(log(n))

for (int i = 0; i < n; i++) { // O(n)
    stuff(); // O(1)
}

for (int i = 1; i < n; i*=4) { // O(log(n))
    stuff(); // O(1)
} 

有人可以详细说明原因吗?

最佳答案

第一个循环将精确地执行一个常数时间操作 n次。因此是O(n) .

第二个循环(从 i = 1 开始而不是 i = 0 ,我修正了一个错字)为 i 执行它的主体设置为 1, 4, 16, 64, ... 即 4^0, 4^1, 4^2, 4^3, ... 直到 n .

4^k < n什么时候k < log_4(n) .因此第二个循环的主体执行 O(log(n))次,因为以 4 为底的对数和以 e 为底的对数仅相差一个常数系数。

关于algorithm - 大概是简单的运行时分析,需要解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21318264/

相关文章:

c# - 未找到类型或命名空间 "are you missing assembly reference"而所有引用都正确

ruby-on-rails - 使用 SonarQube 扫描 Ruby on Rails 项目

visual-studio-2012 - 是否可以像普通警告一样格式化代码分析警告?

c# - 对重新排列的问题进行排序的算法,知道新位置和旧位置

Python算法顺序生成老虎机所有可能的结果

c++ - 什么样的哈希函数可以从字符串中给出 32 位值?

c - 使用 Polyspace 处理硬件

c++ - 关于斐波那契数列的程序

c++ - Collat​​z动态算法

c++ - 我的 gcov 报告中出现神秘函数