百度2019暑期实习计算机视觉岗位笔试题


       笔试共有选择题30道、简答题2道、编程题2道,分别为60分、60分、40分,两个小时。以下内容的编写全凭记忆和个人理解,如有什么不对的地方,希望大家见谅。

选择题

       具体题目肯定记不住了,就说说都有哪些题型吧。
       ①.给出一段程序,问你这段程序输出啥。
       ②.给出一段程序,填补缺失部分,让程序得到正确输出。
       ③.计算机网络知识,ICMP、ipv6基本头啥啥的。
       ④.编译原理知识,求逆波兰表达式啥啥的。
       ⑤.数据结构知识,哈夫曼编码长度啥啥的。
       ⑥.概率论知识,贝叶斯概率啥啥的。
       ⑦.图论知识,最小生成树啥啥的。
       ⑧.二维离散沃尔什变换。
       ⑨.C++里链接器的工作步骤。


       我依稀记得那道贝叶斯概率的题,一百度还真找到了。
       有一家医院做普查,得到统计数字:(1)每1000人有5个癌症病人;(2)每100个正常人有1个人试验结果为阳性;(3)每100个癌症患者有95个人试验结果为阳性。问:小明连续两次实验结果均为阳性,他是癌症病人的概率。
       我的做法是:用 z z z表示正常人,用 a a a表示癌症患者,则可以得到:
        p ( z ) = 0.995 , p ( a ) = 0.005 p(z)=0.995, p(a)=0.005 p(z)=0.995,p(a)=0.005
        p ( 阳 ∣ z ) = 0.01 , p ( 阴 ∣ z ) = 0.99 p(阳|z)=0.01, p(阴|z)=0.99 p(z)=0.01,p(z)=0.99
        p ( 阳 ∣ a ) = 0.95 , p ( 阴 ∣ a ) = 0.05 p(阳|a)=0.95, p(阴|a)=0.05 p(a)=0.95,p(a)=0.05
       则小明是癌症病人的概率为 p ( 阳 ∣ a ) p ( 阳 ∣ a ) p ( a ) p ( 阳 ∣ z ) p ( 阳 ∣ z ) p ( z ) + p ( 阳 ∣ a ) p ( 阳 ∣ a ) p ( a ) = 0.978425 \frac {p(阳|a)p(阳|a)p(a)}{p(阳|z)p(阳|z)p(z)+p(阳|a)p(阳|a)p(a)} = 0.978425 p(z)p(z)p(z)+p(a)p(a)p(a)p(a)p(a)p(a)=0.978425

简答题

       简答题一共两道题。

第一题

       相机模型中有哪些参数,写出三维空间中点到图像坐标的投影公式,镜头畸变系数有哪几种,矫正公式是什么。
       这题感觉不做相关方向的人根本不会。。。

第二题

       细粒度图像检索,如何构建模型,模型大致分为哪几部分,模型如何训练,模型的参数如何确定,怎么提升模型的效果。
       我回答如下:
       (1)模型结构分为:数据预处理部分、数据读取部分、特征提取部分、DeepHash部分、损失函数部分。数据预处理部分用于对数据进行一些数据增强和变换。数据读取部分用于为模型读入数据。特征提取部分使用vgg模型或者alexnet模型,对输入图片的特征进行提取。DeepHash部分将图片得到的特征图进行Hash编码,用于后续检索。损失函数部分将图片的预测结果和真实标签进行对照,得出损失,用于优化网络参数。
       (2)训练方法使用SGD或者ADAM,参数的确定使用grid search方法。
       (3)提升性能可以使用集成学习方法,比如bagging和boosting,也可以将特征提取网络部分改为更深层的网络。使用bagging的话,需要将数据分为n组,分别训练出n个模型,最后经过各个模型投票得到结果。使用boosting的话,先将数据进行等概率采样,得到第一次训练的数据集,用其训练一个基模型,对基模型可以正确检索的数据降低其被采样的概率,重复进行:采样+训练+修改概率,得到更好的模型。使用更深层的特征提取网络需要更多的数据,因为网络深导致参数过多,数据量不够容易造成过拟合,过拟合可以通过加dropout和BN层等方法缓解。


       当时选择题浪费了太多时间,这题答得急了,笔试结束后仔细想想,题目的重点在于细粒度图像检索,凉凉。
       可以参考这篇博客

编程题

第一题

题意

       一个长度不超过 1 0 6 10^6 106的字符串,将第一个字符移到字符串的末尾,得到一个新的字符串,无限进行这个移位操作,就可以得到无限多个字符串,输出这些字符串中不重复的字符串个数。

思路

       一看, 1 0 6 10^6 106,暴力吧,string+map,直接MLE。那咋整,string+hash+map,这回不MLE了,变成了TLE,只过了58%。
       额,笔试后想了想,周期串才会导致重复,所以用KMP求最小循环节,然后应该就可以了。

代码

#include<cstdio>
#include<map>
#include<iostream>
#include<string>
#include<algorithm>
#include<functional>

using namespace std;

char ss[1000001];

int main()
{
    while(scanf("%s",ss)!=EOF)
    {
        string s = ss;
        hash<string> hh;
        map<size_t,int> mm;
        //mm.clear();
        //hh.clear();

        int ans = 0;
        int len = s.length();
        s = s + s;
        for(int i=0;i<len; ++i)
        {
            //string tmp1 = s.substr(1,len-1);
            //string tmp2 = s.substr(0,1);
            //string tmp = s.substr(i,len);
            size_t tmp = hh(s.substr(i,len));
            if(mm[tmp]==0)
            {
                mm[tmp]=1;
                ans++;
            }
            //cout<<s<< endl;
        }
        printf("%d\n",ans);
    }
    return 0;
}

第二题

题意

       给出两个字符串 a a a b b b q q q个询问(没记错的话 q &lt; 1 0 6 q&lt;10^6 q<106),每次询问包括两个数字 l l l r r r,求字符串 b b b在字符串 a [ l , r ] a[l,r] a[l,r]中出现的次数。

思路

       我写到这道题的时候,还有4分钟笔试结束。。。凉凉鸭。瞎乱写了个暴力,刚粘到笔试页面上,笔试就结束了。。。稍微优化一下,可以在询问前处理出字符串 b b b在字符串 a a a的所有前缀的答案,然后查询就是O(1)的了,没准就过了。

代码

#include<cstdio>
#include<map>
#include<iostream>
#include<string>
#include<algorithm>
#include<functional>

using namespace std;

int main()
{
    string a,b;
    while(cin>>a)
    {
        cin>>b;
        int lenb = b.length();
        int q;
        scanf("%d",&q);
        while(q--)
        {
            int l,r;
            scanf("%d%d",&l,&r);
            int ans=0;
            for(int i=l;i<=r-lenb+1;++i)
            {
                string tmp = a.substr(i,lenb);
                if(tmp == b)
                {
                    ans++;
                    //cout<<i<<" "<<tmp;
                }
            }
            printf("%d\n",ans);
        }
    }
    return 0;
}
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值