1、数据结构与算法的概念
1.1何为数据结构(Data Structure)?
数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存储一种或多种特定关系的数据元素的集合。通俗来讲,就是将大量杂乱无章的数据通过某种结构进行管理。(增加、删除、查找、修改)数据。
1.2何为算法?
简单来说,就是通过一系列的计算步骤,将输入的数据转化成预期的结果。好的算法能够高效的管理数据。因此数据结构与算法不分家。
1.3如何学好数据结构与算法?
2、算法效率
2.1如何衡量一个算法的好坏?
一般是从时间和空间这两个维度来衡量。即时间复杂度与空间复杂度。一个算法运行时所需的时间越短,额外申请的空间越小,那么该算法就越好。
在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经很大了。所以我们如今已经不需要再特别关注算法的空间复杂度,更关注时间复杂度。(但在笔试与面试中两者都有所考察)
3、时间复杂度
3.1时间复杂度的定义
时间复杂度是用来定性描述算法的运行时间。随着数据规模的增长,算法的运行时间是呈线性增长还是平方增长还是对数增长……
3.2如何理解数据规模
3.3为什么不直接去计算程序的运行时间呢?
- 程序的运行时间与编译环境(Debug版本下会加载调试信息,运行的较慢;Release版本下不会加载调试信息,运行的较快。)和运⾏机器的配置都有关系。比如同⼀个算法程序,在一台机器上,分别使用旧的编译器和新编译器运行时,运行的时间是有所差异的。
- 同⼀个算法程序,在低配置机器和⾼配置机器上运行时,运⾏时间也不同。
- 程序的运行时间无法在程序写好之前确定
#include<stdio.h>
#include<time.h>
int main()
{
int count = 0;
int begin = clock();//clock函数是用来求程序运行到这行代码时花费的时间。(单位是毫秒)需要包含的头文件是<time.h>
for (int i = 0; i < 1000000000; i++)
{
count++;
}
int end = clock();
printf("该算法的运行时间为%d\n", end - begin);
return 0;
}
3.4时间复杂度的计算