数据结构的基本概念和术语,算法的时间复杂度

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

一.相关术语

1.数据:
也就是符号,但是这些符号必需具备两个前提:能输入到计算机中且能被计算机处理。比如整型,实型,声音,图像等。
2.数据元素:
就是组成数据的基本单位。就是比如动物类的数据元素就有猫,狗等等。
3.数据项:
一个数据元素可以由多个数据项组成。比如:人都有年龄,身高,体重等数据项。**数据项是数据的最小单位。**
4.数据对象:
就是性质相同的数据元素的集合。

在这里插入图片描述

二.结构


1.逻辑结构:
就是数据对象中数据元素之间的关系。
(1)集合结构:
集合结构就是除了同属于同一个集合外,他们之间没有别的关系。
例如:

typedef struct person
{
 char name[10];      //名 
 int  year;   //年龄
float tall;  //身高    
 
}user;

这个结构体中姓名,身高,年龄就是集合结构。

(2)线性结构
数据元素是一对一的关系

在这里插入图片描述

(3)树形结构
数据元素是一种对多层的关系,这个就不用举例了吧,就是树嘛,都懂的。
(4)图形结构
数据元素是多对多的关系。
2.物理结构
简单的说就是如何把数据元素存到计算机的存储器中。
(1)顺序存储结构:
就是把数据元素存到地址连续的存储单元中,比如数组。
(2)链式存储结构:
数据元素可以存放到任意的存储单元中,但是需要用一个指针存放数据元素的地址。




!!!算法的时间复杂度

算法的时间复杂度就是算法的时间量度,记作:**T(n)=Of(n)**其中n是问题规模n的某个函数
推导大O阶的方法:
(1)用常数取代运行时间中所有的加法常数。
(2)在运行次数的函数中,只保留最高项。
(3)如果最高项存在且不是1,则去除与这个项相乘的常数。
1,常数阶
执行恒定的算法,我们称为具有O(1)的时间复杂度,即为常数阶。 例:
int sum = 1,n = 100; //执行一次  ``
sum = (1+n)*n/2; //执行一次  

5>2.线性阶要确定某个算法的阶次,需要确定某个特定语句或某个语句集运行的次数。因此,要分析算法的复杂度,关键就是要分析循环结构的运行情况。

int sum=0;
for(int i=0;i<n;i++)
{
    sum=sum+i
}

这段代码的复杂度为O(n);

对数阶:
int count=1;
while(count<n)
{ 
	count=count*2; 	
	} 

当count的每次循环不断增大,最后当count大于等于n的时候跳出循环,用x表示循环次数,得到2^x=n; 则:x=log₂n,即f(n) = log₂n,因此得出这个算法的时间复杂度为O(log2n)。

4,平方阶:
循环的时间复杂度等于循环体的复杂度乘以该循环运行的次数。
例:内层循环的时间复杂度为O(n),外层为O(n),则总的时间复杂度为O(n²)。
for(int i=0;i<n;i++)
{      
     for(int j=0;j<n;i++)
     {    
        ........   
      }
 }



常见的时间复杂度:
在这里插入图片描述
常用的时间复杂度所耗费的时间为:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值