(干货)数据结构与算法基础

什么是数据结构?

数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种指定关系的数据元素的集合;

什么是算法?

算法(Algorithm)就是定义良好的计算过程,取一个或一组值作为输入,并产生一个或一组值作为输出;简单地说,算法就是系列的计算步骤,用来将输入的数据转化为输出;

算法效率

算法效率分析分为两种:时间效率(时间复杂度)、空间效率(空间复杂度);时间复杂度衡量算法的运行速度,空间复杂度衡量算法所占的额外空间;
计算机发展早期,存储容量很小,所以对空间复杂度很在乎,但经过发展,计算机的存储容量已经达到了很高的程度,所以**我们如今不再特别关注空间复杂度;**

时间复杂度(time complexity):

一个算法所花费的时间与其中的语句的执行次数成正比,即:算法中基本执行语句的执行次数称为算法的时间复杂度;
实际中我们计算时间复杂度时,并不需要计算精确的执行次数,只需要大概的执行次数,所以这里我们引用大O记号的渐进表示法;
由这一定义,可导出大O记号的以下性质:

(1)对于任一常数c > 0,有O(f(n)) = O(c∙f(n))
(2)对于任意常数a > b > 0,有O(na + nb ) = O(na )

性质(1)意味着,在大O记号的意义下,函数各项正的常系数可以忽略并等同于1;
性质(2)则意味着,多项式中的低次项均可忽略,只需保留最高次项;
当一个算法的基本执行语句的执行次数是某一给定常数时,那么它的时间复杂度为O(1);
例如:

int count = 0; 
for (int i = 0; i < 2N ; ++ i) 
{
    
     
for (int j = 0; j < N ; ++ j) 
{
    
    
++count; 
}
} 
for (int k = 0; k < N ; ++ k) 
{
    
    
++count;
}
int M = 10; 
while (M--) 
{
    
     
++count; 
}

这段代码的执行次数为:2N2+N+10,那么换算成大O表示的时间复杂度,则为:O(N2)
可以看出,大O记号的这些性质体现了对函数总体渐进增长趋势的关注和刻画。

空间复杂度(space complexity):

空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度 。空间复杂度不是程序占用了多少 bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟时间复杂度类似,也使用大O渐进表示法。

//作者定期分享C语言学习路上的经验,欢迎关注哦

猜你喜欢

转载自blog.csdn.net/Wyf_Fj/article/details/114128371