0
点赞
收藏
分享

微信扫一扫

数据结构基础概念

心如止水_c736 2022-02-10 阅读 91

逻辑结构与存储结构

逻辑结构描述数据元素之间的关系(一对一,一对多,多对多...)

1.一种逻辑结构可以用多种物理结构来实现

2.物理结构影响逻辑结构上的各种操作的复杂度。

存储结构描述实际存放数据元素的物理结构。

算法与复杂度:


~算法:做一件事的步骤=>有穷(有确定的几步,比如说做一件事不可能是无穷步的不然的话什么时候也做不完),确定(确定的目标),可行(可以实现)【特性】=>正确(正确的方法),可读(代码可读性高),健壮(简洁),高效(用复杂度衡量)【评价标准】
~(最坏)复杂度:
1.时间复杂度:给定输入规模n,在最坏情况下需要多少时间一定能做完
2.空间复杂度:给定输入规模n,在最坏情况下需要多少额外空间一定能做完
~复杂度是一个保证,一个承诺
1.保证:指的是上限
2.复杂度:用O(数量级)表示,如果计算出的为0.5的n次方或者10的n次方,则可以直接表示为O(n)
*key1:逻辑结构描述的是关系,与数据元素本身特点以及计算机参数等没有关系
1.与数据元素本身的形式,内容,大小个数无关的是数据的(B)
A:存储结构   B:逻辑结构  C:存储实现   D:运算实现
2.从逻辑上数据结构分成(C)
A:动态结构和静态结构              B:紧凑结构和非紧凑结构
C:线性结构和非线性结构           D:内部结构和外部结构
解析:线性指一对一,非线性指一对多
3.下面哪个是非线下数据结构(A)
A:树    B:字符串    C:队列        D:栈
*key2:算法的五个特性:有穷,确定,可行,输入和输出
*key3:算法的四个评价准则:正确性,可读性,健壮性,高效性
1,对一个算法的评价,不包括如下(C)方面的内容
A:正确性和可读性        B:健壮性       C:并行性       D:时间复杂度
分析:给选项形容词前面添加‘不’字,如果可以接受,说明是评价准则,否则是必须满足的特性。
如:‘不健壮’或‘不高效’仍然是能作为一个算法的,只是不够完美,但‘不可行’或者‘不确定’就
无法容忍了,一个算法不可行或无法给出确定结果则不能称之为算法。
*key4:算法复杂度是一个保证,用O(数量级)表示
1.分析下列程序段的时间复杂度:
算法输入:n和m
int ans=0;
for (int i=0;i<n;i+=1){
    for(int j =0;j<m;j+=1){
    ans+=1} 
}
分析:
在给定算法输入n和m的情况下,无论如何该嵌套循环都会执行nm次,因此运行时间的上限,也既时间复杂度是O(mn)
2.分析下列程序段的时间复杂度:
算法输入:大小为n的数组nums,一个数组val
for (int i=0;i<n;i+=1){
    if(nums[i]==val){
    return i;}
}
分析:
最坏情况下,val位于nums的最后一位,循环内的if判断需要执行n次,因此时间复杂度为O(n).
换句话说,这个算法保证在执行至多n次判断后能结束,这是理解时间复杂度的另一个角度。
3:分析下列程序段的时间复杂度:
算法输入:n
int ans=0
for (int i=0;i<n;i+=1){
    for (int j=0;j<i;j*=2){
    ans+=1;}
}
分析:
外层循环执行n次,因此外复杂度为O(n),内层循环与i有关,而i与n直接线性相关,因此内层循环的复杂度是O(log2(n)),内外层是嵌套关系,需要将复杂度相乘,得到总的复杂度为O(nlgn),因为log以2,5,10为底不影响,在这里为了简便就以10为底。
4.分析下列算法的时间复杂度:
算法输入:n
int ans=0;
for(int i=1;i<=n;i+=1){
    if (i>1000)
        break;
    ans+=1;}
分析:
无论输入n是多少,循环至多执行1000次,因此时间复杂度为O(1000),也既常数复杂度,不管这个
常数多大,我们都认为其为O(1)。
5.在算法输入规模为n时,算法运行时间正比于9log(3的n次方),则该算法的时间复杂度为_____
分析:
9log(3的n次方)=9nlog(3),对于算法的复杂度分析时,我们不关心常数,只关心和输入规模n有关的数量级,
因此O(9nlog(3))===0(n)

举报

相关推荐

0 条评论