算法设计与分析(python版)-作业一

发布于:2022-12-19 ⋅ 阅读:(541) ⋅ 点赞:(0)

参考教材:算法设计与分析(Python版)         作者:王秋芬

1 . 容易 (4分)2 n=O(100n ^2)

错误

2 . 容易 (3分)10=θ(log10)

正确

3 . 容易 (3分)2^n=O(3 n)

正确

4 . 容易 (3分)logn^ 2=θ(logn+5)

正确

5 . 容易 (3分)针对顺序查找算法,影响它时间复杂度的因素只有算法的输入序列()

错误

因素有:输入序列、问题规模

6 . 容易 (3分)n!的时间复杂度为O(n)

正确

7 . 容易 (3分)递归是指自己间接或直接调用自身

正确

8 . 普通 (3分)算法的基本特征有()

A. 输入

B. 输出

C. 有限性

D. 确定性

E. 可行性

9 . 普通 (3分)渐进复杂性的含义是()情况下的复杂性。

A. 在最佳输入情况下

B. 问题规模趋向于无穷

C. 在最坏输入情况下

D. 平均各种输入之后

10 . 普通 (3分)n个连续自然数a1...an连加和问题算法(利用等差数列求和公式)的输入可以是什么()。

A. a1,n

B. an,n

C. a1,an

D. a1,an,n

11 . 普通 (3分)平均时间复杂度是指()

A. 各种情况时间复杂度按概率的加权平均

B. 最好情况和最坏情况的时间复杂度的算术平均

C. 各种情况时间复杂度按概率的算术平均

D. 出现可能性最高的情况下的时间复杂度

平均时间复杂度是指各种情况时间复杂度按概率的加权平均

12 . 容易 (3分)算法的常见描述方式不包括()

A. 代码

B. 甘特图

C. 伪代码

D. 流程图

13 . 容易 (3分)算法的基本特性不包括()

A. 先进性

B. 有穷性

C. 有输入输出

D. 无二义性

算法的特性包括有输入输出,确定性(无二义性),有限性(有穷性),可行性(能行性)。

14 . 普通 (3分)阶乘问题求n!算法的时间复杂度为()。

A. n

B. n!

C. 2n

D. n^2

15 . 容易 (3分)二分搜索(二分查找)算法的时间复杂度是()。

A. n

B. logn

C. n^2

D. 2n

16 . 普通 (3分)汉诺塔问题的时间复杂度是()。

A. n!

B. 2^n

C. 2n

D. logn

17 . 容易 (3分)下述描述算法的方式采用的是算法的哪种描述方式()? 算法:gcd(m,n) 输入:非负整数m,n,其中m,n不全为0 输出:m与n的最大公约数 1.while m>0 do 2. r←n mod m 3. n ←m 4. m ←r 5.return n

A. 自然语言

B. 程序流程图

C. 伪码

D. 程序设计语言

18 . 普通 (3分)背包问题的算法设计策略是()

A. 重量小的优先装

B. 价值大的优先装

C. 单位重量价值大的优先装

D. 以上都不对

19 . 容易 (3分)调度问题的算法设计策略是()

A. 加工时间短的优先安排

B. 加工时间长的优先安排

C. 等待时间短的优先安排

D. 以上都不对

20 . 普通 (3分)n个元素的冒泡排序代码如下:

def bubble_sort(arr):

  for i in range(len(arr) - 1):

  for j in range(len(arr) - i - 1):

  if arr[j] > arr[j + 1]:

  arr[j], arr[j + 1] = arr[j + 1], arr[j]

return arr

请分析算法的时间复杂度,用O表示()

A. O(1)

B. O(n)

C. 

D. O(nlogn)

n-1次冒泡 第一次比较n-1次 第二次比较n-2次 ......... 最后一次比较1次 共1+2+3+......+(n-1)

学生答案

21 . 普通 (3分)百元买白鸡问题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?设计一算法,则该算法的输入是()

A. 100元

B. 100只鸡

C. 各种鸡的单价

D. 无需任何输入

22 . 普通 (3分)下面算法最好情况下的时间复杂度___,最坏情况下的时间复杂度为___

def bubble_sort(nums):        

for i in range(len(nums) - 1):

            swap_flag = False  #改进后的冒泡,设置一个交换标志位

            for j in range(len(nums) - i - 1):

                if nums[j]>nums[j+1]:

                    nums[j],nums[j+1]=nums[j+1],nums[j]

                    swap_flag = True

            if not swap_flag:

                return nums  #若没有元素交换,则表示已经有序        

return nums

O(n)、O(n^2)

23 . 普通 (3分)以下递归程序fun(5,0)输出的第一个元素是___,求解过程中最大层次为___

def fun(i,d):

  if(i>1 and i%2!=0):

fun(i-i//2,d+1)

         if(i>1): fun(i//2,d+1)

1、4

24 . 普通 (3分)斐波那契数列的第1项为1,第2项为2,以后每一项等于前面两项之和,则第6项为___

13

25 . 普通 (3分)冒泡排序时间复杂度是___,堆排序时间复杂度是___。

O(n^2) 、nlogn

26 . 容易 (3分)递归算法必须具备的两个条件是___和___

边界条件或停止条件、递推方程或递归方程

27 . 普通 (3分)用O表示21+1/n的阶(O(1))

O(1)

28 . 普通 (3分)用O表示10log3 n的阶()

O(n)

29 . 普通 (3分)用O表示logn 3的阶()

O(logn)

30 . 容易 (3分)用O表示

的阶___

O(2^n)

31 . 容易 (3分)用O表示3n2+10n的阶___

O(n^2)

32 . 普通 (3分)请分析选择排序算法的时间复杂度,用O表示为:___

def selection_sort(arr):

    # 第一层for表示循环选择的遍数

    for i in range(len(arr) - 1):

          # 将起始元素设为最小元素

        min_index = i

          # 第二层for表示最小元素和后面的元素逐个比较

        for j in range(i + 1, len(arr)):

              if arr[j] < arr[min_index]:

                 # 如果当前元素比最小元素小,则把当前元素角标记为最小元素角标

                min_index = j

         # 查找一遍后将最小元素与起始元素互换

        arr[min_index] , arr[i] = arr[i] , arr[min_index]

    return arr

O(n^2)

33 . 普通 (3分)请分析下面算法的时间复杂度:

def bubble_sort(nums):

        for i in range(len(nums) - 1):

            swap_flag = False

  #改进后的冒泡,设置一个交换标志位

            for j in range(len(nums) - i - 1):

                if nums[j]>nums[j+1]:

                    nums[j],nums[j+1]=nums[j+1],nums[j]

                    swap_flag = True

            if not swap_flag:

                return nums

  #若没有元素交换,则表示已经有序

        return nums

最好情况下,比较n-1次,时间复杂度为O(n) 最坏情况下,比较n(n-1)/2次,时间复杂度为O(n^2)

本文含有隐藏内容,请 开通VIP 后查看