广东财经大学考研初试数据结构历年真题分类:数据结构和算法导论

92 阅读3分钟

选择题

[2019年第1题]. 设 n 是描述问题规模的非负整数,下面的程序片段的时间复杂度是________。

i=2; 
while(i<=n)
	i=i*2;
A.O(n2)B.O(n)C.O(nlog2n)D.O(log2n)A. O(n^2) \quad B.O(n)\quad C.O(nlog_2n) \quad D.O(log_2n)

[2019年第4题]. 设有一个递归算法如图 1 所示,则计算 fact(n)需要调用该函数的次数为____。

A. n+1 B. n-1 C. n D. n+2

int fact(int n) { //n 大于等于 0 
	if(n<=0)
        return 1; 
    else 
        return n*fact(n-1);
}

[2020年第1题]. 设n是描述问题规模的非负整数。下面的算法 1 是将一维数组 a 中的 n 个数逆序存放到原数组中,该算法的空间复杂度是________(要求用大 O 符号表示)。

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(2n) D. O(n2)O(n^2)

[2021年第4题]. 设有一个递归算法如下所示,计算F(8)需要调用该递归函数的次数为( )。

int F(int n)

{ if(n<=3) return 1;

​ else return F(n-2)+F(n-4)+1; }

A.7 B.8 C.9 D.10

[2022年第1题]. 算法的时间复杂度取决于( )。

A.问题的规模 B.待处理数据的初态 C.计算机的配置 D.A和B

[2022年第6题]. 一个递归算法必须包括( )。

A. 递归部分 B. 终止条件和递归部分 C. 迭代部分 D. 终止条件和迭代部分

[2023年第1题]. 算法的时间复杂度取决于( )。

A.问题的规模 B.待处理数据的初态 C.计算机的配置 D.A和B

[2024年第5题]. 以下几项中能取决算法时间复杂度的是( ) A. 待处理数据的最终状态 B. 问题的规模 C. 计算机的配置 D. 以上都无关

[2024年第8题]. 一个递归定义可以用递归算法求解,也可以用非递归算法求解。但从执行时间来看,通常递归算法比非递归算法( )。 A. 相等 B. 较慢 C.较快 D. 无法比较

填空题

[2019年第1题]. 算法的时间复杂度为 O(1),意味着算法的执行时间_____________________。

[2019年第2题]. 图 4 所示算法,将一维数组 a 中的 n 个数逆序存放到原数组中,其空间复杂度是_______(要求用大 O 符 号表示)。

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

[2019年第3题]. 在调用图 5 所示递归过程时,如果从键盘输入的数据依次是:3,2,1,0。则屏幕上相应的显示数据依次是________。

void test(int &sum) {
    int x;
    cin>>x; 
    if(x==0) sum=0;    
    else {
        test(sum);
        sum+=x;
        cout<<sum<<",";
    }
}

[2022年第3题]. 以下是计算X^N的算法。请在空白处填入正确的代码。该算法的时间复杂度是 (3) 。

long int Pow ( long int  X,  unsigned int  N ) {
/* 1*/ 	if ( N == 0 ) 
/* 2*/ 	      return 1; 
/* 3*/ 	if ( N == 1 ) 
/* 4*/ 	      return X; 
/* 5*/ 	if ( N % 2==0 ) 
/* 6*/1)  ;
		else 
/* 7*/2)  ;
} 

名词解释

[2020年第1题]. 数据结构

[2020年第2题]. 算法

[2020年第3题]. 算法的5个特征

[2020年第4题]. 算法的时间复杂度O(1)

[2020年第6题]. 递归函数

[2022年第2题]. 算法的空间复杂度

简答题

[2024年第1题]. 假设图1里 an 个正整数元素之和恰好为 3n,分析 fun(a, b, n) 算法的时间复杂度。

int Sum(int i)
{
    int j, s = 0;
    if (i > 0)
        for (j = 1; j <= i; j++)
            s += j;
    return s;
}

void fun(int a[], int b[], int n)
{
    int i;
    for (i = 0; i < n; i++)
        b[i] = Sum(a[i]);
}
							图1

[2024年第4题].某递归算法求解时间复杂度的递推式如下: T(n)=1 当n=0 T(n)=T(n-1)+n+3 当n>0 求该算法的时间复杂度。