基本数据结构
基本的数据结构{线性结构{线性表,栈和队列,串,数组和广义表}
非线性结构{树,图}}
基本的数据处理技术{查找技术,排序技术}
逻辑结构{集合结构,线性结构,树形结构,图状结构}
存储结构{顺序结构,链式结构,索引结构,散列结构}
算法5个重要特性
有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成
确定性:算法中的每一条指令必须有确切的含义,没有二义性,在任何条件下,只有唯一的一条执行路径,即对于相同的输入只能得到相同的输出
可行性:算法是可执行的,算法描述的操作可以通过已经实现的基本操作执行有限次来实现
输入:一个算法有零个或多个输入
输出:一个算法有一个或多个输出
算法设计的要求:
正确性
可读性
健壮性
高效性
算法时间效率的度量:
算法时间效率可以用依据该算法编制的程序在计算机上执行所消耗的时间来度量
两种度量方法:
事后统计:
将算法实现,测算其时间和空间开销
缺点:编写程序实现算法将花费较多的时间和精力;所得实验结果依赖于计算机的软硬件等环境因素,掩盖算法本省优劣
事前分析:
对算法所消耗资源的一种估算方法
事前分析方法:
一个算法的运行时间是指一个算法在计算机上运行所耗费的时间大致可以等于计算机执行一种简单的操作(如赋值、比较、移动等)所需的时间与算法中继续宁的简单操作次数乘积。
时间复杂度
算法运行时间=一个简单操作所需时间 X 简单操作次数
也即算法中每条语句的执行时间之和:
算法运行时间=∑每条语句的执行次数(语句频度) X 该语句执行一次所需时间
求出来取大头
算法中基本语句重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作:T(n)=O(fn)
如何找到基本语句:
算法中重复次数执行次数和算法的执行时间成正比的语句
对算法运行时间的贡献最大
执行次数最多
如何找问题规模:
n越大算法的执行时间越长
排序:n为记录数
矩阵:n为矩阵的阶数
多项式:n为多项式的项数
集合:n为元素个数
树:n为树的节点个数
图:n为图的顶点数或边数
请注意:有的情况下,算法中基本操作重复窒息感的次数还随问题的输入数据集不同而不同
【举例】顺序查找,在数组a[i]中查找值等于e的元素,返回其所在位置。
for(i=0;i<n;i++)
if(a[i]==e) return i+1;
return 0;
最好情况1次
最坏情况:n次
平均时间复杂度:O(n)
最坏时间复杂度:指在最坏情况下,算法的时间复杂度
平均时间复杂度:指在所有可能输入实例在等概率出现的情况下,算法的期望运行时间。
最好时间复杂度:指在最好情况下,算法的时间复杂度
对于复杂的算法,可以将它分成几个容易估算1的部分,然后利用大O加法法则和乘法法则,计算算法的时间复杂度:
(a)加法规则:
T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))
(b)惩罚规则:
T(n)=T1(n) X T2(n) = O(f(n)) x O(g(n)) = O(f(n)) x g(n)
算法时间效率的比较:
当n取得很大时,指数时间算法和多项式
时间算法在所需时间上非常悬殊
时间复杂度T(n)按数量级递增顺序为:
复杂度低O(1)【常数阶】O(log2n)【对数阶】O(n)【线性阶】O(nlog2n)【线性对数阶】O(n2)【平方阶】O(n3)【立方阶】O(nk)【k次方阶】O(2n)【指数阶】 复杂度高
空间复杂度
空间复杂度:算法所需存储空间的度量
算法要占用的空间
算法本身要占用的空间,输入/输出,指令,常数,变量等
算法要使用辅助空间
设计算法过程
抽象数据类型=数据的逻辑结构+抽象运算(运算的功能描述)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律