数据结构学习笔记(一丶基础知识及时间空间复杂度)

数据结构是计算机存储,组织数据的方式,指相互之间存在一种或者多种特定关系的数据元素的集合。
算法就是定义良好的计算过程,它取一个或者一组的值为输入,并产生出一个或者一组值为输出,简单的来说算法就是一系列计算步骤,用来将输入数据转化为输出结果。
算法效率
算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。
1.时间复杂度
定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。但是我们需要每个算法都上机测试吗?是可以都上机测试,但是这很麻烦,所以才有了时间复杂度这个分析方式。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。

大O渐进表示法
1、用常数1取代运行时间中的所有加法常数。
2、在修改后的运行次数函数中,只保留最高阶项。
3、如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶。

例:

long Fib(size_t N) 
{
return N < 2 ? N : Fib(N-1)+Fib(N-2);
}
分析发现基本操作递归了2^N次,时间复杂度为O(2^N)。

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

long Fac(size_t N) 
{
 return N < 2 ? N : Fac(N-1)*N; 
 }
 分析发现递归调用了N次,开辟了N个栈帧,每个栈帧使用了常数个空间。空间复杂度为O(N)
上一篇:fibnacci数列递归实现


下一篇:图论Warshall和Floyd矩阵传递闭包