#T2004. 基础算法

基础算法

  1. 周末小明和爸爸妈妈三个人一起想动手做三道菜。小明负责洗菜、爸爸负责切菜、妈妈负责炒菜。假设做每道菜的顺序都是:先洗菜10 分钟,然后切菜10 分钟,最后炒菜10 分钟。那么做一道菜需要30 分钟。注意:两道不同的菜的相同步骤不可以同时进行。例如第一道菜和第二道的菜不能同时洗,也不能同时切。那么做完三道菜的最短时间需要()分钟。 {{ select(1) }}
  • 90
  • 60
  • 50
  • 40
  1. 2017 年10 月1 日是星期日,1999 年10 月1 日是()。 {{ select(2) }}
  • 星期三
  • 星期日
  • 星期五
  • 星期二
  1. 下面的故事与()算法有着异曲同工之妙。从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:“从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:‘从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事……’” {{ select(3) }}
  • 枚举
  • 递归
  • 贪心
  • 分治
  1. ()是一种选优搜索法,按选优条件向前搜索,以达到目标。当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择。 {{ select(4) }}
  • 回溯法
  • 枚举法
  • 动态规划
  • 贪心法
  1. 将(2, 6, 10, 17)分别存储到某个地址区间为0~10的哈希表中,如果哈希函数h(x) = (),将不会产生冲突,其中a mod b表示a除以b的余数 {{ select(5) }}
  • x mod 11
  • x^2 mod 11
  • (2x) mod 11
  • ⌊sqrt(x) ⌋mod 11,其中⌊sqrt(x) ⌋表示sqrt(x)下取整
  1. ()就是把一个复杂的问题分成两个或者更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后的子问题可以简单的直接求解。而原问题的解就是子问题解的并。 {{ select(6) }}
  • 动态规划
  • 贪心
  • 分治
  • 搜索
  1. 给定含有n 个不同的数的数组L=<x1, x2, ..., xn>。如果L 中存在x (1 < i < n)使得x1 < x2 < ... < xi-1 < xi > xi+1 > ... > xn, 则称 L 是单峰的,并称xi 是L 的“峰顶”。现在已知L 是单峰的,请把a-c 三行代码补全到算法中使得算法正确找到L 的峰顶。
    a.Search(k+1,n)
    b.Search(1,k-1)
    c.return L[k]
    
    Search(1,n)
    1.k⬅⌊n/2⌋
    2.if L[k]>L[k-1] and L[k]> L[k+1]
    3.then _____
    4. else if L[k]> L[k-1] and L[k] < L[k+1]
    5.then____
    6.else____
    

正确的填空顺序是( )。 {{ select(7) }}

  • c,a,b
  • c,b,a
  • a,b,c
  • b,a,c
  1. 在n(n ≥ 3)枚硬币中有一枚质量不合格的硬币(质量过轻或质量过重),如果只有一架天平可以用来称重且称重的硬币数没有限制,下面是找出这枚不合格的硬币的算法。请把a-c 三行代码补全到算法中。
    a.A⬅X∪Y
    b.A⬅Z
    c.n⬅|A|
    算法 Coin(A,n)
    1.k⬅⌊n/3⌋
    2.将A中的硬币分成X,Y,Z三个集合,使得|X|=|Y|=k,|Z|=n-2k
    3.    if W(X)≠W(Y) //W(X),W(Y)分别是X或Y的重量
    4.    then____
    5.    else____
    6.    ____
    7.    if n>2 then goto 1
    8.    if n=2 then 取A中1枚硬币与拿走硬币比较,若不等则它不合格;若相等则A中剩下的硬币不合格。
    9.    if n=1 then A中的硬币不合格
    

正确的填空顺序是()。 {{ select(8) }}

  • b, c, a
  • c, b, a
  • c, a, b
  • a, b, c
  1. 应用快速排序的分治思想,可以实现一个求第K大数的程序。假定不考虑极端的最坏情况,理论上可以实现的最低的算法时间复杂度为()。 {{ select(9) }}
  • O(n2)O( n^2)
  • O(nlogn)O(n log^ n)
  • O(n)O(n)
  • O(1)O(1)
  1. 设有100个数据元素,采用折半搜索时,最大比较次数为()。 {{ select(10) }}
  • 6
  • 7
  • 8
  • 10
  1. 有一个由4000个整数构成的顺序表,假定表中的元素已经按升序排列,采用二分查找定位一个元素。则最多需要()几次比较就能确定是否存在所查找的元素: {{ select(11) }}
  • 11次
  • 12次
  • 13次
  • 14次
  1. 对有序数组{5, 13, 19, 21, 37, 56, 64, 75, 88,92,100}进行二分查找,成功查找元素19的查找长度(比较次数)是()。 {{ select(12) }}
  • 1
  • 2
  • 3
  • 4
  1. 对有序数组{5, 13, 19, 21, 37, 56, 64, 75, 88, 92, 100}进行二分查找,等概率的情况下查找成功的平均查找长度(平均比较次数)是()。 {{ select(13) }}
  • 32/11
  • 34/11
  • 33/11
  • 35/11

14.在数据压缩编码的应用中,哈夫曼(Huffman)算法是一种采用了()思想的算法。 {{ select(14) }}

  • 贪心
  • 分治
  • 递推
  • 回溯
  1. 将数组{8, 23, 4, 16, 77, -5, 53, 100}中的元素按从大到小的顺序排列,每次可以交换任意两个元素,最少需要交换()次。 {{ select(15) }}
  • 4
  • 5
  • 6
  • 7
  1. 给定一个含N 个不相同数字的数组,在最坏情况下,找出其中最大或最小的数,至少需要N - 1 次比较操作。则最坏情况下,在该数组中同时找最大与最小的数至少需要()次比较操作。(⌈ ⌉表示向上取整,⌊ ⌋表示向下取整) {{ select(16) }}
  • ⌈3N / 2⌉ - 2
  • ⌊3N / 2⌋ - 2
  • 2N - 2
  • 2N - 4
  1. 有正实数构成的数字三角形排列形式如图所示。
    a11
        a21 a22
      a31 a32 a33
    a41 a42 a43 a44
    

第一行的数为a11a_{11};第二行的数从左到右依次为a21,a22a_{21}, a_{22};…第nn 行的数为an1,an2,,anna_{n1}, a_{n2}, …, a_{nn}。从a11a_{11}开始,每一行的数aija_{ij} 只有两条边可以分别通向下一行的两个数a(i+1)ja(i+1)(j+1)a_{(i+1)j} 和a_{(i+1)(j+1)}。用动态规划算法找出一条从a11向下通到a_{11} 向下通到a_{n1}, a_{n2}, …, a_{nn} 中某个数的路径,使得该路径上的数之和达到最大。

C[i,j]C_{[i,j]}是从a11aija_{11} 到a_{ij} 的路径上的数的最大和,并且C[i,0]=C[0,j]=0,C[i,j]C_{[i,0]}=C_{[0,j]}=0,则C_{[i,j]}=( )。 {{ select(18) }}

  • max{C[i1,j1]C_{[i-1,j-1]}, C[i1,j]C_{[i-1,j]}} + aija_{ij}
  • C[i1,j1]+C[i1,j]C_{[i-1,j-1]} + C_{[i-1,j]}
  • max{C[i1,j1]C_{[i-1,j-1]}, C[i1,j]C_{[i-1,j]}} + 1
  • max{C[i,j1]C_{[i,j-1]},C[i1,j]C_{[i-1,j]}} + aija_{ij}