根据大 O 复杂度对函数进行排序
Sorting functions according to their Big-O complexity
Question:
Sort the functions in increasing order of big-O complexity
- f1(n) = (n^0.999999) log n
- f2(n) = 10000000n
- f3(n) = 1.0000001^n
- f4(n) = n^2
我对这个问题的回答是:3、2、1、4(递增顺序)
基于我们可以忽略常量的规则。
但我在解答手册中找到的答案是:
The correct order of these functions is f1(n), f2(n), f4(n), f3(n).
我无法理解这一点。谁能解释一下? Here如果有帮助,就是解决方案的解释。
以下事实揭示了顺序:
O(n^k) > O(log(n))
对于任何 k > 0
.
O(k^n) > O(n^b)
对于任何 k > 1
.
这可能会让人觉得 counter-intuitive,因为 1.0000001^n
开始时真的很慢,但我们在这里谈论的是渐近复杂性。指数增长虽然在实际情况下很慢,但随着我们趋向无穷大,它会主导任何多项式增长。多项式增长大于对数增长也是如此。
所以:
- f3(n),指数增长,复杂度最高
- f4(n) 大于 f2(n) 和 f1(n) 是很明显的。
- f1(n) vs f2(n) -- 考虑它们
n^0.999999 * logn
vs n^0.999999 * n^0.000001
。所以这里决定比较的是logn
vs n^0.000001
。正如我们在事实 (1) 中所述,多项式增长 > 对数增长。所以 f2(n) > f1(n).
合并结果,我们有 O(f1(n)) < O(f2(n)) < O(f4(n)) < O(f3(n))
。
Question: Sort the functions in increasing order of big-O complexity
- f1(n) = (n^0.999999) log n
- f2(n) = 10000000n
- f3(n) = 1.0000001^n
- f4(n) = n^2
我对这个问题的回答是:3、2、1、4(递增顺序) 基于我们可以忽略常量的规则。
但我在解答手册中找到的答案是:
The correct order of these functions is f1(n), f2(n), f4(n), f3(n).
我无法理解这一点。谁能解释一下? Here如果有帮助,就是解决方案的解释。
以下事实揭示了顺序:
O(n^k) > O(log(n))
对于任何k > 0
.O(k^n) > O(n^b)
对于任何k > 1
.
这可能会让人觉得 counter-intuitive,因为 1.0000001^n
开始时真的很慢,但我们在这里谈论的是渐近复杂性。指数增长虽然在实际情况下很慢,但随着我们趋向无穷大,它会主导任何多项式增长。多项式增长大于对数增长也是如此。
所以:
- f3(n),指数增长,复杂度最高
- f4(n) 大于 f2(n) 和 f1(n) 是很明显的。
- f1(n) vs f2(n) -- 考虑它们
n^0.999999 * logn
vsn^0.999999 * n^0.000001
。所以这里决定比较的是logn
vsn^0.000001
。正如我们在事实 (1) 中所述,多项式增长 > 对数增长。所以 f2(n) > f1(n).
合并结果,我们有 O(f1(n)) < O(f2(n)) < O(f4(n)) < O(f3(n))
。