1、时间复杂度
算法的时间复杂度是一个函数,其定量的描述了一个算法运行时间和输入规模之间的关系。通常用O表示,且不包括这个函数的低阶和首项系数。如果一个算法的执行时间为2n^2+5n+4,那么该算法时间复杂度就可以表示为O(n^2)。
一般的时间复杂度,由好到坏大概有这么几种O(1)、O(logn)、O(n)、O(nlogn)、O(n^k)(k>=2),一般情况下,当算法时间复杂度高于O(n^2)时,性能就变得相当差,此时就该想办法寻求更优的方案。
O(n^2)的情形
for(int i=0;i<n;i++){ //code... for(int j=0;j<n;j++){ //code... } }
O(nlogn)的情形
for(int i=0;i<n;i++){ //code... for(int j=i;j<n;j++){ //code... } }
O(logn)的情形
for(int i=0;i<n;i+=2){ //code... }
O(1)的情形
//与n无关的有限次的表达式,例如赋值,简单的运算等
2、空间复杂度
空间复杂度是一个算法执行过程中所消耗的临时空间的一个度量。同时间复杂度一样,也不包括这个度量函数的低阶项和首项系数。相对的应的,空间复杂度也有O(1)、O(logn)、O(n)、O(nlogn)、O(n^k)(k>=2)。
3、稳定性
在排序算法中,评估一个算法的优劣,除了时间复杂度和空间复杂度以外,还有一个衡量指标就是稳定性。在一个待排序的序列中,可能存在多个相等的项,经过排序后如果这些项的相对次序保持不变,则我们说这个算法是稳定的,否则就是不稳定的。
研究稳定性的意义在于,如果算法是稳定的,那么第一个元素排序的结果可以被第二个等值的元素在排序时所用,也就是说可以避免多余的比较。
0条评论
点击登录参与评论