1.1 基础知识
- 数据结构:带结构的数据元素的集合
- 空间复杂度S(n):根据算法写成的程序在执行时占用存储单元的长度。这个长度往往与输入数据的规模有关。空间复杂度过高的算法可能导致使用的内存超限,造成程序非正常中断
- 时间复杂度T(n):根据算法写成的程序在执行时耗费时间的长度。这个长度往往也与输入数据的规模有关。时间复杂度过高的低效算法可能导致等不到运行结果
- 常见的复杂度函数:
1.2 练习题
-
下面程序段的时间复杂度是O( )
A. m
B. n
C. m+n
D. mns=0; for(i=0;i<n;i++) for(j=0;j<m;j++) s+=a[i][j];
-
算法的时间复杂度取决于( )
A. 问题的规模
B. 待处理数据的初态
C. 问题的规模和待处理数据的初态
D. 以上都不是 -
算法的五个重要特性是 ___ 、___、___ 、___、___ 。
答案:有穷性、正确性、可行性、输入、输出 -
对于对于给定的n个元素,可以构造出的逻辑结构有 ___ 结构、 ___ 结构、 ___ 结构、 ___ 结构
答案:集合、线性、树、图 -
数据结构被形式定义为(D,S),其中D是 ___ 的有限集合,S是D上的 ___ 有限集合
答案:数据元素、关系
1.3 相关实例
- 处理较大的数导致递归爆栈
#include <stdio.h>
void PrintN(int N);
int main() {
int n;
scanf("%d", &n);
PrintN(n);
return 0;
}
void PrintN(int N) { //递归
if(N) {
PrintN(N - 1);
printf("%d ", N);
}
}
当调用递归方法输出1-N时,输入1000结果正常;输入10000结果正常;
输入100000,就不能正常显示了,占用内存空间比较大
(Process returned -1073741571 (0xC00000FD))