算法岗位笔试题举例(计算机视觉方向)

算法岗位笔试题举例(计算机视觉方向)

一 填空部分

  1. 1TB代表的字节数量是______。

                                 2^40
    

解析:1TB=1024GB=1024* 1024MB=1024* 1024* 1024KB=1024* 1024* 1024* 1024B=2^40B

  1. 一棵完全二叉树的的结点总数为18,其叶节点数为________。

                                   9
    

解析:设叶子节点个数为n0,度为1的节点个数为n1,度为2的节点个数为n2。

则有:

                n0+n1+n2=n    (1)

对于二叉树有:

                n0=n2+1         (2)

由(1)(2)可知

                n0=(n+1-n1)/2  (3)

由完全二叉树的性质可知n1=0或者1

(a) 当 n1=0时:

                n0=(n+1)/2

(b)当n1=1时:

                n0=n/2
  1. 与二进制小数0.1相等的八进制数是________。

                     0.4         
    

解析:二进制到八进制可以采用的方法是取三合一法。即从二进制的小数点为分界线,向左(向右)每三位取成一位。接着将这三位二进制按权相加。然后按顺序排列。其中如果向左(向右)取三位后,取到最高(最低)位时候,如果无法凑足三位,可以在小数点最左(最右)边补零。
例如:将二进制的(1101011.01001)转换为八进制:
1101011.01001=001 101 011 . 010 010=153.22(八进制)
同理二进制小数:0.1=000 . 100=0.4(八进制)

  1. G是一个非连通简单无向图,共有28条边,则该图至少有________个顶点

                                 9
    

解析:设边为C,顶点为N,则:

                                完全连通图:N(N-1)/2=C
                                非连通图则需要再加一个点即上述公式N+1
     28=N(N-1)/2 其中经过计算N=8 由于是非连通则N=N+1=8+1=9

5.表达式a*(b+c)-d的后缀表达形式为________________。

                        abc+* d-

解析:在数据结构中表达式可以分为前缀表达式,中缀表达式,后缀表达式。

  • 前缀表达式:运算符位于操作数之前
  • 中缀表达式:中缀表达式是一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间。中缀表达式是人们常用的算术表示方法。(人类正常公式表示方式,例如(3 + 4) × 5 - 6)
  • 后缀表达式:运算符位于操作数之后

中缀表达式转换为前缀表达式:

(1) 初始化两个栈:运算符栈S1和储存中间结果的栈S2;
(2) 从右至左扫描中缀表达式;
(3) 遇到操作数时,将其压入S2;
(4) 遇到运算符时,比较其与S1栈顶运算符的优先级:
(4-1) 如果S1为空,或栈顶运算符为右括号“)”,则直接将此运算符入栈;
(4-2) 否则,若优先级比栈顶运算符的较高或相等,也将运算符压入S1;
(4-3) 否则,将S1栈顶的运算符弹出并压入到S2中,再次转到(4-1)与S1中新的栈顶运算符相比较;
(5) 遇到括号时:
(5-1) 如果是右括号“)”,则直接压入S1;
(5-2) 如果是左括号“(”,则依次弹出S1栈顶的运算符,并压入S2,直到遇到右括号为止,此时将这一对括号丢弃;
(6) 重复步骤(2)至(5),直到表达式的最左边;
(7) 将S1中剩余的运算符依次弹出并压入S2;
(8) 依次弹出S2中的元素并输出,结果即为中缀表达式对应的前缀表达式。

中缀表达式转换后缀表达式:
(1) 初始化两个栈:运算符栈S1和储存中间结果的栈S2;
(2) 从左至右扫描中缀表达式;
(3) 遇到操作数时,将其压入S2;
(4) 遇到运算符时,比较其与S1栈顶运算符的优先级:
(4-1) 如果S1为空,或栈顶运算符为左括号“(”,则直接将此运算符入栈;
(4-2) 否则,若优先级比栈顶运算符的高,也将运算符压入S1(注意转换为前缀表达式时是优先级较高或相同,而这里则不包括相同的情况);
(4-3) 否则,将S1栈顶的运算符弹出并压入到S2中,再次转到(4-1)与S1中新的栈顶运算符相比较;
(5) 遇到括号时:
(5-1) 如果是左括号“(”,则直接压入S1;
(5-2) 如果是右括号“)”,则依次弹出S1栈顶的运算符,并压入S2,直到遇到左括号为止,此时将这一对括号丢弃;
(6) 重复步骤(2)至(5),直到表达式的最右边;
(7) 将S1中剩余的运算符依次弹出并压入S2;
(8) 依次弹出S2中的元素并输出,结果的逆序即为中缀表达式对应的后缀表达式(转换为前缀表达式时不用逆序)。

6.某二叉树的中序遍历为EGDBFCA,后序遍历为EBDGCAF,其前序遍历为________

                            FGEDBAC

解析:口诀

  • 前序遍历:根左右(根节点-左子树-右子树)
  • 中序遍历:左根右
  • 后序遍历:左右根
    已知二叉树的中序遍历为EGDBFCA,后序遍历为EBDGCAF。其中可知后序遍历最后一个点是根节点(左右根口诀)。所以该二叉树的根节点是F,同理根据中序遍历可知EGDB是该二叉树的左子树,CA是该二叉树的右子树。同理采用这种方式以此类推可以得到二叉树的排列方式


    qqqqqq.jpg

则前序遍历则为:FGEDBAC

  1. define DOUBLE(x) x+x, i=5* DOUBLE(5); i=________。

                         30
    

解析:C中的宏。我是玩python的。。这个粗略可以理解为5* 5+5=30

  1. {0、2、1、4、3、9、5、8、6、7}是以数组形式存储的最小堆,删除堆顶元素0后的结果是( )
                               {1、2、5、4、3、9、7、8、6} 

解析:

  • 最小堆:最小堆其中任一非叶节点的数据值均不大于其左子和右子的的数据值,并且根结点的值是最小的
  • 最大堆:最大堆其中任一非叶节点的数据值均不小于其左子和右子的的数据值,并且根结点的值是最大的
    最小堆和最大堆的删除过程可以如下所示:
    将二叉树的最后一个节点替换到根节点,然后自顶向下,递归调整。


    qqqq.jpg

    所以删除堆顶元素0后的结果是125439786

  1. faster rcnn回归用的什么公式?
    解析: 回归中主要采用smoothL1函数。


    image.png

    10.faster rcnn为什么采用smoothL1而不是L1或者L2?
    解析:首先呢。我们要知道两个限制梯度规则:
         * 如果IOU过大,需要梯度不至于太大。
         * 如果IOU过小,需要梯度足够小。
    首先我们知道L1,L2,smoothL1的定义(此处x代表IOU):


    image.png

    然后对其求导可得:
    image.png

    针对L2来说,如果x增大,其梯度也一直变大。其训练过程中将变得十分不稳定。针对L1来说,当x足够小时,其梯度也一直为1.这将导致训练结果不收敛。针对smoothL1来说,如果x在1以内上升时。其梯度也逐渐上升,但是当IOU足够大时,其梯度恒定为1。很符合两个规则。

    11.说一下nms的操作

  • 把置信度最高的一个boundingbox(bbox)作为目标,然后对比剩下bbox与目标bbox之间的交叉区域
  • 如果交叉区域大于设定的阈值,那么在剩下的bbox中去除该bbox(即使该bbox的置信度与目标bbox的置信度一样)这个操作就是抑制最大重叠区域
  • 把第二置信度高的bbox作为目标,重复1、2
  1. 要知道BN层,并且会推导。。。。。

你可能感兴趣的:(算法岗位笔试题举例(计算机视觉方向))