数据结构储论以及复杂度

储论

数据

定义:数据是信息的载体,所有能被输入到计算机中且能被计算机处理的符号的集合

例:生活中各种信息,如图片文字以及个人信息等

 

数据对象

定义: 具有相同性质的数据元素的集合,是数据的一个子集

例:所有学生的信息可作为数据对象

 

数据类型

定义:是一组值的集合和定义在该集合上的操作的总和

 

数据结构

定义:数据结构是相互之间存在一种或者多种特定关系的数据元素的集合

 

 

数据结构的三要素

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。

 

发表回复

电子邮件地址不会被公开。必填项已用 * 标注