储论
数据
定义:数据是信息的载体,所有能被输入到计算机中且能被计算机处理的符号的集合
例:生活中各种信息,如图片文字以及个人信息等
数据对象
定义: 具有相同性质的数据元素的集合,是数据的一个子集
例:所有学生的信息可作为数据对象
数据类型
定义:是一组值的集合和定义在该集合上的操作的总和
数据结构
定义:数据结构是相互之间存在一种或者多种特定关系的数据元素的集合
数据结构的三要素
1,逻辑结构
2,线性结构
3,非线性结构
数据的存储结构(物理 存储结构)
1,顺序结构(逻辑相邻 实际存储的位置也相邻)
2,链式存储(逻辑相邻 实际存储的位置可能不相邻)
3,散列存储(哈希存储)
4,索引存储(利用附加索引表)
复杂度
时间复杂度
概念; 若存在f(n)
记作为:
T (n) = O( f(n) ) , 称为O ( f (n) ) 为时间复杂度
T (n) 为常数操作的执行次数
几种常见的时间复杂度
一,常数阶 O (1)
int Sum = 0,n = 100; /* 执行一次 */ Sum = (1 + n) * n / 2; /* 执行一次 */ printf("%d", Sum); /* 执行一次 */
如上所述
这段代码的运行次数为3,通过我们的推导方法,第一步就是讲3改为1,然后保留最高阶项仍为1,所以最后的时间复杂度就为O(1)
二,线性阶O(n)
int a; for(a = 0; a< n; a++) { /* 时间复杂度为O(1)的程序步骤,在循环体中需要执行n次*/ }
如上所述
由于在循环体中,需要执行n次,所以其时间复杂度为O(n)
三,对数阶O(logn)
int i= 1; while (i < n) { i= i * 2; /* 时间复杂度为O(1)的程序步骤 */ }
如上所述
在循环体中,每次都将 i 扩大两倍,使之离 n 更加接近,用公式来表示就是2^x=n,结果就是 x=log2n。所以,这个循环的时间复杂度就是O(logn)。
四,平方阶O (n ^ 2)
int i,j; for(i = 0; i < n; i++) { for(j = 0; j < n; j++) { /* 时间复杂度为O(1)的程序步骤*/ } }
如上所述
通过计算我们可以发现,当i=1时,j 执行了n次,i=2时,j 执行了n-1次……所以最后的总次数为n^2/2+n/2。