今天我遇到了msdn中的博客,我注意到如何计算算法的时间复杂度。我完全理解如何计算算法的时间复杂度,但最后作者提到了以下几行
添加所有内容我
(N + 4)+(5N + 2)+(4N + 2)= 10N + 8
因此上述代码的渐近时间复杂度为O(N),其中 表示上述算法是线性时间复杂度算法。
那么作者怎么说它是基于班轮时间复杂度算法的。博客的链接
答案 0 :(得分:7)
10 * x + 8
并亲自查看。
答案 1 :(得分:0)
作者只是根据他选择最合适的经验。你应该知道,计数算法的复杂性几乎总是意味着找到一个 Big-Oh 函数,而这个函数只是给定函数的上界(在你的情况下10N + 8 。
只有一些众所周知的复杂类型:线性复杂性,二次复杂性,etc。因此,计算时间复杂度的最后一步包括选择不太复杂的类型(我的意思是,线性比二次更复杂,而二次型不那么复杂,指数等等,可以用于给定函数,正确描述其复杂性。
在你的情况下,O(n)和O(n ^ 2)甚至O(2 ^ n)确实是正确的答案。但是在[{3}}中完全适合的不那么复杂的函数是 O(n),这是一个答案。
以下是Big-Oh notation definition,完全解释了 Big-Oh符号。
答案 2 :(得分:0)
时间复杂性的升序(常见的)
O(1) - Constant
O(log n) - logarithmic
O(n) - linear
O(n log n) - loglinear
O(n^2) - quadratic
注意:N增加无界限
答案 3 :(得分:0)
对于复杂性理论,你绝对应该阅读一些背景理论。它通常是渐近的复杂性,这就是为什么你可以删除较小的部分,只保留复杂性类。
关键的想法是N
和N+5
之间的区别在N
非常大的时候变得无效。
有关详细信息,请从此处开始阅读:
答案 4 :(得分:0)
一个非常实用的规则是:
当算法si的复杂性由poly 表示时,如A*n^2+B*n+C
那么复杂度的顺序(也就是O(某事)) 等于变量n的最高阶。
在A*n^2+B*n+C
poly中,订单为O(n ^ 2)。
像josnidhin解释的那样,如果聚有