前言
上一篇博客上给大家介绍了线性表的逻辑结构,
接下来我们将针对一部分内容进行剖析。
通过这篇文章的了解,我们将初步了解数据结构与算法
(文章内容参考《数据结构(第二版)》陈越主编)
1.基础认知
(1)数据结构
数据结构简单来说就是存储,组织数据与特定关系
研究数据结构就是研究数据的逻辑结构,存储结构及其基本操作
数据:是客观事物的符号表示
数据元素:是数据的基本单位,可由若干个数据项组成
数据项:是数据的不可分割的最小单位
数据对象:是性质相同的数据元素的集合,是数据的一个子集
与数据元素本身的形式,内容,相关位置,个数无关的是数据的逻辑结构
与数据元素本身的形式,内容,相关位置,个数相关的是存储结构,存储实现及运算实现
数据对象集的逻辑结构:(1)集合(2)线性(3)树(4)图形
数据对象集在计算机中的物理存储结构:(1)顺序(2)链式(3)索引(4)散列(哈希)
(2)算法
算法:解决问题的有限运算序列
计算机中的算法指的是解决某一个问题的有限运算序列
它必须具备(输入,)输出,可执行性,有穷性和确定性
算法分析的两个主要方面:
1)空间复杂度S(n):根据算法写成的程序在执行时占用存储单元的长度。这个长度往往与输入数据的规模n有关。空间复杂度过高的算法可能导致使用的内存超限,造成程序非正常中断。
2)时间复杂度T(n):根据算法写成的程序在执行时耗费时间的长度。这个长度往往也与输入数据的规模n有关。时间复杂度过高的低效算法可能导致我们有生之年都等不到运行结果。
2.时间复杂度
(1)一层循环:
解题思路:
1.列出循环趟数t及每轮循环i的变化值
2.找到t与i的关系(记为一式)
3.确定循环停止条件(记为二式)
4.联立两式解方程
5.写出结果
【例】
i=n*n;
while(i!=1)
i=i/2;
【解】
t = 0 1 2 3 ···
i = n^2 n^2/2 n^2/4 n^2/8 ···
——> i=n^2/2^t与i=1联立得 n^2/2^t = 1
所以T=O(logn)
(2)两层循环:
解题思路:
1.列出外层循环中i的变化值
2.列出内层语句的执行次数
3.求和/积写结果
【例】
int m=0,i,j;
for(i=1;i<=n;i++)
for(j=1;j<=2*i;j++)
m++;
【解】
i : 1 2 3 ··· n
内层语句执行次数:2 4 6 ``` 2n
等差数列求和n(2+2n)/2=n(n+1)
所以T=O(n^2)
(3)多层循环:
解题思路:
方法一:抽象为计算三维体积
方法二:列式求和
第三种要根据具体问题细分,如果有疑问,私信我哦uu们