学了2个月数据结构与算法,我被捅了268刀

前言
今天我们来讲讲数据结构与算法这个东西,一个看起来很美,却是让无数人享尽头疼随风飘扬的知识点 。
在编程领域中,一直流传着可以解决一切问题的两大神器:
数据结构
算法
所谓程序,说白了就是数据结构 + 算法,这对卧龙凤雏,二得其一,可安天下 。
不过在接触这两位大佬之前,必须先知道一些数据的概念 。
数据、数据元素、数据项
数据是指数值,字符,符号集等可被计算机化的是信息,比如整型的声音元素,实型的图像元素等等
特性:
可输入计算机
可以计算机程序处理
数据元素是组成数据的基本单元
数据项/字段组成数据元素,也是组成数据的最小单位
数据,数据元素,数据项的关系
他们仨属于包含与被包含的关系
数据项、数据元素、数据三者关系
数据,数据元素,数据项关系的例子
好了,下面先来简单认识下我们的第一件神器大佬:
数据结构
指的是数据元素之间存在一种或者多种的特定关系
其中两种关系
内容
数据结构的内容包括逻辑结构和存储/物理结构
逻辑结构:元素之间相互的逻辑关系
物理结构:逻辑结构在计算机中真实的存储映像
关系
逻辑结构和存储结构之间的关系
随后再来简单认识下我们的第二件神器大佬:
算法 概念
问题的解决方案
程序 = 数据结构 + 算法
经典算法5个特征
有限性
可行性
确定性:确保每一步都有确定含义
输入:有0或者多个输入
输出:有0或者多个输出
设计要求
1、对一切合法的数据都满足2、对几组随机输入数据都能得出满足要求的结果3、对精心选择的典型或者特殊输入数据能得出满足要求的结果4、程序没有语法错误
容器供人阅读和交流、修改
【学了2个月数据结构与算法,我被捅了268刀】1、具有容错处理2、当输入错误数据时能做出处理,不至于程序瘫痪
1、时间效率越高越好2、存储量越低越好3、第一点和第二点有矛盾,应取平衡范围
算法性能评估
从算法采用的方法策略评估
从编译代码的质量评估
从问题输入规模评估
从机器执行指令的速度评估
算法的时间性能分析
算法的时间性能 = 语句执行次数 x 语句一次执行的时间
时间复杂度
时间复杂度分类:
编写规则:
示例1:常数阶
int i= 0,sum = 0;//运行1次sum = (1+n)*n / 2;//运行1次printf("%d",sum);//运行1次// 共执行3次,执行次数不因n的增大而增大,所以 时间复杂度为 O(1)
示例2:线性阶
for(int i=0;i
示例3:平方阶
for(int i=0;i
此外还有:
时间复杂度种类
它们一家子的关系为:(避免使用指数时间阶算法)
时间复杂度的关系
平均时间复杂度和最坏时间复杂度
算法的时间复杂度除了与算法本身有关外,还与输入数据有关
最好的情况是:输入第一个数据就满足要求,假定此时时间复杂度为O(1)
最坏的情况是:遍历所有的数据后,还是没有满足要求,假定此时时间复杂为O(n)