目录

  • 选择题
  • 简答题
  • 第一题
  • 第二题
  • 编程题
  • 第一题
  • 题意
  • 思路
  • 代码
  • 第二题
  • 题意
  • 思路
  • 代码



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



选择题

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


       我依稀记得那道贝叶斯概率的题,一百度还真找到了。
       有一家医院做普查,得到统计数字:(1)每1000人有5个癌症病人;(2)每100个正常人有1个人试验结果为阳性;(3)每100个癌症患者有95个人试验结果为阳性。问:小明连续两次实验结果均为阳性,他是癌症病人的概率。
       我的做法是:用计算机视觉面试题 计算机视觉笔试题_笔试题表示正常人,用计算机视觉面试题 计算机视觉笔试题_暑期实习_02表示癌症患者,则可以得到:
       计算机视觉面试题 计算机视觉笔试题_暑期实习_03
       计算机视觉面试题 计算机视觉笔试题_#include_04
       计算机视觉面试题 计算机视觉笔试题_#include_05
       则小明是癌症病人的概率为计算机视觉面试题 计算机视觉笔试题_计算机视觉面试题_06

简答题

       简答题一共两道题。

第一题

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

第二题

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


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

编程题

第一题

题意

计算机视觉面试题 计算机视觉笔试题_计算机视觉面试题_07的字符串,将第一个字符移到字符串的末尾,得到一个新的字符串,无限进行这个移位操作,就可以得到无限多个字符串,输出这些字符串中不重复的字符串个数。

思路

计算机视觉面试题 计算机视觉笔试题_计算机视觉面试题_07,暴力吧,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;
}

第二题

题意

计算机视觉面试题 计算机视觉笔试题_暑期实习_02计算机视觉面试题 计算机视觉笔试题_暑期实习_10计算机视觉面试题 计算机视觉笔试题_#include_11个询问(没记错的话计算机视觉面试题 计算机视觉笔试题_笔试题_12),每次询问包括两个数字计算机视觉面试题 计算机视觉笔试题_笔试题_13计算机视觉面试题 计算机视觉笔试题_#include_14,求字符串计算机视觉面试题 计算机视觉笔试题_暑期实习_10在字符串计算机视觉面试题 计算机视觉笔试题_百度_16中出现的次数。

思路

计算机视觉面试题 计算机视觉笔试题_暑期实习_10在字符串计算机视觉面试题 计算机视觉笔试题_暑期实习_02的所有前缀的答案,然后查询就是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;
}