数据结构-绪论篇

数据结构-绪论篇:


内容:

  1. 思维导图(基于教材)
  2. 错题复盘+计算题(基于习题解析)

1.思维导图

请添加图片描述

2.错题复盘+计算题

2.1 某算法的语句执行频度为(3n+nlog2n+n^2+8),其时间复杂度为(C)

A.O(n) B.O(nlog2n) C.O(n^2) D.O(log2n)
解析:这题考的是时间复杂度计算,分析算法时间复杂度的基本方法为:找出所有语句中语句频度最大的那条语句作为基本语句,而根据定理简化算法:在计算时间复杂度时,可忽略所有低次幂项和最高次幂项的系数。可得语句频度最大的是C

2.2 以下程序段中语句"x++"的语句频度为(D)

for (i=1;i<=n;i++)
    for(j=1;j<=i;j++)
        for(k=1;k<=j;k++)
            x++;

A.(n(n+1)(2n+1))/2
B.(n(n+1)(n+1))/2
C.(n(n+1)(2n+1))/6
D.(n(n+1)(n+2))/6
解析:从程序段中不难发现,这条语句频度与各层循环变量取值有关,计算过程如下
在这里插入图片描述

2.3 以下程序段中语句"m++"的语句频度为(A)

int m=0,i,j;
for(i=1;i<=n;i++)
    for(j=1;j<=2*i;j++)
        m++;

A.n(n+1) B.n C.n+1 D.n^2
解析:原理跟上题一样,根据程序段改j的上限再计算即可
在这里插入图片描述

2.4 设一组数组中有n个数组元素,则读取第i个数组元素的平均复杂度为(C)

A.O(n) B.O(nlog2n) C.O(1) D.O(n^2)
解析:数组可以通过下标直接查找,跟数组个数无关,所以平均复杂度是O(1)

2.5 下面说法错误的是(A)

1.算法原地工作的含义是指不需要任何额外的辅助空间
2. 在相同规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2^n)的算法
3. 所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界
4. 某算法的时间复杂度为O(n^2),表明该算法的执行时间与n*n成正比
A.1 B.1,2 C.1,4 D.3
解析:原地工作是指算法在实现时所需的辅助空间相对于输入数据量而言是个常数,并不是指不需要任何额外空间,所以错误。其他语句描述的都没毛病,不过我记不住

2.6 下面算法将一维数组a中的n个数逆序存放到原数组中,空间复杂度为(B)

for(i=0;i<n;i++)
    b[i]=a[n-i-1];
for(i=0;i<n;i++)
    a[i]=b[i];

A.O(1) B.O(n) C.O(log2n) D.O(n^2)
解析:该算法是将借助数组b完成数组a的元素逆序,所以,空间复杂度为O(n)

2.7 下面算法将一维数组a中的n个数逆序存放到原数组中,空间复杂度为(A)

for(i=0;i<n/2;i++){
    t=a[i];
    a[i]=a[n-i-1];
    a[n-i-1]=t;}

A.O(1) B.O(n) C.O(log2n) D.O(n^2)
解析:该算法是将借助临时变量t完成数组a的元素逆序

2.8 设数据结构A=(D,R),其中D={1,2,3,4},R={r},r={<1,2>,<2,3>,< 3,4>,<4,1>},则数据结构A是(C)

A.线性结构 B.树结构 C.图 D.集合
解析:这题考的是逻辑结构,数据元素之间存在多对多的关系,所以是A是图结构

2.9 顺序存储结构中数据元素间的逻辑关系是由(C)表示的

A.线性结构 B.非线性结构 C.存储位置 D.指针

2.10 链式存储结构中的数据元素间的逻辑关系是由(D)表示的

A.线性结构 B.非线性结构 C.存储位置 D.指针

2.11 抽象数据类型的三个组成部分分别为(A)

A.数据对象、数据关系和基本操作 B.数据元素、逻辑结构和存储结构
C.数据项、数据元素和数据类型 D.数据元素、数据结构和数据类型

2.12 对一个算法的评价,不包括以下(B)方面的内容

A.健壮性和可读性 B.并行性 C.正确性 D.时空复杂度

2.13 通常从正确性、易读性、健壮性、高效性等四个方面评价算法的质量,以下解释错误的是(D)

A.正确性算法应能正确地实现预订的功能
B.易读性算法应易于阅读和理解,以便调试、修改和扩充
C.健壮性指当环境发生变化时,算法能适当地做出反应或进行处理,不会产生不需要的运行结果
D.高效性即达到所需要的时间性能
解析:高效性包括时间和空间两方面,不仅指时间性能高效

2.14 下面关于抽象数据类型的描述错误的是(B)

A.数据封装 B.用例驱动 C.信息隐藏 D.使用与实现相分离

2.15 某算法的时间复杂度为O(n^2),表明该算法的(C)

A.问题规模是n^2 B.执行时间是n^2 C.执行时间与n^2成正比 D.问题规模与n^2成正比

2.16 以下关于数据结构的说法中正确的是(A)

A.数据结构的逻辑结构独立于其存储结构
B.数据结构的存储结构独立于该数据结构的逻辑结构
C.数据结构的逻辑结构唯一地决定了该数据结构的存储结构
D.逻辑结构和存储结构均相同的数据结构一定为同一数据结构
解析:A:逻辑结构是从逻辑关系上描述数据,与数据的存储无关。BC:同一逻辑结构采用不同的存储方法可以得到不同的存储结构。D:从思维导图就可以看出来,数据结构包括逻辑结构、存储结构和数据运算,逻辑结构和存储结构均相同而数据运算不同的数据结构,不一定是同一数据结构。

2.17 在存储数据时,通常不仅需要存储数据元素的值,还要存储(C)

A.数据元素的类型 B.数据的基本运算 C.数据元素之间的关系 D.数据的存取方式

2.18 设n是描述问题规模的非负整数,下面程序段的时间复杂度是(A)

x=2;
while(x<n/2)
    x=2*x;

A.O(log2n) B.O(n) C.O(nlog2n) D.O(n^2)
解析:设循环体内的基本语句x=2*x的执行次数为k,执行k次时,x=2^(k+1)。由循环结束条件x<n/2可得,2^(k+1)<n/2,即k<log2n -2,k=log2n+C(C为常数),因此T(n)=O(log2n)

2.19 下面程序段的时间复杂度是(C)

count=0;
for(k=1;k<=n;k*=2)
    for(j=1;j<=n;j++)
        count++;

A.O(log2n) B.O(n) C.O(nlog2n) D.O(n^2)
解析:嵌套循环时间复杂度=内层时间复杂度*外层时间复杂度。内层循环条件跟外层循环变量无关,所以外层循环执行一次,内层循环执行n次,所以内层循环的时间复杂度为O(n)。外层循环结束条件为k<=n,增量条件定义为k*=2,所以循环次数为2^k≤n,即k≤log2n,所以外层循环的时间复杂度为O(log2n)。因此T(n)=T(内层)*T(外层)=O(n)*O(log2n)=O(nlog2n)

2.20 下面函数的时间复杂度是(B)

int func(int n){
    int i=0,sum=0;
    while(sum<n) sum+=++i;
    return i;
}

A.O(log2n) B.O(n^(1/2)) C.O(n) D.O(n^2)
解析:这段函数是求前i项和,直到该项和大于等于n,sum+=++i等价于++i;sum=sum+i;,所以sum=1+2+……+i=(1+i)*i/2,由循环结束条件sum<n可得(1+i)*i/2<n,i是循环次数,所以T(n)=O(n^(1/2))

2.21 设n是描述问题规模的非负整数,下列程序段的时间复杂度是(B)

x=0;
while(n≥(x+1)*(x+1))
x=x+1;

A.O(log2n) B.O(n^(1/2)) C.O(n) D.O(n^2)
解析:基本语句x=x+1,设循环次数为k,当执行第k次循环时,x的值为k-1。由循环结束语句得n≥k^2,所以k≤n^(1/2)

2.22 试分析下列各算法的时间复杂度

1.基本语句x=x-10;y--;x++执行次数由x,y决定,而x,y是常数,所以T(n)=O(1)

x=90,y=100;
while(y>0)
    if(x>100){
        x=x-10;
        y--;}
        else x++;

2.嵌套循环,外层执行次数为n,内层为m,所以T(n)=O(n*m)

for(i=0;i<n;i++)
    for(j=0;j<m;j++)
        a[i][j]=0;

3.嵌套循环,外层执行次数为n,内层为n,所以T(n)=O(n^2)

s=0;
for(i=0;i<n;i++)
    for(j=0;j<n;j++)
        s+=B[i][j];

4.设基本语句i=i*3执行次数为k,则3^k≤n。所以T(n)=O(log3n)

i=1;
while(i<=n)
    i=i*3;

5.基本语句x++执行次数为n-1+n-2+……+1=n(n-1)/2所以T(n)=O(n^2)

x=0;
for(i=1;i<n;i++)
    for(j=1;j<n-i;j++)
        x++;

6.跟2.21原理一样,只不过是数值变了,T(n)=O(n^(1/2))

x=n;
y=0;
while(x>=(y+1)*(y+1))
    y++;

这章重点就是记住概念,会算时间复杂度

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值