一些开发人员可能会停留在“大O”时间复杂度分析的概念上。 因此,您应该阅读有关big-O在本文上的工作方式。
从上面的图片中,您可以了解平衡树的外观。 “大O”是关于输入大小的问题。 在上图中,找到数字5的最短方法是什么? 显然,右边的树比左边的树花更多的钱。
1. Linear.O(n)
这是在线性时间内运行的最佳算法。 无论您有多少代码,它在每种情况下都将在相同的线性时间内运行。
2. Constant. O(k)
恒定时间算法的运行时间与输入大小无关。 例如,数学公式具有固定的运行时间,并被视为恒定时间。
3. Logarithmic. O(log(n))
对数经常出现在树上。 您可以考虑树的高度,因为它总是包括遍历树的高度并且可以被认为是时间的对数。
4. Superlinear. O(n*log(n))
O(n中的大多数排序操作2)时间。 一些流行的排序算法,例如堆排序,合并排序和快速排序。 通常,不建议这样做。
5. Quadratic or Cubic / Polynomial. O(n2) or O(n3)
蛮力算法通常在O(n2)或O(n3) because you are going to loop through all the situations. e.g. you want to find all the combinations of an array. [1,2,3] => [1,2,3], [1,3,2], [2,1,3] ... The complexity of the operation is n3时间。
6. Exponential. O(2n)
The exponential algorithm is also not the best but it is better than the factorial algorithm. One example is computing the fibonacci sequence. C(n) = C(n-1) + C(n-2). e.g. 1,1,2,3,5,8,13,21,34 ...
请参阅下图以了解阶乘:
7. Factorial. O(n!)
这是您永远不想使用的最慢的算法。 例如,列出旅行的n个国家的所有路径。 假设您有三个国家/地区,美国,墨西哥和加拿大。 您首先需要访问n个城市,n-1个城市和n-2个城市。 运行时间累积为n *(n-1)*(n-2)= O(n!)。
许多候选人都陷入了泥沼,要么过于深入细节,要么过于复杂,例如说“这是O(6 * k * n3),其中k是比较次数...”大多数软件工程师不会这样做。 不必关心这种详细程度,您通常可以简单地说“这是二次时间,因为我们有两个for循环,每个循环从1循环到n”。还有一个提示-当您尚未定义m,v或e是什么时,不要说“这是O(m + v + e)”。 通常,您要说“ ...,其中m是矩阵的高度,v是顶点的数量,e是边的数量,等等。”一旦开始引用公式而不定义要使用的常量, 您的分析将显示为业余。



2922

被折叠的 条评论
为什么被折叠?



