1.1什么是数据结构与算法
著名的瑞士科学家Niklaus Writh教授提出:数据结构+算法=程序。数据结构是程序的骨架,算法是程序的灵魂。
1.2数据结构
数据结构就是带有数据特性的数据元素的集合,用来研究数据的逻辑结构和物理结构以及它们直接的相互关系。
1.3算法
先举个例子从1到100求和你首先会想到怎么算呢?for循环?
#include<stdio.h>
int main()
{
int sum = 0;
for (int i = 1 ; i <= 100; i++)
{
sum += i;
}
printf("%d", sum);
return 0;
}
是不是你首先会想到用for的循环?
从1到100我们很明显看的出来这就是高斯的求和公式,我们不妨可以考虑用这种方法
#include<stdio.h>
int main01()
{
printf("%d", (1 + 100) * 100 / 2);
return 0;
}
这种方法你是不是没有想到,这种方法比上面的那种循环100次要节省空间和时间。
算法的最终目的就是让你的程序如何最优解,更节省空间和时间。写程序的方法有很多中,但要效率最高的,这就是学算法的目的。
1.4时间复杂度与空间复杂度
1.
时间复杂度
时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运
行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机
器上跑起来,才能知道。但是我们需要每个算法都上机测试吗?是可以都上机测试,但是这很麻
烦,所以才有了时间复杂度这个分析方式。一个算法所花费的时间与其中语句的执行次数成正比
例,
算法中的基本操作的执行次数,为算法的时间复杂度。
2.空间复杂度
空间复杂度是对一个算法在运行过程中
临时占用存储空间大小的量度
。空间复杂度不是程序占用
了多少
bytes
的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。空间复杂度计
算规则基本跟实践复杂度类似,也使用
大
O
渐进表示法
。
3.大
O
渐进表示法
。
大
O
符号(
Big O notation
):是用于描述函数渐进行为的数学符号。
刚刚第一题的时间复杂度是O(n),因为这里n是项数,第二题的时间复杂度是O(1)因为只需要计算一次。(更准确的说它是常数),看的出来n越大与后面的常数无关。这可以和数学高数的极限和抓大头一起理解。主要抓的是重点。
所以说算法的尽头是数学。