数制
- 位权
- 二进制 2k,八进制 8k,十六进制 16k
- 转为十进制
- Σ dk·bk
- 从十进制转换
- 除以基数,余数从下往上读
- 十六进制 ↔ 二进制
- 一位十六进制数 = 4 位二进制
- 二进制补码
- 按位取反后加 1
公式表、每个专题的关键方法步骤和 20 道练习题,完整解答附在最后。
设置各位,使其以 8 位补码存储 −40。按无符号数读取,该位模式的值 U 是多少?
10 位能容纳的最大无符号整数 N 是多少?
在其真值表的 8 行中,((c ∧ a) → b) ↔ ((b ∧ ¬a) ∨ c) 在多少行为真?把这个数记作 N。
已知前提 q ∨ r; ¬q ∨ p。由它们可以推出哪个结论?点选它。
用卡诺图求 F(A, B, C) = Σm(0, 2, 3, 5, 6, 7) 的最简积之和 (SOP) 形式。它总共包含多少个文字 L(带撇的变量算一个文字)?
求 F(A, B, C, D) = Σm(0, 6, 7, 15) + d(1, 9, 12) 的最简 SOP 形式,其中 d 表示无关项。它有多少个乘积项 N?
求满足 x ≡ 6 (mod 7) 和 x ≡ 11 (mod 13) 的最小正整数 x。
用反复平方法求 7161 mod 12。
在一个有序数组中,你从两端各放一个指针向内移动,寻找和为目标值的两个元素。时间复杂度是多少?
用一个只保留最后两个值的循环计算第 n 个斐波那契数,时间和空间代价各是多少?
用两个栈实现一个队列:入队时压入 "in" 栈,出队时从 "out" 栈弹出,"out" 栈为空时从 "in" 栈重新填充。每次操作的均摊代价是多少?
在 Kruskal 最小生成树算法中,并查集结构用来做什么?
完全图 K8 有多少条不同的哈密顿回路 H?只是起点或方向不同的回路算作同一条。
迪杰斯特拉算法从 A 开始运行。点选在第 4 轮被确定(成为永久标号)的顶点;A 本身是第 1 轮。
公用表表达式(WITH name AS (...))提供什么?
给定 R(A, B, C, D) 上的函数依赖 A → B、B → C 和 C → D,闭包 A+ 是什么?
哪个子网掩码对应 /20?
一个 TCP 连接的窗口为 64 KB,往返时间为 100 ms,且没有窗口扩大。它的最大吞吐量大约是多少?
网络 192.168.54.0/24 被划分为若干 /28 子网,从最低地址起编号为 1、2、3、…(子网 1 从 .0 开始)。子网 3 的网络地址的第四个八位组 x 是多少?
一台路由器有到以下网络的路由:10.75.239.0/24, 10.75.240.0/24。能覆盖所有这些网络的单条汇总路由,其最长前缀长度 p 是多少?
答案: U = 216
设置比特位:每一位对应 2 的一个幂(128、64、…、1)。一个十六进制数字恰好是四位,在 8 位补码中最左边的位权重为 −128。按位运算对每个位位置分别进行。
答案: N = 1023
位置计数制:每个数位的值等于该数字乘以基数的某次幂。二进制各位的权为 1、2、4、8、16、……;十六进制为 1、16、256、……,A–F 代表 10–15。在 8 位补码中,最左边一位的权是 −128 而不是 +128,负数就是这样存储的。
答案: N = 4
真值表:含 n 个不同变量的公式有 2ⁿ 行,每一行对应真值的一种组合(1 = 真,0 = 假)。由内向外进行,给每个子公式单独一列。¬a 把值取反;a ∧ b 只有在两者都为 1 时才为 1;a ∨ b 只有在两者都为 0 时才为 0;a → b 只有在 a = 1 且 b = 0 时才为 0;a ↔ b 在两边相等时为 1。
答案: r ∨ p
量词与论证:¬∀x P(x) ≡ ∃x ¬P(x),¬∃x P(x) ≡ ∀x ¬P(x)。把否定向内移动,交换它经过的每个量词,并用命题逻辑的定律否定内部的公式,例如 ¬(a → b) ≡ a ∧ ¬b。当所有前提为 1 的每一行中结论也为 1 时,论证是有效的。只要有一行前提为真而结论为假,它就是反例,说明论证无效。
答案: L = 5
卡诺图:各格按格雷码(00, 01, 11, 10)排列,所以相邻的格子(包括跨越边界的格子)恰好只有一个变量不同。把 1 圈成由 1、2、4、8 或 16 个格子组成的矩形,圈尽可能大、尽可能少,直到每个 1 都被覆盖。每个圈对应一个乘积项:圈内保持不变的变量。由 2ᵏ 个格子组成的圈会消去 k 个变量。无关项 (X) 可用来使圈变大,但不必被覆盖。改为圈 0 则得到最简 POS 形式。
每个圈都是由 2ᵏ 个格子组成的矩形;边上的格子与对边上的格子相邻。
答案: N = 3
卡诺图:各格按格雷码(00, 01, 11, 10)排列,所以相邻的格子(包括跨越边界的格子)恰好只有一个变量不同。把 1 圈成由 1、2、4、8 或 16 个格子组成的矩形,圈尽可能大、尽可能少,直到每个 1 都被覆盖。每个圈对应一个乘积项:圈内保持不变的变量。由 2ᵏ 个格子组成的圈会消去 k 个变量。无关项 (X) 可用来使圈变大,但不必被覆盖。改为圈 0 则得到最简 POS 形式。
由 1 和 X 能够构成的最大的圈。
答案: x = 76
逆元与同余式:a 模 n 有逆元,当且仅当 gcd(a, n) = 1。扩展欧几里得算法把 1 写成 s·n + t·a,于是 a⁻¹ ≡ t (mod n)。当 gcd(a, n) = 1 时,同余式 a·x ≡ b (mod n) 的解为 x ≡ a⁻¹·b。模数互素的两个同余式 x ≡ r₁ (mod m₁) 和 x ≡ r₂ (mod m₂) 在模 m₁·m₂ 下有唯一解(中国剩余定理)。欧拉函数 φ(n) 表示 1 到 n 中与 n 互素的数的个数:φ(n) = n·∏(1 − 1/p)。
答案: 7161 mod 12 = 7
模幂与 RSA:用反复平方法计算 aᵏ mod n:把 k 写成二进制,平方,每一步之后取模,并把对应二进制位为 1 的幂相乘。费马:对不整除 a 的素数 p,aᵖ⁻¹ ≡ 1 (mod p),所以指数可以对 p − 1 取模。RSA:选取素数 p 和 q,n = p·q,φ(n) = (p − 1)(q − 1);公钥指数 e 与 φ(n) 互素,私钥指数为 d = e⁻¹ mod φ(n)。用 c = mᵉ mod n 加密,用 m = cᵈ mod n 解密。
答案: B · O(n)
如果和太小,左指针右移;如果和太大,右指针左移,因此最多 n 步。
答案: B · O(n) 时间和 O(1) 空间
每一步只需要前两个值,因此自底向上方法中的表格可以用两个变量代替。
答案: A · O(1)
每个元素总共最多被压入和弹出各两次,因此尽管一次重新填充可能需要 O(n),整个操作序列的平均代价是 O(1)。
答案: A · 检查一条边的两个端点是否已经连通
Find 判断两个端点是否在同一个连通分量中;如果不在,就加入这条边,并用 union 合并两个分量。
答案: H = 2520
欧拉、哈密顿与树:连通图在每个顶点度数都为偶数时有欧拉回路(每条边经过一次,回到起点),在恰有两个顶点度数为奇数时有不是回路的欧拉通路;此时通路从一个奇度顶点走到另一个奇度顶点。哈密顿回路恰好经过每个顶点一次;Kn 有 (n − 1)!/2 条。n 个顶点的树有 n − 1 条边,有 m 条边的连通图在去掉 m − n + 1 条边后保留一棵生成树。
答案: D
最短路径与生成树:迪杰斯特拉算法每一轮确定一个顶点:暂定距离最小的未确定顶点。它的距离随即成为最终值,并且每个邻点 v 得到 d(v) = min(d(v), d(u) + w(u, v))。克鲁斯卡尔算法按从轻到重的顺序取边并跳过会形成圈的边,从而构造最小生成树;普里姆算法从一个起点出发扩展一棵树,每次加入离开这棵树的最轻的边。n 个顶点的生成树有 n − 1 条边。
答案: D · 一个可在一条语句中使用的命名临时结果
CTE 给子查询起一个名字,使复杂查询更易读,并且可以在同一条语句中被多次引用。
答案: A · {A, B, C, D}
从 A 开始,加入 B(A → B),再加入 C(B → C),然后加入 D(C → D);由于 A+ 包含所有属性,A 是一个键。
答案: D · 255.255.240.0
/20 表示 8 + 8 + 4 个 1。第三个八位组中的四个 1 是 11110000 = 240,所以掩码为 255.255.240.0。
答案: C · 约 5 Mbit/s
吞吐量 ≤ 窗口 / RTT = 65,536 × 8 比特 / 0.1 s ≈ 5.2 Mbit/s,无论链路有多快。
答案: x = 32
IPv4 subnetting: an address has 32 bits. The prefix /p says how many leading bits identify the network; the remaining 32 − p bits number the hosts. A subnet has 2³²⁻ᵖ addresses, but the first (network address) and last (broadcast address) cannot be given to hosts, so 2³²⁻ᵖ − 2 hosts fit. Exceptions: a /31 (point-to-point link, RFC 3021) uses both of its 2 addresses for hosts, and a /32 is one single address (a single host or a loopback).
答案: p = 19
路由汇总:汇总路由 a.b.c.0/p 覆盖前 p 位相同的所有网络。把第一个和最后一个网络中不同的那个八位组写成二进制;相同的前导位数加上它前面各八位组的位数,就是最长的汇总前缀。
汇总路由:10.75.224.0/19 (它还覆盖了列表中没有的 30 个网络)。
ExamProblems · examproblems.com/courses/computer-science-fundamentals