《数据结构》_1绪论
数据结构
- 数据结构是有某一数据对象及该对象中所有数据元素之间的关系组成的数据结构包括数据的 逻辑结构、存储结构、数据的运算三方面的内容。
- 数据的逻辑结构
- 线性结构
- 树形结构
- 图结构
- 集合结构
- 数据的存储结构
- 顺序存储结构
- 链式存储结构
- 索引结构
- 散列结构
- 数据的运算
- 搜索运算
- 插入运算
- 删除运算
- 更新运算
- ··· ···
- 数据的逻辑结构
- 抽象数据类型
ADT 抽象数据类型名
{
数据:
数据元素及其之间关系的定义
运算:
运算1(参数表):运算功能描述
··· ···
}
- 算法和算法分析
- 求解步骤:
- 输入
- 输出
- 可行性
- 确定性
- 有穷性
- 衡量的基本标准
- 正确性:功能和性能
- 可读性
- 健壮性:对不适当的输入做出适当的处理
- 高效性
- 算法的时间复杂度
- 影响算法效率的最主要因素是 问题规模
- 语句频度
- 渐近时间复杂度O(1)<O(log2n)<O(nlog2n)<O(n2)<O(n3)<O(n!)
-
参考:https://wenku.baidu.com/view/0a2e0c017dd184254b35eefdc8d376eeaeaa1719.html?rec_flag=default&mark_pay_doc=0&mark_rec_page=1&mark_rec_position=5&mark_rec=view_r_1&clear_uda_param=1&sxts=1527917128884
- 一些计算题:需要先找出基础语句,然后对其进行分析。
-
T1. int i,sum=0,n=100; //执1次 for(i=1;i<=n;i++) //执行n+1次 { sum=sum+i; //执行n次 } System.out.println(sum); //执行1次 执行次数:2n+3,渐近时间复杂度O(n) T2. int sum=0,n=100; //执行一次 sum=(1+n)*n/2; //执行一次 System.out.println(sum); //执行一次 执行次数:3,渐近时间复杂度:O(1)
T3.
void Mult(int a[n][n],int b[n][n],int c[n][n],int a)
{
for(int i=0;i<n;i++) //n+1次
for(int j=0;j<n;j++) //n(n+1)次
{
c[i][j]=0; //n²次
for(int k=0;k<n;k++) //n²(n+1)次
c[i][j]=a[i][j]b[i][j]//n³次}
}
执行次数:2n³+3n²+2n+1,渐近时间复杂度:O(n))
T4.
i=1;x=0;
do
{
x++; //[log3 n]
i=3*i; //[log3 n]
}while(i<n)
时间复杂度O(log3 n)
T5.
y=0; //1次
while(n>=y*y)
y++; //n½次 - 最好情况、最坏情况
- 求解步骤: