时间复杂度 空间复杂度 算法稳定性

1. 时间复杂度

1.1 概念(时间复杂度:执行语句的次数)

首先要说的是,时间复杂度的计算并不是计算程序具体运行的时间,而是算法执行语句的次数。

1.2 时间复杂度的计算(例子)

(1)如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。

int x=1;
while (x <10)
{
    x++;
}

该算法执行次数是10,是一个常数,用时间复杂度表示是O(1)。

(2)当有若干个循环语句时,算法的时间复杂度是由嵌套层数最多的循环语句中最内层语句的频度f(n)决定的。

for (i = 0; i < n; i++)
{
    for (j = 0; j < n; j++)
    {
        ;
    }
}

该算法for循环,最外层循环每执行一次,内层循环都要执行n次,执行次数是根据n所决定的,时间复杂度是O(n^2)。

2. 空间复杂度

2.1 概念(空间复杂度:临时空间大小)

空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度。

2.2 计算方法:

①忽略常数,用O(1)表示
②递归算法的空间复杂度=递归深度N*每次递归所要的辅助空间
③对于单线程来说,递归有运行时堆栈,
求的是递归最深的那一次压栈所耗费的空间的个数,因为递归最深的那一次所耗费的空间足以容纳它所有递归过程。

3. 算法稳定性

简单说就是:相同元素在排序前后位置没有变化,就是稳定的。

官方称述:
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,
ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。

扫描二维码关注公众号,回复: 11665376 查看本文章

猜你喜欢

转载自blog.csdn.net/lqy971966/article/details/107367402