第一章 基础知识
1.1 数据结构的基本概念
数据
数据元素
数据对象
数据结构
储存方法:顺序/链式/索引/散列
1.2 抽象数据类型
1.3问题、算法和程序
问题:计算机需要完成的任务
算法:对特定问题求解步骤的一种描述
有穷性/确定性/可行性/输入和输出/通读性/可读性/健壮性
程序:一组指示计算机每一步动作的指令序列
1.4 算法分析概述
算法分析:对一个算法所需的资源(计算时间&储存空间)进行预测的过程
程序在计算机下消耗的时间取决于:
(1)算法采用的策略
(2)问题的规模
(3)编写程序所采用的计算机语言
(4)编译和运行环境
1.5 时间复杂度计算
【题1】设n为正整数,试确定程序段中前置以记号@标记的语句的频度
i=0;k=0
do{
@ k+=1;
i++;
}while(i<=n-1)
这道题容易因为特别注意i=0且i<=n-1,而得出答案为n。
但是因为先执行do内的语句,再判断,所以实际i=0且i<-n-1,所以正确答案应该为n-1
【题2】设n为正整数,试确定程序段中前置以记号@标记的语句的频度
k=0;
for(i=0;i<=n;i++){
for(j=i;j<=n;j++)
@ k++;
}
这里一定要注意j的取值是从i开始的。除了这一点还要注意在计算的时候不要每次都加上第一个循环,即
。所以正确答案是
【题3】设n为正整数,试确定程序段中前置以记号@标记的语句的频度
i=1;j=0;
while(i+j<=n){
@ if(i>j) j++;
else i++;
}
这里应该自己推理一下找一找规律:
n=1,2,3....
i=1,2,3....
j=1,2,3....
所以正确答案是n
【题4】设n为正整数,试确定程序段中前置以记号@标记的语句的频度
x=91;y=100;
while(y>0){
@ if(x>100){
x-=10;y--;
}
else x++
}
k=1,..., 9, 10, 11...
x=92,...,100, 101,91...
y=100 , 100, 100,99...
依照这个规律,正确答案是11*100=1100
1.6 渐进分析
上限表示法
下线表示法
表示法
常见复杂度级别:
1.7空间复杂度
O(1)
如果算法执行所需要的临时空间不随着某个变量n的大小而变化,即此算法空间复杂度为一个常量,可表示为 O(1)
O(n)