时间:2025年7月24日-7月26日
基本信息及个人复习经历
共300+人入营。
邮件发布的安排如下(有伏笔):
第一天 面试(双盲<不得提及本人姓名,或以其他形式暗示本人身份信息>,满分150分,及格线90分。申请人无需准备PPT,可携带个人简历<限1页A4纸,不得提及本人姓名>3份;每位申请人陈述时间2-3分钟)
第二天上午9:30-11:30 机试(闭卷,满分100分。考察C++程序设计、数据结构与算法等知识,涉及 C++, Python等编程语言)
第二天下午13:00-15:00 笔试(闭卷,满分100分。考察人工智能、机器学习、离散数学、数据结构与算法)
第三天 自由交流
针对这份安排及2024年情况,重点复习了
- 机试:Leetcode Hot100 刷了两遍,做到能看到题面就回忆起基本做法。
- 笔试:离散数学【群论、图论、集合论、关系论、数论、组合数学】、数据结构与算法【主要是图部分】、机器学习【西瓜书前10章及配套代码练习】
后来发现自己绝大多数“针对性”的复习一点用都没有(×
第一天 面试
分为11组,每组3个老师负责面试。平均每个人10分钟。
准备了非常多的专业课…结果一点都没问,连项目细节也是如此,仅仅问了下“具体做了什么贡献”以及确认了“大概是个什么项目”。纯纯的聊天面。
英语环节还是在的,每个人被要求用英语介绍的东西不一样,不过我个人没认真准备,也完全没意料到老师会问什么问题,说的非常灾难。
问了有没有报名其他学校。
因为自己的简历提到了一些爱好,老师针对爱好提了很多问题。。。。
最后也是让反向提问,只不过缺乏面试经验的我话都说不利索了。。。。
第二天 机试
电脑上有vscode、Dev-cpp、Clion等IDE,通过小纸条上的链接下载试题,通过NJU-box上传答案(即无OJ,三次提交机会),这些都和去年一样。
但今年没有了机器学习代码题,前两题为强制使用python的算法题,后两题为强制使用C++的算法题。
回收伏笔——原来邮件内容说的一个字都没错!把“等”字都删掉,就变成【考察C++程序设计、数据结构与算法,涉及 C++, Python】,没错,C++和Python都要考!说实话当读到邮件这句话的时候是有想过这种可能的,毕竟去年有强制使用C语言的题目。但没想到真的会这么干。
以下是具体题目(数据范围都很小)
Q1:
输入数据行数n,随后是n行数据,每行第一个数字代表微博发送者的ID,第二个数字代表该发送者@到的人数,剩下的若干数字代表该微博@到的人。需要做的是统计输出被提到(次数 or 人数?此处我和部分同学对题意的理解不同,会影响答案,不知道谁是对的)最多的人,并输出所有@到该人的微博发送者ID。
自己瞎编的样例:
输入3114514 5 1 2 3 2 41919 2 1 21 2 3 42 2 2 5
输出2114514 1919 2
纯考python语法来的。
Q2:
输入数据行数n,随后是n行数据,每行是两个数字代表一个区间,选取尽可能多的区间使得这些区间互不相交,输出该最大区间数。
经典贪心。按照右端点升序排序。【我按左端点排序了我在干什么】
正确性证明:假设我们有一个最优解 ,而我们的贪心解 是每次选右端点最早的区间。 我们来证明 不会比 差。
步骤1:对比第一个选择
- 选择的第一个区间是右端点最小的区间,记为 。
- 选择的第一个区间是 。
因为 的右端点不大于 的右端点, 我们可以把 的第一个区间替换成 ,不会影响剩下的区间安排。
这一步的关键是: 结束时间更早或一样早,所以不会和 的后续区间冲突。
步骤2:递归继续
替换完第一个区间后,问题变成“从剩下的区间中选择最多的区间”,依然满足相同的性质。 用同样的方法递归下去,最终可以把最优解 转换成我们的贪心解 ,并且选择的区间数量不减少。
Q3:
给定字符串,最多连续出现多少次给定子串?
自己瞎编的样例:
输入abcbcbcb bc输出2
输入abcbcbcb cb输出3
难绷群里一堆讨论字符串匹配算法的给我整不会了。其实一遍扫描就能解决。
Q4:
给定树(root),求最深一层所有节点权值之和。
过于简单了吧。。。。。。。层序遍历。注意边界情况。
第二天 笔试
和24年一样的8道题,但这里再次回收伏笔,邮件内容和去年的区别在于增加了“人工智能”一词,删去了概率论。
内容无比简单。感觉毫无区分度(但我还是错了两道呜呜)
实际考了
Q1:选择题,要会k进制比大小、8421BCD码、布尔代数(求给定式的最小项个数)
Q2:一阶命题逻辑转化,找有无矛盾
Q3:启发式算法【是的,这是我们《人工智能导论》专业课的内容】
Q4:(一元二次函数)梯度下降手算
Q5:(二维)线性回归梯度下降手算
Q6:(三个二维点)PCA手算
Q7:Kruskal和Prim算法手算
Q8:斐波那契递归/迭代的时间复杂度分析
Q2我脑子短路了最后推出个不存在矛盾(这一题暴亏)
Q3没复习早就忘了。瞎蒙的。
启发式算法复习
g(x)
:从起点到当前节点的实际代价。
h(x)
:从当前节点到目标节点的估计代价(启发函数)。
A* 算法(A-Star)
加权方式:f(x) = g(x) + h(x)
- 说明:这是最经典的启发式搜索算法,
h(x)
必须是可接受的
Greedy Best-First Search(贪心最佳优先搜索)
加权方式:f(x) = h(x)
- 说明:只考虑启发函数,完全忽略实际代价。速度快但不保证最优。
要保证启发式搜索算法能找到最优解(即代价最小的路径),必须满足以下两个条件:
- 可接受性(Admissibility)
- 启发函数
h(x)
必须不能高估从当前节点到目标的真实代价。 - 也就是说:
h(x) ≤ h*(x)
,其中h*(x)
是从节点 x 到目标的真实最小代价。 - 这个条件保证 A* 不会跳过任何可能更优的路径。
- 一致性(Consistency,或单调性)
- 一致性是一个更强的条件,它要求启发函数满足三角不等式:
其中h(x) ≤ c(x, y) + h(y)
c(x, y)
是从节点 x 到其邻居 y 的代价。 - 一致性不仅保证最优性,还保证 A* 的效率(每个节点最多扩展一次)。
练习(即本次笔试Q3)
启发式路径算法是一种启发式搜索算法,它的评估函数是 ,假设 是可采纳(admissible)的, 取什么值能保证算法的最优性?当 , , 时,分别对应什么搜索算法?
则必须有 也即 也即 才能保证算法的最优性。
- 时对应一致代价算法,
- 对应 A* 算法,
- 对应贪心算法。
第三天及总结
第二天考完试开了一个学院宣讲会(实际上感觉是工程硕博宣讲会hhh)
然后就没有统一安排了,可以找意向老师交流,不交流的就可以走人啦~
总之自己发挥的非常一般,之前的复习完全偏离了方向。除了“好热闹呀我们智科院”也没什么更多的感想了。
结果
TODO