各大公司算法笔试题
ai算法岗位的笔试题

ai算法岗位的笔试题一、问题描述在AI算法岗位的笔试题中,通常会涉及以下几个方面的内容:1. 基本概念:回答与AI算法相关的基本概念,如机器学习、深度学习、神经网络等的定义和特点,以及它们在实际应用中的作用和意义。
2. 数据预处理:描述常见的数据预处理方法,如标准化、归一化、缺失值处理、异常值处理等。
并解释为什么需要进行数据预处理,以及预处理的方法对算法效果的影响。
3. 机器学习算法:回答关于机器学习算法的问题,如逻辑回归、支持向量机、决策树、随机森林、梯度提升树等的原理和特点,以及它们的优缺点和适用场景。
4. 深度学习算法:阐述深度学习算法的基本原理,如卷积神经网络、循环神经网络、长短时记忆网络等的结构和作用,以及它们在计算机视觉、自然语言处理等领域的应用。
5. 模型评估与调优:介绍常见的模型评估指标,如准确率、召回率、F1值、AUC等,并说明如何选择适当的评估指标来评估模型的性能。
此外,描述常用的模型调优方法,如交叉验证、网格搜索、学习曲线等,以提高模型的泛化能力。
6. 算法实现:回答有关算法实现的问题,如特征选择、特征提取、模型训练、模型预测等的具体步骤和技巧,以及常见的编程语言和工具,如Python、Scikit-learn、TensorFlow等。
二、回答示例1. 基本概念:AI算法是指通过计算机模拟人类智能的算法。
机器学习是AI算法的一个重要分支,它是通过从数据中学习规律,从而实现对未知数据的预测和分类。
深度学习则是机器学习的一种方法,它模拟人脑的神经网络结构,通过多层次的神经元和权重来提取和学习数据的特征。
2. 数据预处理:数据预处理是在进行机器学习和深度学习之前对数据进行的一系列操作,以提高算法的性能和准确度。
常见的数据预处理方法包括标准化、归一化、缺失值处理和异常值处理。
标准化是将数据转化为均值为0,方差为1的分布;归一化是将数据缩放到0-1之间的范围;缺失值处理是对缺失值进行填充或删除;异常值处理是对超出正常范围的值进行处理。
算法岗笔试题答案

算法岗笔试题答案一、选择题1. 算法复杂度的计算中,以下哪项是正确的?A. O(logn) 表示随着 n 的增加,算法执行时间成对数级增长。
B. O(nlogn) 表示算法执行时间与 n 的平方成正比。
C. O(n^2) 表示算法执行时间与 n 的增长成正比。
D. O(1) 表示算法执行时间不随输入数据规模变化。
答案:A2. 在排序算法中,快速排序的平均时间复杂度是多少?A. O(n)B. O(nlogn)C. O(n^2)D. O(1)答案:B3. 下列哪种数据结构在查找、插入和删除操作上都能保证对数复杂度?A. 链表B. 数组C. 栈D. 红黑树答案:D4. 动态规划通常用于解决哪类问题?A. 搜索问题B. 排序问题C. 最优化问题D. 字符串匹配问题答案:C5. 哈希表在理想情况下的查找、插入和删除操作的时间复杂度是多少?A. O(n)B. O(logn)C. O(1)D. O(n^2)答案:C二、简答题1. 请简述二分查找法的基本思想及其时间复杂度。
二分查找法,又称为折半查找,是一种在有序数组中查找特定元素的算法。
基本思想是通过将目标值与数组中间元素进行比较,从而缩小搜索范围,每次比较都将搜索范围缩小一半,直到找到目标值或搜索范围为空。
二分查找的时间复杂度为 O(logn),其中 n 是数组的元素数量。
2. 请解释什么是贪心算法,并给出一个实际应用的例子。
贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法策略。
贪心算法不一定会得到全局最优解,但在某些问题中能够得到较好的近似解。
一个实际应用的例子是霍夫曼编码(Huffman Coding),用于数据压缩。
该算法通过构建霍夫曼树,将文件中出现频率高的字符赋予较短的编码,频率低的字符赋予较长的编码,从而达到压缩数据的目的。
3. 请描述快速排序算法的基本步骤。
快速排序算法是一种分治法策略的排序算法,其基本步骤如下:a. 从数组中选择一个元素作为基准(pivot)。
IT公司算法笔试试题

1、将一整数逆序后放入一数组中(要求递归实现) void convert(int *result, int n) { if(n>=10) convert(result+1, n/10); *result = n%10; } int main(int argc, char* argv[]) { int n = 123456789, result[20]={}; convert(result, n); printf("%d:", n); for(int i=0; i<9; i++) printf("%d", result[i]); } 2、求高于平均分的学生学号及成绩(学号和成绩人工输入) double find(int total, int n) { int number, score, if(number != 0) { scanf("%d", &score); average = find(total+score, n+1); if(score >= average) printf("%d:%d\n", number, score); return average; } else { printf("Average=%d\n", total/n); return total/n; } } int main(int argc, char* argv[]) { find(0, 0); } 3、递归实现回文判断(如:abcdedbca 就是回文,判断一个面试者对递归理解的简单程序) int find(char *str, int n) { if(n<=1) return 1; else if(str[0]==str[n-1]) else } int main(int argc, char* argv[]) { char *str = "abcdedcba"; return 0; return find(str+1, n-2); average; scanf("%d", &number);
算法笔试题及答案

算法笔试题及答案1. 数组中的重复项给定一个整数数组,找出其中不重复的元素。
每个数字在数组中最多出现两次,除了一个数字,它出现了三次。
答案:使用一个哈希表来记录每个数字出现的次数。
遍历数组,对于每个数字,如果它在哈希表中,增加它的计数,如果计数达到3,则它是重复的元素。
2. 最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀。
答案:首先,将数组中的第一个字符串作为最长公共前缀的候选。
然后,遍历数组中的其他字符串,逐个字符比较,如果发现不匹配,就截断当前最长公共前缀。
最后,返回找到的最长公共前缀。
3. 旋转数组给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。
答案:首先,将数组的后k个元素移动到数组的前面,然后将剩余的元素向右移动k个位置。
可以通过三次反转数组的前k个元素、剩余元素和整个数组来实现。
4. 寻找缺失的数字一个整数数组包含从1到n的所有整数,但其中一个数字丢失了,找到那个丢失的数字。
答案:使用数学公式:数组的和减去1到n的和,结果就是缺失的数字。
5. 合并两个有序数组给定两个有序整数数组 nums1 和 nums2,其中 nums2 的元素个数大于 nums1,将 nums2 合并到 nums1 中,使合并后的数组仍然有序。
答案:从后向前遍历两个数组,比较两个数组的末尾元素,将较大的元素放到合并数组的末尾,然后继续比较前一个元素,直到一个数组遍历完,将剩下的元素直接追加到合并数组的末尾。
6. 实现strStr()实现 strStr() 函数,给定一个主字符串 haystack 和一个模式字符串 needle,返回模式字符串在主字符串中的开始位置。
答案:使用暴力搜索,遍历主字符串,对于每个位置,检查从该位置开始的子字符串是否与模式字符串相等。
7. 寻找旋转排序数组中的最小值假设按照升序排序的数组在某个未知的点上进行了旋转。
(例如,数组 [0,1,2,4,5,6,7] 可能旋转为 [4,5,6,7,0,1,2])。
互联网大公司面试笔试题算法

数挖一面:一面面试官是个做cv的,大概问了:卷积层个数计算方式卷积计算复杂度softmax公式softmax 的loss function卷积层的实现总体来说一面面试官人还是比较好,我不是做cv的,他问问题也比较循循善诱,遇到不会的他也会引导。
但就是感觉自己实习项目那么多机器学习大数据相关的一点也不提,有点不开心吧。
不过好在让我过了二面:讲一下实习经历然后我实习用到了xgb, xgb的loss func写一下。
我写出来了,面试官又说想看到底是怎么一阶二阶泰勒展开。
我说在代码框写的不是很方便,,然后就说了一遍。
感觉这个时候面试官就不是很满意了然后问xgb到底是怎么预测的,我说把每一轮预测的结果加起来,他说是分类问题,难道第一轮预测为第一类,第二次预测为第二类,然后把类别相加吗?我说每一轮算的都是连续值,是个得分,最后把所有的加起来得到概率再分类。
面试官表情尴尬。
(有大神来告知我么)xgb和gbdt的优势,答了一大堆。
中间掉线好多次我说道xgb里面实现了rabit通信框架,可以支持MPI和yarn,他就问怎么通信怎么计算的。
我说支持通信框架只是可以用yarn来进行资源调度,并行计算写在框架里的,并行主要是选择特征分类,把特征分裂后排序之后并行选择。
他问我还有别的吗?我说不知道(有大神来告诉我么)算法题,有N个数字,从中随机选取M个。
我说先把前M个都选了,之后的N-M个,每次生成当前数字索引范围的随机数,比如遍历到第M+1的数,生成1 - M+1的随机数,如果小于等于M就跟前面响应索引的值交换,如果不是就抛弃。
面试官说不对,我说可能想不出来,让面试官提醒下。
面试官说第一次选中第一个,第二个选中的概率就是M-1/N-1。
我说那不能保证一定选中M个啊?面试官说所以还要改进啊。
我顺着面试官的思路说我写不出来了,面试官说让我回去想,说今天面试到这里了。
一面(不记得时间了..)1. 自我介绍+简单介绍一个项目(顺着问了一些相关问题)2. 代码:一个链表,奇数位升序,偶数位降序,将其转化成完全升序的链表(楼主说可以直接拆分+反转+归并,面试官表示可以之后就直接写代码了)3. 面试官表示自己不是做NLP的,让我随便介绍一个NLP领域近期比较不错的成果4. 面试官似乎觉得时间太早又不知道该问什么了,沉默了一会问TCP/IP懂吗?(楼主没学过网络,直接说不懂)epoll了解吗(楼主就光上课时候学过一点,感觉会被问死,就直接说不太了解)二面(不记得时间了..)1. 自我介绍+介绍项目2. 项目有什么创新点?3. 推荐系统里,向量检索有什么方法可以加速吗?(楼主答LSH,然后后续问题就都是LSH相关的了,崩...)4. 我们简化一下这个问题,用LSH的思想在二维平面里找出和一个点距离最近的k个点,并写一下伪代码(楼主的解法是简单地将平面划分成很多大格子,然后维持一个{grid_id -> list of points}的map)5. 这个解法里,如果一个点在一个格子的边缘,那召回效果会变差很多,怎么缓解这个问题?(楼主没有很好的思路..回答了几种,面试官都说也许可以,但都没有很满意)6. 还能想到什么其他的方法吗?楼主对LSH没有太深的了解,想了很久后说可以用聚类的方法,召回时先找到距离最近的cluster;面试官似乎还比较满意,说facebook有一篇相关的paper楼主可以自己去读一下7. 意向工作城市?三面(55min)1. 自我介绍+介绍项目2. 项目最大的创新点是什么?项目里有哪些工作虽然没有创新性,但耗费了你大量时间?3. 项目为什么要在word embedding基础上加character embedding?4. Dropout为什么能防止过拟合?5. Batch Normalization有什么好处?6. 讲讲Adam优化算法7. 开放性问题:怎么自动从广告语中提取出一个“卖点”?(eg. 保暖,时尚)8. 你有什么问题要问我吗?意向工作城市?头条一面+二面面经头皮发麻,头条面试强度是我目前面试到的最大的。
哈希算法笔试题

哈希算法笔试题一、单选题问题1以下哪一种描述最符合哈希算法的特性?- (A) 哈希算法总是可逆的,可以从哈希值还原原始数据。
- (B) 不同的输入数据可能会产生相同的哈希值。
- (C) 哈希算法的输出长度与输入长度成正比。
- (D) 哈希算法无法用于密码学领域。
正确答案:_____问题2以下哪一个是常见的哈希算法?- (A) SHA-256- (B) AES-128- (C) RSA-1024- (D) DES正确答案:_____问题3哈希碰撞是指:- (A) 不同的输入数据产生了相同的哈希值。
- (B) 哈希算法无法生成输出值。
- (C) 哈希算法生成的值无法被存储。
- (D) 哈希值随着时间自动变化。
正确答案:_____---二、判断题问题1哈希算法输出的哈希值长度通常是固定的,与输入数据长度无关。
(对/错)正确答案:_____问题2一个好的哈希算法应该具备快速计算和抗碰撞的特性。
(对/错)正确答案:_____问题3所有的哈希算法都是安全的,可直接用于密码学领域。
(对/错)正确答案:_____三、代码填空题问题1以下是一个简单的Python代码片段,用于生成数据的SHA-256哈希值,请填充代码中的空白部分:```pythonimport hashlibdef generate_hash(data):初始化SHA-256算法hash_object = hashlib._________()更新哈希对象hash_object.update(data.encode('utf-8'))返回十六进制表示的哈希值return hash_object._________()示例使用print(generate_hash("Hello, World!"))```四、案例分析题问题1某公司需要设计一个分布式存储系统,为了保证数据能够均匀分布在多个节点上,需要使用哈希算法对数据进行分片。
前端算法笔试题

以下是一些前端算法的笔试题及答案,供您参考:一、数组排序问题描述:给定一个整数数组,请你编写一个算法将该数组按照升序排序。
解题思路:可以使用快速排序、归并排序等常见排序算法,也可以手动实现冒泡排序、插入排序等简单排序算法。
二、链表操作问题描述:给定一个链表,请你编写一个算法将该链表反转。
解题思路:可以使用迭代或递归的方式,遍历链表一次,依次修改每个节点的指向,从而实现链表的反转。
三、二分查找问题描述:给定一个有序数组,请你编写一个算法在该数组中查找一个元素,并返回该元素的索引。
解题思路:可以使用二分查找算法,在有序数组中反复将查找范围缩小一半,直到找到目标元素或查找范围为空。
四、字符串匹配问题描述:给定两个字符串S和P,请你编写一个算法判断P是否是S的子串。
解题思路:可以使用KMP算法、Boyer-Moore算法等字符串匹配算法,也可以手动实现滑动窗口等简单算法。
五、动态规划问题描述:给定一个二维数组dp,其中dp[i][j]表示到达位置(i, j)所需的最小代价,请你编写一个算法求解dp数组的值。
解题思路:可以使用动态规划算法,将dp数组视为一个状态转移方程的表格,根据状态转移方程求解dp数组的值。
六、深度优先搜索(DFS)和广度优先搜索(BFS)问题描述:给定一个有向图或无向图,请你分别使用DFS和BFS遍历该图的所有节点。
解题思路:可以使用DFS或BFS算法遍历图的所有节点,根据图的拓扑结构选择合适的算法。
七、查找最大值和最小值问题描述:给定一组数字序列,请你编写一个算法找到该序列中的最大值和最小值。
解题思路:可以使用简单的循环遍历算法,依次比较每个元素的大小,找到最大值和最小值。
以上是部分前端算法的笔试题及答案,这些题目可以考察候选人的算法基础和思维能力,帮助他们更好地了解自己的编程能力和潜力。
互联网大公司面试笔试题头条算法三面

头条算法三面凉经(小透明首答,CV今年不是红海,是死海吧,现在笔试天天做的都要自闭了)0大厂Offer,无实习,有比赛top全是视频面,每一面都简历面+编程,还是很刺激的,分享一些难点和有趣的题型,题主末流985猹硕,做视频分类和目标检测的,真心想进抖音和小姐姐愉快的玩耍,BAT,TMD提前批除了头条,其他都高冷的不面我,百度最高冷了,上海视觉连笔试通知都没发我,真的不缺人呀,为啥本科还开设AI专业,缺口呢??我都劝师弟师妹转开发了,前天淘宝技术部hr问我会不会前端+OPENCV,我。
我也没点前端和Java这个技能啊一面BN原理dropout,随机选神经元输出0,下一次的时候,这些神经元权重是重新随机初始化,还是不变?编程1、n个数的前k大,快排partition,堆排都行2、two sum(升级版的three sum没考啊)二面问我rcnn到frcnn的进化路程,有什么区别和改进C++虚函数,纯虚函数区别?(???我不是投的开发呀,还好这个会。
)Adam原理1、已知rand3函数,希望生成一个rand7函数(有意思)2、求二叉树哪一个点到其他所有点的路径总和最小,树的重心三面(因为上次面试太晚,三面放在了下周)又是简历吹比,还不怎么提问(我感觉是凉了,就像找女票一样,对方对你完全不感兴趣,吹出花也没用呀)编程就一题abaaabbbaaab要求O(N)算法,求最长子串,包含相同数目的a和b字符15分钟写完动归(自以为已经很快)升级版abc三个字符咋办,还是on,思考了6分钟我说思路,延续前面思路,要按(ab,ac)的差值来哈希和查找,是不是On我还得思考下细节,然后估计后面排队同学还很多。
面试官说面试先到这里吧PS:原以为是三面稳经,hr过半小时说我三面挂了,面试官觉得我编程能力不行???题主ACM铜牌虽然不厉害,但前几面编程都答得出来,有本事别出原题啊,前两面都两道编程,但三面就一题,就说我编程能力不行,你说我简历差我也就接受了,真的是被打击到了,心态崩了呀,昨天可蓝瘦了,也不知道是不是HC不够,宇宙条是要招神仙么,是我菜,实力真不配,总有些题超出了守备范围,那您换一个呗。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、将一整数逆序后放入一数组中(要求递归实现)void convert(int *result, int n) {if(n>=10)convert(result+1, n/10);*result = n%10;}int main(int argc, char* argv[]) {int n = 123456789, result[20]={};convert(result, n);printf("%d:", n);for(int i=0; i<9; i++)printf("%d", result[i]);}2、求高于平均分的学生学号及成绩(学号和成绩人工输入)double find(int total, int n) {int number, score, average;scanf("%d", &number);if(number != 0) {scanf("%d", &score);average = find(total+score, n+1);if(score >= average)printf("%d:%d\n", number, score);return average;} else {printf("Average=%d\n", total/n);return total/n;}}int main(int argc, char* argv[]) {find(0, 0);}3、递归实现回文判断(如:abcdedbca就是回文,判断一个面试者对递归理解的简单程序)int find(char *str, int n) {if(n<=1) return 1;else if(str[0]==str[n-1]) return find(str+1, n-2);else return 0;}int main(int argc, char* argv[]) {char *str = "abcdedcba";printf("%s: %s\n", str, find(str, strlen(str)) ? "Yes" : "No");}4、组合问题(从M个不同字符中任取N个字符的所有组合)void find(char *source, char *result, int n) {if(n==1) {while(*source)printf("%s%c\n", result, *source++);} else {int i, j;for(i=0; source[i] != 0; i++);for(j=0; result[j] != 0; j++);for(; i>=n; i--) {result[j] = *source++;result[j+1] = '\0';find(source, result, n-1);}}}int main(int argc, char* argv[]) {int const n = 3;char *source = "ABCDE", result[n+1] = {0};if(n>0 && strlen(source)>0 && n<=strlen(source))find(source, result, 3);}5、分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)void prim(int m, int n) {if(m>n) {while(m%n != 0) n++;m /= n;prim(m, n);printf("%d*", n);}}int main(int argc, char* argv[]) {int n = 435234;printf("%d=", n);prim(n, 2);}6、寻找迷宫的一条出路,o:通路; X:障碍。
(大家经常谈到的一个小算法题)#define MAX_SIZE 8int H[4] = {0, 1, 0, -1};int V[4] = {-1, 0, 1, 0};char Maze[MAX_SIZE][MAX_SIZE] = {{'X','X','X','X','X','X','X','X'},{'o','o','o','o','o','X','X','X'},{'X','o','X','X','o','o','o','X'},{'X','o','X','X','o','X','X','o'},{'X','o','X','X','X','X','X','X'},{'X','o','X','X','o','o','o','X'},{'X','o','o','o','o','X','o','o'},{'X','X','X','X','X','X','X','X'}};void FindPath(int X, int Y) {if(X == MAX_SIZE || Y == MAX_SIZE) {for(int i = 0; i < MAX_SIZE; i++)for(int j = 0; j < MAX_SIZE; j++)printf("%c%c", Maze[i][j], j < MAX_SIZE-1 ? ' ' : '\n');}else for(int k = 0; k < 4; k++)if(X >= 0 && Y >= 0 && Y < MAX_SIZE && X < MAX_SIZE && 'o' == Maze[X][Y]) {Maze[X][Y] = ' ';FindPath(X+V[k], Y+H[k]);Maze[X][Y] ='o';}}int main(int argc, char* argv[]) {FindPath(1,0);}7、随机分配座位,共50个学生,使学号相邻的同学座位不能相邻(早些时候用C#写的,没有用C改写)。
static void Main(string[] args){int Tmp = 0, Count = 50;int[] Seats = new int[Count];bool[] Students = new bool[Count];System.Random RandStudent=new System.Random();Students[Seats[0]=RandStudent.Next(0,Count)]=true;for(int i = 1; i < Count; ) {Tmp=(int)RandStudent.Next(0,Count);if((!Students[Tmp])&&(Seats[i-1]-Tmp!=1) && (Seats[i-1] - Tmp) != -1) {Seats[i++] = Tmp;Students[Tmp] = true;}}foreach(int Student in Seats)System.Console.Write(Student + " ");System.Console.Read();8、求网格中的黑点分布。
现有6*7的网格,在某些格子中有黑点,已知各行与各列中有黑点的点数之和,请在这张网格中画出黑点的位置。
(这是一网友提出的题目,说是他笔试时遇到算法题)#define ROWS 6#define COLS 7int iPointsR[ROWS] = {2, 0, 4, 3, 4, 0}; // 各行黑点数和的情况int iPointsC[COLS] = {4, 1, 2, 2, 1, 2, 1}; // 各列黑点数和的情况int iCount, iFound;int iSumR[ROWS], iSumC[COLS], Grid[ROWS][COLS];int Set(int iRowNo) {if(iRowNo == ROWS) {for(int iColNo=0; iColNo < COLS && iSumC[iColNo]==iPointsC[iColNo]; iColNo++) if(iColNo == COLS-1) {printf("\nNo.%d:\n", ++iCount);for(int i=0; i < ROWS; i++)for(int j=0; j < COLS; j++)printf("%d%c", Grid[i][j], (j+1) % COLS ? ' ' : '\n');iFound = 1; // iFound = 1,有解}} else {for(int iColNo=0; iColNo < COLS; iColNo++) {if(iPointsR[iRowNo] == 0) {Set(iRowNo + 1);} else if(Grid[iRowNo][iColNo]==0) {Grid[iRowNo][iColNo] = 1;iSumR[iRowNo]++; iSumC[iColNo]++;if(iSumR[iRowNo]<iPointsR[iRowNo] && iSumC[iColNo]<=iPointsC[iColNo])Set(iRowNo);else if(iSumR[iRowNo]==iPointsR[iRowNo] && iRowNo < ROWS)Set(iRowNo + 1);Grid[iRowNo][iColNo] = 0;iSumR[iRowNo]--;iSumC[iColNo]--;}}}return iFound; // 用于判断是否有解}int main(int argc, char* argv[]) {if(!Set(0))printf("Failure!");9、有4种面值的邮票很多枚,这4种邮票面值分别1, 4, 12, 21,现从多张中最多任取5张进行组合,求取出这些邮票的最大连续组合值。