☰
大厂AI面试经典试题拆解:题型映射、手算步骤与避坑
2026/10/27 20:14:02 网站建设 项目流程

简介:这份《百度人工智能的几份经典考试试题》面向备考人工智能课程、准备笔试面试或考研复试的学习者,用于系统梳理核心概念并开展题型训练。压缩包内仅1个doc文档,约279KB,内容集中,便于打印批注和反复复习。试题按选择题、填空题、简答计算题、应用题四类编排,覆盖语义网络、归结推理、产生式系统、可信度CF、谓词逻辑与MGU、知识表示、机器学习及自然语言处理等考点,并附参考答案和知识点总结。已有1586人学习,读者可用于限时自测、对照答案定位薄弱环节,再按语义网络、推理与知识表示等模块回补概念,适合需要把零散知识串成考试框架的课程学习者与面试准备者。

1. 一套大厂 AI 经典试题的拆解价值:从选择题到应用题的覆盖边界

如果你正在找大厂人工智能面试题,或者想把 AI 经典考试试题按题型系统刷一遍,这套 A/B 卷值得先看结构,而不是急着背答案。它把选择题、填空题、简答计算题、应用题按 15、30、25、30 分排开,覆盖语义网络、归结推理、产生式系统、可信度 CF、α-β 剪枝、专家系统、搜索策略。适合课程期末复盘、面试前查漏、带学生做习题课的人。它不负责教你从零学 AI,负责把“手算步骤”和“概念边界”压成可检查的题面。用它的正确姿势是:先做知识点映射,再挑三类计算题手算,最后用错题反查教材定义。这套题的价值不在答案本身,而在它把容易混的概念放进了同一张卷子,逼你区分“会背”和“会算”。

2. 题型与知识点映射:A/B 卷 15+30+25+30 的分值怎么用

2.1 题型分布与分值权重

这套题库的 A/B 卷结构很稳定:选择题 15 题共 15 分,填空题约 20 个空共 30 分,简答及计算题 5 题共 25 分,应用题 3 题共 30 分。很多人一上来从选择题开始刷,刷完觉得“都会”,结果填空题一写就漏字,应用题一画就乱。选择题的分值低,但它负责暴露概念边界;填空题分值高,考的是术语和公式的精确复现;简答计算题考步骤;应用题考建模和图示。复习时不要把四类题当成同一种题,它们的丢分机制完全不同。

题型分值题量主要考点建议动作
选择题1515AI 缩写、归结、产生式、语义网络、搜索、专家系统限时 12 分钟,错题只标知识点
填空题30约 20 空不确定性类型、删除策略、CF、图、MGU、产生式、AI 目标闭卷默写,按空给分
简答计算255三值逻辑、产生式语义、子句集 8 步、MGU、归结证明每道写完整步骤,不跳步
应用题303语义网络、α-β 剪枝、谓词逻辑祖孙关系先定义谓词,再画表或图

从分权看,填空题和简答计算合计 55 分,是这套题的主战场。选择题里的“AI 英文缩写”“或图称为什么图”“不属于 AI 学派的是哪个”属于记忆型题,错一次记一次就够;填空题里的“不确定性类型按性质分”“删除策略删除哪些子句”“CF 的三个关系式”则是典型的一错一串,必须手写。我的建议是先把填空题拆成 20 个独立空,每个空写一行“题干触发词 → 答案 → 易错写法”,再回到选择题。选择题可以猜,填空题猜不了。

A/B 卷之间有重复知识点,比如归结式为空子句、产生式推理方式、语义网络的继承性、α-β 剪枝条件、专家系统组成。重复不是冗余,是二刷的锚点。第一遍做 A 卷时把重复点标出来,第二遍做 B 卷时只做标出来的题,第三遍再全卷限时。三轮之间不要隔太久,隔太久会变成重新学。

2.2 知识点映射表:从选择题到应用题

把这套题拆成知识点后,会发现它其实围绕六条线:知识表示、归结推理、产生式系统、不确定性推理、搜索与博弈、专家系统与 AI 基础。每条线在四类题型里都有落点。下面这张表是按题面内容整理的映射,不按原卷顺序,方便你按线复习。

知识线选择题落点填空题落点简答计算落点应用题落点
知识表示语义网络 AKO/ISA、或图图的节点与有向边、与或图产生式语义语义网络表示人物、公司、比赛
归结推理归结式、空子句、假言推理删除策略、子句集子句集 8 步、MGU、归结证明祖孙关系证明与求解
产生式系统正向推理、可触发规则被触发规则产生式组成数字序列产生式描述
不确定性推理可信度 CF 含义CF 补、合取、析取公式模糊性知识解释无
搜索与博弈或图、最优解搜索状态空间图、启发函数α-β 剪枝条件博弈树剪枝
专家系统与基础AI 学派、AI 目标、机器智能测试专家系统组成、知识表示方法专家系统开发步骤无

这张表的作用是防止“刷题刷散”。比如你在选择题里看到“语义网络有向弧 AKO 链、ISA 链用来表达节点知识的什么性质”,答案落在继承性;到了应用题,你要用 ISA 把个体连到类,用 AKO 把子类连到父类。同一个概念,选择题考定义,应用题考画法。如果只背“继承性”三个字,画图时仍然会把 ISA 和 AKO 画反。

再比如 CF。选择题问 C(B|A) 表示什么,填空题问 CF(~A)、CF(A1∧A2)、CF(A1∨A2) 怎么算,简答题可能让你解释模糊性知识。这三类题必须用同一套公式口径,否则会出现“选择题选对了,填空题写错公式”的情况。这套资料里 CF 公式存在两套写法,第 5 章会展开,这里先记住:做题前先确认你用的教材版本。

2.3 怎么用这套题做三轮复习

第一轮只做“概念映射”,不追求限时。拿一张 A4 纸,左边写题号,右边写它考的知识线和触发词。比如“归结式为空子句”对应“反证法结束条件”,“MGU”对应“差异集与置换合成”,“α-β 剪枝”对应“MAX 层 α、MIN 层 β”。这一轮允许翻书,但每翻一次书,就在题号旁画一个正字,最后统计哪条知识线翻书最多。翻书最多的那条线,就是第二轮的重点。

第二轮只做“计算题手写”。从简答计算题里挑四类:子句集 8 步、MGU、归结证明、α-β 剪枝。每类找两道题,不写答案,只写步骤。子句集 8 步要写出每一步的中间公式;MGU 要写出差异集、置换、合成后的子句集;归结证明要写出每条子句的来源和置换;α-β 剪枝要在边上标 α、β 和剪枝符号。写完再对照答案,重点看“哪一步被跳过”。很多人不是不会,是跳步导致置换方向写反。

第三轮做“错题回读”。错题本不要抄整道题,只记三个字段:触发条件、我错的步骤、正确口径。比如“触发条件:看到‘结论否定’;我错的步骤:直接否定结论后忘了最后要看置换;正确口径:证明存在用否定结论,求解用重言式”。这三个字段写满一页,比抄十页答案有用。

提示:这套题的填空题按空给分,术语多写一个字少写一个字都可能丢分。默写时用“空位编号 + 答案”的格式,不要写成一段话。

如果要把这套题用于面试复盘,建议把应用题当口头题练。语义网络题用 30 秒说清节点和弧;α-β 剪枝题用 60 秒说清剪枝条件;祖孙关系题用 90 秒说清谓词定义、已知事实、结论否定、置换和结果。面试里没人等你画完一整棵树,能说清触发条件就够了。

3. 归结推理与 MGU:用差异集把 8 步子句集和置换算清楚

3.1 子句集转换的八个步骤

谓词公式转子句集是这套题里最容易“看着会、写着错”的部分。试卷答案给了 8 步:消去蕴含和等价、缩小否定词作用范围、适当改名使量词间不含同名指导变元和约束变元、消去存在量词、消去全称量词、化成合取范式、适当改名使子句间无同名变元、消去合取词并用逗号代替。每一步都有具体的检查点,不能只背标题。

第一步消去蕴含和等价,常见写法是 A→B 换成 ¬A∨B,A↔B 换成 (A→B)∧(B→A)。第二步把否定推到原子公式前,用德摩根律和量词否定规则。第三步改名是为了防止量词辖域里的变量撞名,尤其是多个全称量词和存在量词混在一起时。第四步消去存在量词,如果存在量词不在任何全称量词辖域内,就用一个新常量;如果在全称量词辖域内,就用一个依赖全称变量的函数。这里不要写“Skolem”字样,记成“存在量词消去函数”更稳。第五步消去全称量词,直接去掉全称量词,保留变量。第六步化成合取范式,用分配律把∨分配到∧上。第七步子句间改名,防止不同子句用同一个变量名。第八步去掉∧,用子句集合表示。

手算时建议在每一步后面写“当前公式”,不要只写“第 1 步、第 2 步”。因为错误往往发生在第 3 步改名和第 7 步子句改名之间。改名不是形式主义,它决定后面归结时置换会不会撞车。我的习惯是:每消去一个量词,就在旁边标注“此变量后面对应哪个函数/常量”,最后检查子句集里有没有同名变元跨子句出现。

注意:子句集转换的 8 步不是固定死顺序,但“消去存在量词”必须在“消去全称量词”之前,否则存在量词的依赖关系会丢。

3.2 MGU 求法:差异集、置换合成与终止条件

MGU 是“最一般合一”的缩写。求 MGU 的核心动作是找差异集、选变量、做置换、合成置换、检查是否变成单元素集。这套题里给了一个典型例子:S={P(f(x),y,g(y)), P(f(x),z,g(x))}。手算过程可以拆成下面四步。

先令 k=0,S0=S,δ0=ε。S0 不是单元素集,找差异集 D0={y,z}。y 是变元,z 是项,且 y 不在 z 中出现,所以可以做置换 {z/y},意思是把 y 替换成 z。令 δ1=δ0·{z/y}={z/y},S1=S0·{z/y}={P(f(x),z,g(z)), P(f(x),z,g(x))}。

S1 仍然不是单元素集,找差异集 D1={z,x}。z 和 x 都是变元,可以做置换 {z/x},意思是把 x 替换成 z。令 δ2=δ1·{z/x}={z/y, z/x},S2=S1·{z/x}={P(f(z),z,g(z))}。S2 是单元素集,算法终止,MGU=δ2。

这里最容易错的不是差异集,而是置换方向。{z/x} 表示 x 换成 z,不是 z 换成 x。写成 δ2={z/y, z/x} 时,读法是 y→z、x→z。最后实例化时,两个原子公式都变成 P(f(z),z,g(z)),检查一遍就能确认方向没反。

第二道 MGU 题是 W={P(f(x,g(A,y)),z), P(f(x,z),z)}。差异集先取 {g(A,y), z},z 是变元,g(A,y) 是项,且 z 不在 g(A,y) 中出现,所以做置换 {g(A,y)/z}。置换后 S1={P(f(x,g(A,y)),g(A,y))},已经是单元素集,MGU={g(A,y)/z}。这道题的关键是“z 不在 g(A,y) 中出现”,如果出现,就要做 occurs check,不能直接置换。

手算 MGU 时建议用“三列法”:左列写当前子句集,中列写差异集,右列写置换和合成结果。每做一次置换,就把新子句集重新抄一遍,不要在原式上涂改。抄一遍虽然慢,但能避免置换没作用到所有参数上的错误。

3.3 用 Python 写一个最小 MGU 验算器

手算完之后,可以用一个很小的 Python 脚本验算置换。这个脚本不依赖第三方库,变量用小写单字母表示,函数用元组表示,常量用大写字符串表示。脚本只做三件事:解析置换链、检查变量是否出现、逐个参数合一。

def is_var(t): # 变量约定:小写单字母字符串,如 'x'、'y'、'z' return isinstance(t, str) and t.islower() def walk(t, subst): # 沿着置换链一直解析,直到不是变量或没有映射 while is_var(t) and t in subst: t = subst[t] return t def occurs(v, t, subst): # occurs check:防止把变量映射到包含自己的项 t = walk(t, subst) if t == v: return True if isinstance(t, tuple): return any(occurs(v, arg, subst) for arg in t[1:]) return False def unify_term(a, b, subst): a = walk(a, subst) b = walk(b, subst) if a == b: return subst if is_var(a): if occurs(a, b, subst): return None new_subst = subst.copy() new_subst[a] = b return new_subst if is_var(b): if occurs(b, a, subst): return None new_subst = subst.copy() new_subst[b] = a return new_subst if isinstance(a, tuple) and isinstance(b, tuple): if a[0] != b[0] or len(a) != len(b): return None for x, y in zip(a[1:], b[1:]): subst = unify_term(x, y, subst) if subst is None: return None return subst return None def unify_atoms(a, b, subst): # 原子公式格式:('P', 参数1, 参数2, ...) if a[0] != b[0] or len(a) != len(b): return None for x, y in zip(a[1:], b[1:]): subst = unify_term(x, y, subst) if subst is None: return None return subst def apply_term(t, subst): t = walk(t, subst) if isinstance(t, tuple): return (t[0],) + tuple(apply_term(arg, subst) for arg in t[1:]) return t if __name__ == '__main__': # 对应试题 S={P(f(x),y,g(y)), P(f(x),z,g(x))} atoms = [ ('P', ('f', 'x'), 'y', ('g', 'y')), ('P', ('f', 'x'), 'z', ('g', 'x')) ] subst = {} for atom in atoms[1:]: subst = unify_atoms(atoms[0], atom, subst) if subst is None: break print('MGU:', subst) print('实例化:', [apply_term(a, subst) for a in atoms])

这段代码的逻辑不复杂。is_var负责判断变量;walk负责把置换链解析到底,比如{y:z, z:x}里y最终要走成x;occurs做出现检查,防止x->f(x)这种循环;unify_term处理变量、函数和常量三类项;unify_atoms先检查谓词名和参数个数,再逐个参数合一。运行结果的置换写法可能和手算答案方向不同,比如输出{'y':'z','z':'x'},手算写{z/y, z/x},但两者实例化后都得到同一个原子公式,等价。

参数说明要记清:变量必须是小写单字母;函数必须写成元组,第一项是函数名;常量用大写字符串,避免和变量混淆。如果题目里的项更复杂,比如带下标或多字母变量,先把变量名改写成单字母再跑脚本,不要直接改判断逻辑。脚本只用于验算,不替代手算步骤,考试时还是要写差异集和置换合成。

4. 语义网络与知识表示:把应用题画成节点表、弧表和检查清单

4.1 语义网络三件套:节点、有向弧、继承链

语义网络不是“随便画几个框连箭头”。它有三个必须说清的东西:节点表示概念、实体或事件;有向弧表示关系;弧上的标签表示关系类型。这套题反复考 AKO 链和 ISA 链,原因就是它们决定继承性。ISA 表示“是一个实例”或“是一个子类”,AKO 表示“是一种”,两者都参与继承,但方向不能乱。

更稳的记法是:ISA 连接个体和类,比如“甲 ISA 人”;AKO 连接子类和父类,比如“经理 AKO 员工”。有些教材把 ISA 也用于子类到父类,这时要看题目约定。这套题的选择题问“有向弧 AKO 链、ISA 链是用来表达节点知识的什么”,答案落在继承性,说明它把两者都当作继承链。做题时先按题目约定,不要拿另一本教材的约定硬套。

语义网络里还有属性弧,比如“年龄”“地址”“比分”。属性弧不是继承链,它挂的是具体值。画应用题时,先建节点表,再建弧表,最后按弧表回读成一句人话。回读不通,说明弧名或方向有问题。

4.2 把“某人是某公司经理”拆成 ISA/AKO/属性弧

拿应用题里的第一问做模板:甲是乙公司的经理,35 岁,住在丙地址。不要一上来画图,先列节点。节点包括:甲(人物)、乙公司(组织)、35(年龄值)、丙地址(地址值)。如果题目要求表达“经理”这个身份,还可以加一个“经理”类节点。然后列弧:

起点弧标签终点说明
甲ISA人个体到类
甲ManagerOf乙公司任职关系
甲Age35属性弧
甲Address丙地址属性弧
经理AKO员工子类到父类,可选

如果题目只要求表达事实,不要求表达类层次,经理 AKO 员工可以不加;如果题目明确考 AKO/ISA,就要把类层次补上。这里最容易犯的错是把“甲是乙公司的经理”画成“甲 ISA 乙公司”,读起来变成“甲是一个乙公司”,明显不通。正确读法是“甲 ManagerOf 乙公司”,ISA 只连到“人”或“经理”类。

第二问是 A 校与 B 校进行篮球比赛,比分 89:102。这里不要把比分直接挂在 A 校或 B 校下面,要建一个“比赛事件”节点。节点表:A 校、B 校、比赛事件、89、102。弧表:

起点弧标签终点说明
A 校ISA学校个体到类
B 校ISA学校个体到类
比赛事件HomeTeamA 校主队
比赛事件AwayTeamB 校客队
比赛事件ScoreA89得分
比赛事件ScoreB102得分

这样画的好处是比分有归属,不会出现“A 校得分 89、B 校得分 102”两条弧互相打架。事件节点是语义网络里常用的建模手法,比赛、考试、交易这类有时序和参与者的概念,都适合单独建节点。

4.3 用表格代替手绘图:节点表 + 弧表 + 检查清单

手绘图在纸上好看,但复习时不好检查。我一般要求学生先交节点表和弧表,再画图。节点表至少三列:节点名、节点类型、备注。弧表至少四列:起点、弧标签、终点、读法。检查清单用五个问题:

检查项通过标准常见错误
节点是否有类型每个节点能说出是人物、组织、事件还是值把“35”和“甲”画成同一类节点
弧是否有方向每条弧从起点读到终点能成句ISA 和 AKO 画反
继承链是否只用于分类ISA/AKO 不用于任职、地址、比分把 ManagerOf 写成 ISA
属性弧是否带值Age、Address、Score 都连到具体值属性弧悬空
事件是否单独建节点比赛、考试等有参与者的事件独立成节点比分挂在参赛方下面

谓词逻辑表达也要和语义网络对齐。题目“某个学生读过某本古典小说”可以形式化为:存在 x,Student(x) 且 Read(x, Book)。语义网络里就是“学生节点 —Read→ 书节点”,再加一个存在量词标记。不要把“某个”画成全称,也不要把“读过”画成 ISA。谓词公式和语义网络是两种表示,检查时看它们能不能互相翻译。

提示:语义网络题先写弧表再画图,比直接画图快。弧表里每条弧读成“主语—关系—宾语”,读不通就改。

5. 避坑与排查:这套经典试题里最容易翻车的五个点

5.1 先做一张排查总表

这套题年代久、版本多,答案和题干之间有几处口径不一致。直接背答案,最容易在填空题和证明题上翻车。下面先把五个高频坑列成总表,后面逐条拆现象、原因和解决。

坑位现象根因解决动作
归结结束条件把“永真式”当成定理得证混淆反证法结束条件和子句删除条件证明最后一行必须是空子句
CF 公式同一套资料出现两套 CF 写法不同教材的确定性因子定义不同先锁定教材口径,再做边界测试
结论否定与求解证明出存在祖孙关系,却给不出具体人反证法证明存在性和求解是两种模式求具体解时用重言式保留变量
语义网络弧名ISA 和 AKO 画反把个体到类、子类到父类混为一谈每条弧读成一句人话再检查
α-β 剪枝在 MAX 层用 β 剪枝α、β 的层归属记反先序标 α/β,倒推时更新

5.2 逐条拆:现象、原因、解决

坑一:归结式为空子句,不是永真式。现象是有些整理稿在选择题里写“当前归结式是永真式时定理得证”,照着背就会选错。原因是把“子句集里可以删除永真式”和“反证法证明结束”混在一起。归结证明是反证法:把结论否定加入子句集,不断归结,直到推出空子句 □,才说明原子句集不可满足,定理得证。永真式只能说明该子句对矛盾没有贡献,可以删掉,不能结束证明。解决动作很简单:每做完一道归结证明,看最后一行是不是 □;如果不是,检查结论否定有没有加、置换有没有作用到所有文字。

坑二:CF 公式有两套写法,不能混用。现象是同一套资料里,一处写 CF(~A)=-CF(A)、CF(A1∧A2)=min{CF(A1),CF(A2)}、CF(A1∨A2)=max{CF(A1),CF(A2)},另一处整理稿写 CF(~A)=1-CF(A)、合取取乘积、析取用和减积。原因是确定性因子在不同教材里有不同定义,有的用 [-1,1],有的用 [0,1],补运算和合成公式自然不同。解决动作:做题前先翻目标教材的目录或符号表,确认 CF 的取值范围和三条公式;做边界测试,取 CF(A)=0.8,如果公式写 -CF(A) 得 -0.8,写 1-CF(A) 得 0.2,结果差很多,一眼就能发现混用。考试时按试卷答案的口径写,复习笔记里注明“此公式对应哪本教材”,不要两边都抄。

坑三:证明存在性和求具体解,最后一步不一样。现象是祖孙关系题用结论否定做归结,最后得到 □,只能说明“存在祖孙关系”,题目却问“谁和谁是祖孙关系”。原因是反证法证明存在性时,结论否定会消掉变量;要求具体解,需要保留变量。解决动作:证明存在性时,结论否定写成 ¬G(u,v),归结到 □ 即可;求具体解时,把结论否定换成重言式 ¬G(u,v)∨G(u,v),这个子句恒真,不会破坏矛盾,但保留了 u、v,最后归结得到 G(甲,丙),就能读出甲是丙的祖父。排查时看最后一行:是 □ 还是带变量的结论。

坑四:ISA 和 AKO 画反。现象是画语义网络时把“甲 ISA 人”写成“人 ISA 甲”,或者把“经理 AKO 员工”写成“员工 AKO 经理”。原因是只记了“继承”两个字,没记方向。解决动作:每条弧读成“起点—关系—终点”。ISA 读“甲是一个人”,通;读“人是一个甲”,不通。AKO 读“经理是一种员工”,通;读“员工是一种经理”,不通。属性弧也要读,比如“甲 Age 35”读“甲的年龄是 35”,通;“35 Age 甲”不通。画完先读一遍,读不通就改方向。

坑五:α-β 剪枝的层归属记反。现象是在 MAX 层用 β 剪枝,或者在 MIN 层用 α 剪枝。原因是 α 是 MAX 节点的当前下界,β 是 MIN 节点的当前上界,剪枝发生在“后继层”而不是“当前层”。解决动作:先序给节点标 α 或 β。α 剪枝发生在 MIN 节点之下:如果任一先辈 MAX 节点的 α 值大于或等于当前 MIN 节点的 β 值,即 α(先辈 MAX)≥β(MIN),就剪掉这个 MIN 节点以下的分支。β 剪枝发生在 MAX 节点之下:如果当前 MAX 节点的 α 值大于或等于任一先辈 MIN 节点的 β 值,即 α(MAX)≥β(先辈 MIN),就剪掉这个 MAX 节点以下的分支。手算时不要背句子,直接在边上写“α≥β,剪”,倒推值时只更新被保留的节点。

这五个坑里,前三个是资料口径问题,后两个是概念方向问题。排查顺序建议从“最后一行”开始:归结证明看最后一行是不是 □,CF 计算看取值范围,语义网络看弧的读法,α-β 剪枝看剪枝发生在哪一层。每次只查一个变量,不要同时改公式和改图。

6. 把题库变成错题本:三个验证动作和一个手算习惯

这套 A/B 卷我后来不再按“做完对答案”的方式用,而是按“三个验证动作”用。第一个动作是置换实例化:任何 MGU 或归结置换,都把它代回原子公式,检查两个子句是否变成同一个项。手算写{z/y, z/x},就用脚本或手算代回去,看是不是P(f(z),z,g(z))。代不回去,置换方向一定有问题。第二个动作是 CF 边界测试:做题前先取 CF(A)=0.8、CF(A)=0.2 各算一遍,确认自己用的是-CF(A)还是1-CF(A),是min/max还是乘积/和减积。公式口径没锁定,填空题写满也拿不到分。第三个动作是语义网络弧表回读:画完图不看图,先看弧表,每条弧读成“起点—关系—终点”,读不通就改方向。

一个手算习惯是:错题本只记“触发条件”和“最后一步”,不抄整道题。比如“看到‘结论否定’求具体解,最后一步要换成重言式”“看到‘归结式’问定理得证,最后一行必须是空子句”“看到‘α-β 剪枝’,先标 MAX/MIN 再写条件”。这个习惯来自一次带习题课的经历:我图省事,直接拿整理稿里的 CF 公式讲,结果和试卷答案对不上,现场被问住。从那以后我每次讲这套题,都先强制跑一遍公式对照和置换实例化,再开口。希望帮到你。资料包里保留了 A/B 卷、答案和一张知识点映射表,入口放在文末;拿到后先做第 2 章的三轮标记,再开刷,不要从第一题开始背。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询