niusouti.com
参考答案和解析
正确答案:(6)O(nM)或O(n×M)或O(n*M)
(6)O(nM),或O(n×M),或O(n*M) 解析:本题实质上是一个0-1背包问题,该最优化问题的目标函数是
max[*]ViXi(Xi=0,1)
i=1
约束函数是
[*] PiXi≤M (xi=0,1)
0-1背包问题可用动态规划策略求得最优解,求解的递归式为
[*]
其中,nv[i][j]表示由前i项食物组合且价格不超过j的套餐的最大营养价值。问题最终要求的套餐的最大营养价值为nv[n][M]。根据上述递归式,可以很容易以自底向上的方式编写伪代码。[问题1]中伪代码的第1行到第12行计算数组nv的元素值,第1行到第4行计算i为0或者j为0时nv[i][j]的值,对应递归式的第一种情况;第7行和第8行计算当jpi时即不能选择mi时nv[i][j]的值,对应递归式的第二种情况:第9到第12行对应递归式的第三种情况,故根据递归式,空(1)的答案为nv[i-1][j]nv[i-1][j-p[i]] +v[i]。伪代码的第13行到第19行求解哪些食物放入到套餐中,食物项从后向前考虑,若nv[i][j]=nv[i-1][j],表示食物mi没有放入套餐中,即x[i]=0,故空(2)的答案为nv[i][j]=nv[i-1][j]。相反,若食物mi放入套餐中,则x[i]=1,同时套餐还能选择不超过j-p[i]的价格的食物,故空(3)的答案为j=j-p[i]。
问题2的实例要求总价格不超过100,根据上述递归式,计算出要选择的食物项为 m2、m3和m4,对应的总价值为605,总价格为100。
根据问题1的伪代码,第1行到第2行、第3行到第4行以及第14行到19行的时间复杂度为O(n),第5行到第12行的时间复杂度为O(nM)。故算法总的时间复杂度为 O(nM)。
更多“问题1中伪代码的时间复杂度为(6)(用O符号表示)。 ”相关问题
  • 第1题:

    以下是一个对数组A(含有n个数值元素)进行排序的算法伪代码,请问它的平均时间复杂度是多少()

    A.O(n)

    B.O(n^2)

    C.O(1)

    D.O(log(n))


    正确答案:B

  • 第2题:

    对n个结点的二叉树进行遍历,错误的说法是( )。

    A.不同遍历方法的时间复杂度一样

    B.用中序遍历的方式时间复杂度为O(n)

    C.后序遍历的空间复杂度为O(n)

    D.遍历的时间复杂度和空间复杂度都为O(n2)


    正确答案:D
    解析:遍历二叉树的算法中的基本操作是访问结点,不论按哪种次序进行遍历,对含n个结点的二叉树,时间复杂度都为O(n),所需的辅助空间为遍历过程中栈的最大容量,即树的深度,最坏情况下为n,则空间复杂度也为O(n)。

  • 第3题:

    若n表示问题的规模、O(f(n))表示算法的时间复杂度随n变化的增长趋势,则算法时间复杂度最小的是(59)。

    A.O(n2)

    B.O(n)

    C.O(logn)

    D.O(nlogn)


    正确答案:C
    解析:本题考查的是算法消耗的时间度量。一般情况下,一个算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作T(n)=O(f(n)),它表示随问题n的增大,算法执行时间的增长率和 f(n)的增长率相同,称做算法的渐进时间复杂度,简称时间复杂度。显然,在O(n2)、O(n)、 O(logn)和O(nlogn)中,复杂度最小的是O(logn)。

  • 第4题:

    设长度为n的链队列用单循环链表表示,若只设头指针,则入队操作的时间复杂度为_______。

    A.O(1)

    B.O(log2n)

    C.O(n)

    D.O(n2)


    正确答案:C

  • 第5题:

    给定下列代码:已知n是一个整数:foo()时间复杂度为O(1),上述代码的时间复杂度是()

    A.O(logn)

    B.O(n)

    C.O(n*log(n))

    D.O(log(n)^2)


    正确答案:B

  • 第6题:

    对以下的程序伪代码(用缩进表示程序块)进行路径覆盖测试,至少需要( )个测试用例。采用McCabe度量法计算其环路复杂度为(请作答此空)。

    A.2
    B.3
    C.4
    D.5

    答案:C
    解析:
    由公式可知V(G)=m-n+2得到14-12+2=4.

  • 第7题:

    时间复杂度记为:T(n)=O(f(n));其中n是()。

    • A、函数
    • B、问题的规模
    • C、渐近符号
    • D、规模的函数

    正确答案:B

  • 第8题:

    对用邻接矩阵表示的图进行任一种遍历时,其时间复杂度为(),对用邻接表表示的图进行任一种遍历时,其时间复杂度为()。


    正确答案:O(n2);O(e)

  • 第9题:

    常见的算法时间复杂度用大O记号表示为:常数阶()、对数阶()、线性阶()、平方阶()和指数阶()。


    正确答案:O(1),O(log2n),O(n),O(n2),O(2n)

  • 第10题:

    问答题
    我们通常采用大O形式来表示算法的时间复杂度。例如,在一个长度为n的顺序表中顺序查找一个数据元素的过程的时间复杂度为O(n),其中,n表示问题的规模。那么,O(1)表示什么?请举出一个例子加以说明。

    正确答案: O(1)表示时间复杂度与问题规模无关。例如,在堆栈或者队列中插入一个新的元素的过程的时间复杂度为O(1)。
    解析: 暂无解析

  • 第11题:

    填空题
    常见的算法时间复杂度用大O记号表示为:常数阶()、对数阶()、线性阶()、平方阶()和指数阶()。

    正确答案: O(1),O(log2n),O(n),O(n2),O(2n)
    解析: 暂无解析

  • 第12题:

    填空题
    对用邻接矩阵表示的图进行任一种遍历时,其时间复杂度为(),对用邻接表表示的图进行任一种遍历时,其时间复杂度为()。

    正确答案: O(n2),O(e)
    解析: 暂无解析

  • 第13题:

    根据以上C代码,函数heapMaximum,heapExtractMax和maxHeaplnsert的时间复杂度的紧致上界分别为(6)、(7)和(8)(用0符号表示)。


    正确答案:(6)O(1) (7)O(LOG(n)) (8)O(LOG(n))
    (6)O(1) (7)O(LOG(n)) (8)O(LOG(n)) 解析:很明显,(6)heapMaximum函数只需要访问数组元素,所以复杂度为O(1)
    (7)假设堆中的结点个数为n,则heapExtractaMax函数的复杂度主要消耗在heapify函数上,调整大顶堆的复杂度如(8)解释,该二叉树的层数,即O(logn)
    (8)同上假设,maxHeaplnsert函数的复杂度主要集中在while循环里面,而while循环最多循环次数为O(logn),即为该二叉树的层数,所以该函数复杂度为0(logn)。

  • 第14题:

    ● 若某算法在问题规模为 n 时,其基本操作的重复次数可由下式表示,则该算法的时间复杂度为 (64) 。

    (64)A. O(n) B. O(n2) C. O(logn) D. O(nlogn)


    正确答案:B

  • 第15题:

    [问题1]中伪代码的时间复杂度为 (7) (用0符号表示)。


    正确答案:(7)O(n3)
    (7)O(n3) 解析:问题1:本问题考查算法流程。第(1)空表示主循环,k是循环控制变量,故第(1)空填k=1to n。第(2)和(3)空根据题意和递归式,可分别得到答案为
    [*]
    和计算了任意两个顶点之问的最短路径之后,对每个顶点,开始统计其到所有其他顶点的最短路径之和,因此第(4)空填SP[i]=SP[i]+dy(n)。第13和第14行初始化,假设最小的到所有其他顶点的最短路径之和为第一个顶点的最小路径之和,大型超市的最佳位置为第一个顶点,故第(5)空填rain_v=l。最后要求返回大型超市的最佳位置,即到所有其他顶点的最短路径之和最小的顶点。
    问题2:本问题考查[问题1]中的伪代码2—8行,计算任意两点之间的最短路径,有三重循环,故时间复杂度0(n3)。第9~12行,计算任意两点之间的最短路径之和,有两重循环,故时间复杂度为0(n2)。第15—18行,在所有点的最短路径之和中找到最小的最短路径之和,时间复杂度为O(n)。故算法总的时间复杂度为O(n3)。

  • 第16题:

    以下是根据文件大小分配存储空间的一个算法伪代码,请问其空间复杂度是多少()

    A.O(n)

    B.O(n^2)

    C.O(2^n)

    D.O(n*log(n))


    正确答案:C

  • 第17题:

    对以下的程序伪代码(用缩进表示程序块)进行路径覆盖测试,至少需要(请作答此空)个测试用例。采用McCabe度量法计算其环路复杂度为( )。

    A.2
    B.4
    C.6
    D.8

    答案:B
    解析:
    由公式可知V(G)=m-n+2得到14-12+2=4.

  • 第18题:

    某个算法的时间复杂度递归式T(n)=T(n-1)+n,其中n为问题的规模,则该算法的渐进时间复杂度为(62),若问题的规模增加了16倍,则运行时间增加(63)倍。

    A.O(n)
    B.O(nlgn)
    C.O(n2)
    D.O(n2lgn)

    答案:C
    解析:
    对于递归式,假设T(1)=1,则:
    T(n)=T(n-1)+n
    =T(n-2)+n-1+n
    =T(n-3)+n-2+n-1+n
    =1+2+…+n-1+n
    =n(n+1)/2
    可见,时间复杂度为O(n2)。若问题的规模增加了16倍,则运行时间增加了162=256倍。

  • 第19题:

    空间复杂度记为:S(n)=O(f(n));其中O表示()。

    • A、问题的规模
    • B、渐近符号
    • C、规模的函数
    • D、空间的大小

    正确答案:B

  • 第20题:

    数据结构与算法里,比孙子算经中的双层循环解决的鸡兔同笼问题的时间复杂度高的是()

    • A、O(n*n*n)
    • B、O(2^n)^表示幂
    • C、O(n!)
    • D、O(n^n)^表示幂

    正确答案:A,B,C,D

  • 第21题:

    单选题
    插入排序是一种简单实用的工具,在对数组排序时,我们可能用二分查找,对要插入的元素快速找到在已经排好元素序列中的位置。下面的描述中正确的是()。
    A

    二分查找的时间复杂度为O(lgN),因此排序的时间复杂度为O(N*lgN)

    B

    二分查找的时间复杂度为O(N),因此排序的时间复杂度为O(N*lgN)

    C

    二分查找的时间复杂度为O(lgN),因此排序的时间复杂度为O(N*N)

    D

    二分查找的时间复杂度为O(N),因此排序的时间复杂度为O(N*N)


    正确答案: B
    解析: 暂无解析

  • 第22题:

    单选题
    时间复杂度记为:T(n)=O(f(n));其中n是()。
    A

    函数

    B

    问题的规模

    C

    渐近符号

    D

    规模的函数


    正确答案: C
    解析: 暂无解析

  • 第23题:

    单选题
    空间复杂度记为:S(n)=O(f(n));其中O表示()。
    A

    问题的规模

    B

    渐近符号

    C

    规模的函数

    D

    空间的大小


    正确答案: C
    解析: 暂无解析