离散数学期末试卷拆解:120分钟13题判分动作与复习节奏 简介中国地质大学武汉离散数学2022秋季学期课程试卷面向准备期末复习、自测或教师命题参考的计算机与数学相关专业学习者重点检验谓词逻辑、集合论、二元关系、群论与图论等核心知识的掌握程度。压缩包内共1个PDF文件约287KB为三页版结课考试试卷含A/B卷标识、闭卷/开卷说明及13道解答题所有题目均要求给出详细求解或证明过程。已有603人学习或下载具备一定参考热度。试卷内容覆盖量词消去与谓词公式类型判断、形式化推理、主析取范式应用、集合等势关系、偏序集哈斯图、关系性质与商代数构造、子群证明、循环群同构、置换群、欧拉公式以及哈密尔顿图等典型考点并设置考试安排建模题。适合按题型逐项训练对照课堂重点梳理证明思路与解题步骤也可用于模拟限时测试和查漏补缺。1. 先确认这是一份什么样的卷子一套 2022 秋季学期的离散数学结课试卷13 道题100 分120 分钟13 道全是解答题且明确要求写出求解或证明过程。很多人拿到它只是打印出来做一遍、对对答案就归档我第一遍拆的时候也是这个心态结果在第 5 题上卡了半小时——自反、对称都写对了传递性却漏掉一个三段组。这套卷子的价值不在题量而在它把谓词逻辑、集合与关系、代数结构、图论四条线压进一张卷面每道题都卡在一个具体判断动作上。适合正在准备期末、想拿完整卷面做知识体检的人也适合需要一份带分值分布的样例来设计自测节奏的人。2. 13 道题反推考点地图120 分钟该切给谁拿到卷子先别急着动笔。先把 13 道题按主线归类、把分值和自己最容易卡壳的判分动作标出来再倒推时间预算这一步做扎实后面做题才不会在第 3 题上耗掉 20 分钟、最后两道图论大题空着交卷。2.1 六条主线与 13 个判分动作原卷的知识点分布相当规整谓词逻辑两题 16 分命题逻辑一题 10 分集合与关系三题 20 分代数结构四题 28 分图论三题 26 分。代数结构占比最高而且第 10 题把群和置换群叠在一起考是最容易失分的地方。题号主线分值判分关键动作建议用时1谓词逻辑6存在量词按论域展开、四个公式定类型6 min2谓词逻辑10形式化 EI/UI 顺序不出错10 min3命题逻辑10主析取范式筛可行指派12 min4集合6三条性质各给一个双射5 min5关系8性质判定 关系图 连通分支8 min6偏序6只画覆盖关系的哈斯图 极值元7 min7代数85 个等价关系逐个验相容性10 min8群6子群三条件8 min9群6同构保阶6 min10群8轮换分解 封闭性 同构映射10 min11图论6e ≥ n−ω、广义欧拉公式6 min12图论10最长通路法的反证骨架12 min13图论10冲突图建模 色数上下界12 min加起来 112 分钟留 8 分钟回填和检查。这套分配的逻辑是证明题按「骨架 关键一步」给时间计算题按「验证一遍」给时间。第 8、9 题虽然各只有 6 分但子群三条件和同构保阶都是标准套路8 分钟和 6 分钟足够写完第 13 题看似是应用题实际是图着色建模那三分钟最值钱建模错了后面全废。2.2 谓词逻辑论域 D{a,b} 的存在量词怎么展开第 1 题给四个谓词公式第一问要求在论域 D{a,b} 下消去 (C) 中的存在量词第二问判断四个公式的类型。展开规则很死存在量词按论域元素逐个析取全称量词逐个合取蕴含先化掉。手写时最容易出的错是把两层量词的括号层级搞乱导致后面判类型时看不出哪一项恒真。正确的展开是先把外层 ∃x 拆成两项的析取每一项内部再把 ∃y 拆开((P(a)→P(a)) ∨ (P(a)→P(b))) ∨ ((P(b)→P(a)) ∨ (P(b)→P(b)))注意 (P(a)→P(a)) 这一项不能省它恒真正是它让 (C) 成为重言式。判断四个公式的类型时含自由变元的 (A) P(x)→P(y) 和 (B) P(x)∧¬P(y) 严格说不是命题只能说「存在赋值使其为真、存在赋值使其为假」结论落在可满足式上(C) 是重言式(D) ∀x∀y(P(x)∧¬P(y)) 取 xy 就得到 P(x)∧¬P(x)是矛盾式。想验证结论两分钟写个枚举脚本比反复推演可靠from itertools import product D (a, b) # 论域元素个数决定真值表行数 # (C) ∃x∃y(P(x)→P(y))存在量词展开成 any蕴含展开成 ¬P(x)∨P(y) def C(env): return any((not env[x]) or env[y] for x in D for y in D) # (D) ∀x∀y(P(x)∧¬P(y))全称量词展开成 all def Df(env): return all(env[x] and not env[y] for x in D for y in D) def kind(f, name): vals [f(dict(zip(D, v))) for v in product([True, False], repeatlen(D))] res 重言式 if all(vals) else (矛盾式 if not any(vals) else 可满足式) print(name, res, vals) kind(C, (C)) kind(Df, (D))product([True, False], repeat2)枚举 P(a)、P(b) 的全部四种赋值any对应存在量词、all对应全称量词这是在有限论域上最直接的翻译。把D改成三个元素真值表自动变成八行不需要改逻辑如果论域换成无限集这个脚本就失效了得回到语义论证。跑出来 (C) 四种赋值全真、(D) 四种赋值全假和手推一致这一步花的时间比检查三遍草稿少。2.3 演绎法推理EI 和 UI 的先后顺序决定能不能推出来第 2 题要求把「所有某类奖项获得者都是计算机科学家一些该奖项获得者本科主修数学所以一些计算机科学家本科主修数学」形式化并演绎证明。设 F(x) 为获奖者、S(x) 为计算机科学家、M(x) 为本科主修数学论域为全总域形式化结果是前提1: ∀x(F(x) → S(x)) 前提2: ∃x(F(x) ∧ M(x)) 结论: ∃x(S(x) ∧ M(x))演绎的关键在步骤顺序。存在前提必须先做存在示例拿到一个新常元 c再用全称示例把前提 1 落到同一个 c 上才能做假言推理。顺序反了——先对前提 1 做全称示例拿到 F(y)→S(y)再对前提 2 引入常元 c——就会出现 F(c)∧M(c) 和 F(y)→S(y) 对不上的局面推不下去。步骤动作结果约束1前提 1∀x(F(x)→S(x))原样引用2前提 2∃x(F(x)∧M(x))原样引用3对 2 做存在示例F(c)∧M(c)c 必须是本证明中首次出现的新常元4对 1 做全称示例F(c)→S(c)全称示例可代任意个体代 c 合法5对 3 化简F(c)、M(c)合取消解6对 4、5 假言推理S(c)—7对 6、5 合取引入S(c)∧M(c)—8存在推广∃x(S(x)∧M(x))结论中出现的是约束变元与原常元无关第 3 步的「新常元」是硬约束同一个常元不能既在存在示例里引入、又在别处当已知个体用否则会推出「所有获奖者都是同一个人的同班同学」这类荒谬结论。这是形式化推理里最经典的一处硬性要求写证明时在步骤后面标一句「c 为新引入常元」阅卷时能直接看出你清楚这条约束。3. 关系、偏序与商代数把第 5、6、7 题写成可跑的检查脚本第 5、6、7 三道题共 22 分全部围绕二元关系展开而且都有一个共同特征手算容易漏项脚本一跑就现形。我一般会先手算一遍再用脚本对一遍答案两次结果不一致就以脚本为准回头找漏在哪。3.1 关系性质自反闭包不补后面全错第 5 题给了 9 个模块和六组「必须同一开发小组」的约束1 与 4、6 与 5、2 与 3、7 与 8、5 与 4、2 与 9。题目定义 aRb 表示模块 a 与 b 需由同一小组实现。这里有个容易被忽略的点模块和自己当然同组所以 R 必须包含全部 (i,i)即自反闭包要补上。from collections import defaultdict N 9 pairs [(1, 4), (6, 5), (2, 3), (7, 8), (5, 4), (2, 9)] # 原卷六组约束 R set(pairs) | {(b, a) for a, b in pairs} # 对称闭包 R | {(i, i) for i in range(1, N 1)} # 自反闭包 reflexive all((i, i) in R for i in range(1, N 1)) symmetric all((b, a) in R for a, b in R) transitive all((a, c) in R for (a, b) in R for (x, c) in R if b x) print(reflexive, symmetric, transitive)自反、对称、传递三个判定都是对 R 全量扫描transitive那一行的含义是任取两个有序对只要前者的第二分量等于后者的第一分量就要求首尾组成的对也在 R 里。跑出来是True True False——1R4、4R5 但 1R5 不在 R 中传递性不成立。所以 R 是自反的、对称的、非传递的不是等价关系。这一步如果用眼睛扫很容易只验证题目给出的六组、忘掉 1 和 5 这条隐藏路径。3.2 传递闭包与开发小组划分第 5 题第三问要求分析最多需要多少个开发小组本质是求 R 的传递闭包后数等价类或者直接用并查集数连通分支。parent list(range(N 1)) def find(x): while parent[x] ! x: parent[x] parent[parent[x]] # 路径压缩 x parent[x] return x def union(a, b): ra, rb find(a), find(b) if ra ! rb: parent[ra] rb for a, b in pairs: # 只用原始约束连边即可 union(a, b) groups defaultdict(list) for i in range(1, N 1): groups[find(i)].append(i) print(dict(groups))并查集只关心连通性不需要显式构造传递闭包时间复杂度接近线性。跑出来的三个分支是 {1,4,5,6}、{2,3,9}、{7,8}对应三组开发任务第一组做模块 1、4、5、6第二组做 2、3、9第三组做 7、8。想写成「传递闭包 等价类」的完整过程也可以用三重循环的 Warshall 求出 t(R) 再按行分组答案完全一样只是代码长一些。答辩式的写法建议在卷面上画出关系图再用连通分支说明比纯文字清楚。3.3 哈斯图只画覆盖关系第 6 题给 A{1,…,10} 和整除关系要求画哈斯图并写出最小元、极大元、上界。画图时的核心是覆盖关系a 被 b 覆盖当且仅当 a|b 且不存在中间元素 c 使 a|c|b。把所有整除对都连上画出来的是一张稠密的有向图不是哈斯图。A list(range(1, 11)) cover [(a, b) for a in A for b in A if b % a 0 and a ! b and not any(a ! c ! b and c % a 0 and b % c 0 for c in A)] minimal [a for a in A if all(c % a 0 for c in A)] # 最小元整除所有元素 maximal [b for b in A if not any(b % a 0 and a ! b for a in A)] upper [u for u in A if all(x u or u % x 0 for x in A)] print(cover, minimal, maximal, upper)cover里的not any(...)就是在排除中间元素跑出来是 1-2、1-3、1-5、1-7、2-4、2-6、2-10、3-6、3-9、4-8、5-10共 11 条边哈斯图从上往下排就按这个关系。最小元是 11 整除 A 中所有元素极大元是 6、7、8、9、10没有别的元素是它们的倍数注意 5 不在其中因为 5|10上界要求一个元素被 A 中所有元素整除也就是最小公倍数 2520不在 A 内所以上界为空集。把「极大元」写成「最大元」是这一问最常见的失分点两者的区别在于最大元要求与所有元素可比。3.4 同余关系枚举与商代数运算表第 7 题给代数系统 V{1,2,3}; #一元运算定义为 #12、#23、#33。第一问要判断 5 个等价关系中本文还有配套的精品资源点击获取