数据结构与算法
一.数据结构与算法概论
1.问题求解
我们编写程序的目的就在于解决实际的应用问题,而我们的思路就应该是分析问题,找到需求,然后确定恰当的数据结构表示数学模型,就是把问题变成数学题,接着在数据模型的基础上设计合适的算法,像我们做一道数学题,学渣是什么都看不懂,正常人是找到解题关键把题目解出来,而学霸这是瞄一眼,就知道这题有多少种解题方法,哪种步骤最少,能最快做出这道题的答案。
2.数据结构
结构=实体 + 关系
数据结构:
按照逻辑关系组织起来的一批数据(逻辑)
按一定的存储方法把它存储在计算机中(存储)
在这些数据上定义了一个运算的集合(运算)
数据结构的逻辑组织
线性结构
线性表(表,栈,队列,串等)
非线性结构
树(二叉树,Huffman树,二叉检索树等)
图(有向图,无向图等)
图–>树–>二叉树–>线性表
数据的存储结构
逻辑结构到物理存储空间的映射
四类存储结构:
- 顺序
- 链接
- 索引
- 散列
3.算法特性与分类
问题------算法------程序
通用性
对参数化输入进行问题求解
保证计算结构的正确性
有效性
算法是有限条指令组成的指令序列
即由一系列具体步骤组成
确定性
算法描述中的下一步应执行的步骤必须明确
有穷性
算法的执行必须在有限步内结束
基本算法分类:
- 穷举法
- 回溯,搜索
- 递归分治
- 贪心法
- 动态规划
算法的效率与度量
算法渐进分析大O表示法
函数f,g定义域为自然数,值域非负实数集
定义:如果存在正数c和n0,使得对任意的n≥n0,都有f(n)≤cg(n0)
称f(n)在集合O(g(n))中,简称f(n)是O(g(n))的,或f(n)=O(g(n))
大Ω表示法与大O表示法相反,大O是上限,大Ω是下限
当上下限相同时可以用θ表示法
大O表示法的运算法则
加法规则:f1(n)+f2(n)=O(max(f1(n),f2(n)))
乘法规则:f1(n)×f2(n)=O(f1(n),f2(n))