您必须知道的7大时空复杂度算法

一些开发人员可能会停留在“大O”时间复杂度分析的概念上。 因此,您应该阅读有关big-O在本文上的工作方式。

Alt Text

从上面的图片中,您可以了解平衡树的外观。 “大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 ...

请参阅下图以了解阶乘:

Alt Text

7. Factorial. O(n!)

这是您永远不想使用的最慢的算法。 例如,列出旅行的n个国家的所有路径。 假设您有三个国家/地区,美国,​​墨西哥和加拿大。 您首先需要访问n个城市,n-1个城市和n-2个城市。 运行时间累积为n *(n-1)*(n-2)= O(n!)。

Alt Text

许多候选人都陷入了泥沼,要么过于深入细节,要么过于复杂,例如说“这是O(6 * k * n3),其中k是比较次数...”大多数软件工程师不会这样做。 不必关心这种详细程度,您通常可以简单地说“这是二次时间,因为我们有两个for循环,每个循环从1循环到n”。还有一个提示-当您尚未定义m,v或e是什么时,不要说“这是O(m + v + e)”。 通常,您要说“ ...,其中m是矩阵的高度,v是顶点的数量,e是边的数量,等等。”一旦开始引用公式而不定义要使用的常量, 您的分析将显示为业余。

from: https://dev.to//shijiezhou/top-7-space-time-complexity-algorithm-you-must-know-34gi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>