VE472 复习站 / HW5–6

HW5–6:从稳定 SVD 到并行优化

逐题拆解题意、知识点与作答结构,并用三个完整例题训练手算 SVD。

来源与证据边界

本页直接核对以下材料:

题面事实
直接来自 2026 h5/h6 PDF 的要求。
课程连接
来自 Chapter 4–5 整理页的概念、公式与系统边界。
可验证推导
可以由矩阵乘法、特征分解、微分或 work-depth 模型直接检查。
未提交
当前没有可审计的 HW6 实现、报告、运行日志或结果;不得虚构。

HW5–6 与 Chapter 4–5 映射

作业题对应章节作答时必须建立的连接
HW5 Ex.1 数值稳定性 C4:扰动、SVD 稳定性 一般特征分解受特征向量基条件数影响;SVD 的 U,V 正交,但 Gram matrix 会平方条件数。
HW5 Ex.2 full SVD C4:SVD 定义、Gram、QR/SVD ATA 给右奇异向量,AAT 给左奇异向量;零空间补 full bases。
HW5 Ex.3 PCA in Spark C4:PCA/SVD、tall-and-skinny;C5:PCA→GD 累计解释方差选 k;scores 为 XV=UΣ;不可把 response y 泄漏进 PCA。
HW6 Ex.1 Newton/Gauss–Newton C5:Taylor、Hessian、GD 二阶模型导出 Newton step;线性最小二乘的 Hessian 恰为 JTJ
HW6 Ex.2 PRAM XOR C5:DAG、work/depth、Brent 二叉 reduction 保持 Θ(n) work,把 depth 降为 Θ(log n)
HW6 Ex.3 Spark variants C5:batch/SGD/Hogwild/broadcast Spark executor 默认不共享 driver 可变内存;每种算法必须说明状态位置、通信与同步。

HW5:逐题题意、知识点与解法结构

Ex.1 — Numerical stability

1.1 大数据中提高精度是否值得

题意:题目要求权衡精度、存储、网络和吞吐,不接受“精度越高越好”的单向结论。

知识点:float 通常约 7 位有效十进制数字;double 约 15–16 位。更高精度降低累计、相消、病态分解和长迭代中的舍入误差,但增加内存、磁盘与网络流量,并可能降低缓存、SIMD 或 GPU 吞吐。

解法结构:

  1. 先说误差收益:敏感 reduction 与 factorization 更可靠。
  2. 再说系统代价:double 的每元素容量通常约为 float 的两倍。
  3. 指出边界:高精度不能修复噪声数据、错误模型或不稳定算法。
  4. 给条件化结论:依据 condition number、误差预算与失败证据选择;可采用混合精度。

1.2 四种操作、100 个随机 1000×100 矩阵

题面事实:分别累计测量 svd(X)svd(X')eig(X*X')eig(X'*X)

知识点:XXT 是 1000×1000,XTX 是 100×100;两者的非零特征值相同。XXT 的非零奇异值也相同,但库实现、full/economy 模式与 workspace 会影响计时。

rng(0);
trials = 100;
elapsed = zeros(trials, 4);

% 可先用一份矩阵 warm-up,避免把首次库初始化混入主计时
X = randn(1000, 100);
svd(X, "econ"); svd(X', "econ"); eig(X*X'); eig(X'*X);

for t = 1:trials
    X = randn(1000, 100);
    tic; svd(X, "econ"); elapsed(t,1) = toc;
    tic; svd(X', "econ"); elapsed(t,2) = toc;
    tic; eig(X*X'); elapsed(t,3) = toc;
    tic; eig(X'*X); elapsed(t,4) = toc;
end

total = sum(elapsed, 1);
average = mean(elapsed, 1);
spread = std(elapsed, 0, 1);

结果解释框架:报告 MATLAB 版本、CPU/BLAS、随机种子、econ 约定、总时间、均值和离散度。小 Gram 通常更快,但显式形成 XTX 会令 2-norm condition number 从 κ(X) 变为 κ(X)2;速度不自动代表稳定。

常见扣分点:只生成一个矩阵;只测一次;把本机秒数写成算法定律;不说明 full/econ;把形成 Gram 的时间排除却不声明。

1.3 1000 次随机扰动

题面事实:对给定 5×5 非对称矩阵 X,分别研究 X+δX 的 eigenvalues 与 singular values 在 1000 次小随机扰动下的变化。题目提示可参考 MATLAB eps

rng(0);
trials = 1000;
scale = eps(norm(X, "fro")) * norm(X, "fro");
baseEig = eig(X);
baseS = sort(svd(X), "descend");

eigSamples = complex(zeros(5, trials));
sSamples = zeros(5, trials);
for t = 1:trials
    dX = scale * randn(size(X));
    e = eig(X + dX);
    [~, order] = sortrows([real(e), imag(e)], [1 2]);
    eigSamples(:,t) = e(order);
    sSamples(:,t) = sort(svd(X + dX), "descend");
end

% 报告 absolute error 的 median/std/quantiles,避免 signed error 抵消

知识点:非对称矩阵的 eigenvalues 可能为复数,跨 trial 比较前必须固定排序或匹配规则。singular values 非负且可降序匹配,并满足扰动界 i(X+E)−σi(X)|≤‖E‖2

常见扣分点:把确定性的逐元素 eps(X) 称为随机扰动;直接比较未匹配 eigenvalues;累加 signed difference 使正负误差抵消;不写扰动尺度。

1.4 用 Chapter 4 解释实验

一般特征分解 M=PDP−1 的局部扰动放大与 ‖P‖‖P−1 有关。SVD 的左右因子正交,因此对应 2-norm 条件因子为 1。答题时还必须说明:SVD 较稳不表示所有 SVD 路线都最快,且通过 Gram 求 SVD 会损失一部分稳定性优势。

Ex.2 — 不用计算机求完整 singular decomposition

题面矩阵:

X=[[1,2,3,4],[5,6,7,8],[9,0,1,2]]∈ℝ3×4

题意:题面写的是 singular decomposition,不是只求 singular values。答案必须交出 U,Σ,VT,说明 full/thin 约定,并详写步骤。

最省算力路线:因为 3<4,先算 3×3 的 XXT

XXT=[[30,70,20],[70,174,68],[20,68,86]]

调研材料记录其正特征值约为 235.6958、53.5435、0.7607,因此奇异值约为 15.3524、7.3173、0.8722。先求对应的正交归一左特征向量 u1,u2,u3,再用 vi=XTuii 恢复前三个右奇异向量。最后解 Xv4=0 并归一,补出 full V∈ℝ4×4

完整手算合同与三个可算尽的小例见下一专题。对 HW5 大矩阵,最终必须核验 UTU=I3VTV=I4UΣVT≈X

Ex.3 — PCA in Spark

题面:两个无 header 的 sensor CSV 中至少一个可能包含 1001 个电路传感器输出,最后一列 y 是每小时用电量。需要解释 PCA 的帮助、找出解释 90% 数据的最小列数 n、用前 n 个 principal components 建模 y,并判断 sensors2 是否同类。

3.1 PCA 如何帮助

PCA 把强相关传感器列旋转为正交主方向,按方差排序。它可以揭示低维结构、减少后续回归维数,并帮助观察异常或分布差异。PCA 不知道列的物理名称,也不能单独证明两个文件来自同一系统。

3.2 解释 90% 所需列数

先把最后一列 y 分离。只在 feature matrix 上拟合 scaler/PCA。若解释方差比为 e1≥e2≥…,取最小 n 使:

Σi=1nei≥0.90

常见扣分点:把“每个 component 的 EVR 大于 0.01”当成累计 90% 规则;把 y 放进 PCA,造成 label leakage。

3.3 用 principal-component scores 回归

import numpy as np
from pyspark.ml.feature import PCA, StandardScaler, VectorAssembler
from pyspark.ml.regression import LinearRegression

# 无 header CSV:最后一列是 y,其余列是传感器特征
raw = spark.read.option("inferSchema", True).csv(path)
feature_cols = raw.columns[:-1]
label_col = raw.columns[-1]
data = raw.withColumnRenamed(label_col, "label")
train_raw, test_raw = data.randomSplit([0.8, 0.2], seed=42)

assembler = VectorAssembler(
    inputCols=feature_cols,
    outputCol="features"
)
train_assembled = assembler.transform(train_raw)
test_assembled = assembler.transform(test_raw)

scaler = StandardScaler(
    inputCol="features",
    outputCol="scaled",
    withMean=True,
    withStd=True
).fit(train_assembled)                 # 只在训练集拟合
train_scaled = scaler.transform(train_assembled)
test_scaled = scaler.transform(test_assembled)

# 只用训练集方差谱选择累计解释方差达到 90% 的最小 n
full_pca = PCA(
    k=len(feature_cols),
    inputCol="scaled",
    outputCol="all_pc_scores"
).fit(train_scaled)
cum_evr = np.cumsum(full_pca.explainedVariance.toArray())
n = int(np.searchsorted(cum_evr, 0.90) + 1)

pca_model = PCA(
    k=n,
    inputCol="scaled",
    outputCol="pc_scores"
).fit(train_scaled)                    # 仍只在训练集拟合
train_scores = pca_model.transform(train_scaled)
test_scores = pca_model.transform(test_scaled)

model = LinearRegression(
    featuresCol="pc_scores",
    labelCol="label"
).fit(train_scores)
test_predictions = model.transform(test_scores)

管线合同:先切分,再由训练集拟合 scaler、选择 n、拟合 PCA 和回归;测试集只调用 transformtest_predictions 才用于 held-out R²/RMSE,因而不会把测试分布泄漏进特征空间。

模型写为 y=β0+Σβipi。题面给 ε∼Normal(0,1) 是模型假设;应检查残差,而不能把它当作已证事实。报告 held-out R²/RMSE、split/seed 与 residual diagnostics。

3.4 判断 sensors2

对两份文件采用相同预处理、split 与评价口径,比较 cumulative spectrum、PC-score regression 的 held-out 表现、残差结构和基线。仅凭一个高 R² 或二维散点相似,不能证明来源相同。

手算 SVD 专题:从形状到验算

本专题是本页主体。目标不是背答案,而是在限定时间内稳定地构造 A=UΣVT

1. 先写 shape:避免一开始就丢分

A∈ℝm×nr=rank(A)

形式UΣV保留内容
full SVDm×mm×nn×n完整左右正交基,包括零空间。
thin/economym×rr×rn×r只保留正奇异值对应 modes。

题面要求 decomposition 时,若未声明 thin,应优先给 full 或明确说明所用约定。

2. 七步通用流程

  1. 写形状与秩上界。r≤min(m,n),Σ 的位置由形状决定。
  2. 选较小 Gram。宽矩阵优先 AAT;高矩阵优先 ATA
  3. 求对称 Gram 的特征对。特征向量可取为正交归一;特征值理论上非负。
  4. 排序并开方。σi=√λi,按降序排列;向量列必须同步重排。
  5. 恢复另一侧。若先得 vi,用 ui=Avii;若先得 ui,用 vi=ATuii。只对 σi>0 使用。
  6. 补 full bases。null(A) 补 V;null(AT) 补 U。对补向量正交归一。
  7. 三重验算。检查列单位正交、奇异方程与重构。
形状 → 小 Gram → eigenpairs → σ 降序
     → nonzero modes 恢复另一侧
     → nullspace completion
     → UᵀU / VᵀV / UΣVᵀ 三重验算

3. 左右奇异向量到底属于哪一边

A=UΣVT

ATA=VΣTΣVT

AAT=UΣΣTUT

  • ATA∈ℝn×n 的 eigenvectors 是 V 的列,位于输入空间。
  • AAT∈ℝm×m 的 eigenvectors 是 U 的列,位于输出空间。
  • 正的非零 eigenvalues 相同,均为 σi2

记忆法:Gram 的外侧字母决定向量:ATA 最外是输入维度 n,所以给 V;AAT 是输出维度 m,所以给 U。

Example 1:方阵、两个不同正奇异值

A=[[3,1],[1,3]]

Step 1 — Gram:

ATA=[[10,6],[6,10]]

Step 2 — 特征多项式:

det(ATA−λI)=(10−λ)2−36=(λ−16)(λ−4)

λ1=16λ2=4,已降序。

Step 3 — 右奇异向量:

v1=(1,1)T/√2v2=(1,−1)T/√2

Step 4 — 奇异值与左向量:

σ1=4σ2=2

u1=Av1/4=v1u2=Av2/2=v2

Step 5 — 组装:

U=V=(1/√2)[[1,1],[1,−1]]Σ=diag(4,2)

Step 6 — 验算:

UΣVT=(1/2)[[1,1],[1,−1]][[4,0],[0,2]][[1,1],[1,−1]]=[[3,1],[1,3]]

陷阱:本例 U=V 是因为 A 对称正定,不是所有方阵的规律。

Example 2:重复奇异值与旋转不唯一

B=2I2

Step 1:BTB=4I2,所以 λ12=4σ12=2

Step 2:最简单的选择是:

U=I2Σ=2I2V=I2

Step 3 — 展示全部不唯一性:对任意二维正交矩阵 Q,例如旋转矩阵:

Qθ=[[cosθ,−sinθ],[sinθ,cosθ]]

U=QθV=QθΣ=2I

UΣVT=Qθ(2I)QθT=2I=B

结论:重复奇异值对应的左右 singular subspaces 可作同一个正交旋转。不同同学得到不同 U/V 不代表其中一个错误;应检查正交性和重构。

排序边界:相等奇异值之间没有唯一顺序。只要相同 block 的 U/V 变换同步即可。

Example 3:宽、秩亏、零奇异值与符号不唯一

C=[[1,1,0],[0,1,1]]∈ℝ2×3

Step 1 — 选小 Gram:算 2×2 的 CCT

CCT=[[2,1],[1,2]]

Step 2 — 特征对:

λ1=3u1=(1,1)T/√2

λ2=1u2=(1,−1)T/√2

Step 3 — 奇异值:σ1=√3σ2=1。full Σ 为:

Σ=[[√3,0,0],[0,1,0]]∈ℝ2×3

Step 4 — 恢复 V 的非零 modes:

v1=CTu1/√3=(1,2,1)T/√6

v2=CTu2=(1,0,−1)T/√2

Step 5 — 零空间补 V:Cv3=0

x+y=0y+z=0(x,y,z)=t(1,−1,1)

v3=(1,−1,1)T/√3

不能使用 CTu/σ 计算这个 mode,因为对应 σ=0

Step 6 — 组装:

U=(1/√2)[[1,1],[1,−1]]

V=[v1 v2 v3]

Step 7 — 用 rank-one sum 验算:

C=√3u1v1T+u2v2T=[[1,1,0],[0,1,1]]

符号不唯一:把任一非零 mode 的 uivi 同时乘 −1,外积不变。只改一侧则会改变 A。

4. 零与重复奇异值:统一规则

情形能确定什么不能做什么
σi>0 且互异 对应一维左右方向除同步换号外基本确定。 不能只改 U 或 V 一侧符号。
重复正奇异值 对应子空间确定。 不能要求唯一 basis;允许左右 block 同步正交旋转。
σ=0 右零空间来自 null(A);左零空间来自 null(AT) 不能除以 σ 恢复另一侧。

5. 三重验算模板

  1. 正交:UTU=IVTV=I
  2. 奇异方程:对正 mode,AviiuiATuiivi
  3. 重构:UΣVT=A,或逐个 rank-one term 相加。

数值答案还可报告 ||U'*U-I||||V'*V-I||||U*S*V'-A||。手算题应展示至少一个非平凡元素或 rank-one sum,不能只写“verified”。

6. 常见扣分点

  • ATA 的 eigenvectors 放进 U,而不是 V。
  • λ 直接当奇异值,忘记 σ=√λ
  • 排序 σ 后没有同步重排 U/V 列。
  • 把矩形 Σ 写成方阵而不声明 thin SVD。
  • 只求 singular values,未给 singular vectors。
  • 对零奇异值套恢复公式,发生除零。
  • 忘记补 null(A)null(AT)
  • UΣVT 写成 UΣV
  • 因同步换号或重复 singular subspace 的旋转误判答案。
  • 只检查 dimensions,不检查 orthogonality 与 reconstruction。

7. 计时训练:从 8 分钟到 25 分钟

训练时间目标停止条件
Shape sprint3 min给 6 个矩阵,只写 full/thin shapes、优先 Gram 与零空间方向。全部维度正确。
Example 18 min完成 distinct 2×2 的 eigenpairs、排序、恢复与重构。无查表完成。
Example 26 min解释 repeated σ 的旋转不唯一。能用 QΣQᵀ 一行验算。
Example 315 min完成 2×3 full SVD,特别是 nullspace completion。Σ shape 与 v₃ 正确。
HW5 mock25 min对 3×4 矩阵写完整路线;特征根可给已知近似,重点恢复和验算。不漏 U/V/Σ、排序、零空间和三重验算。

建议节奏:前 10% 时间写 shape 与路线;中间 70% 算 eigenpairs 与恢复;最后 20% 做正交/重构检查。若特征多项式耗时过长,先保住结构分:明确哪一 Gram、哪个向量属于 U/V、如何补零空间。

HW6:逐题题意、知识点与解法结构

完成状态:当前没有 HW6 提交解答。以下内容是复习与解题框架,不是运行过的提交结果。

Ex.1 — 题面称“steepest descent”的二阶方法

术语边界:题面明确导出的更新是 Newton step。对非线性 least squares 用 JTJ 近似 Hessian 通常称 Gauss–Newton。标准 steepest descent 只沿 −∇f。作答可沿题面措辞,但 discussion 应区分术语。

1. Jacobian 与 Hessian

g:ℝn→ℝm,Jacobian 的元素为 (Jg)ij=∂gi/∂xj。若 f:ℝn→ℝ,Hessian 为 (Hf)ij=∂²f/(∂xi∂xj),充分光滑时对称。

二阶 Taylor model 对步长 s=x−x0 求导:

m(s)=f(x0)+∇f(x0)Ts+(1/2)sTHf(x0)s

sm=∇f(x0)+Hf(x0)s=0

s=−Hf(x0)−1∇f(x0)

H 非正定时,stationary point 不保证是最小点;实际方法需要 damping、line search 或 trust region。

2. 应用与速度权衡

更新为 wk+1=wk+sk,其中通过解 Hksk=−gk 得到步长。不要显式求逆。对 d 个参数,dense factor/solve 典型代价为 Θ(d³),存储为 Θ(d²);局部收敛可能快,但每步昂贵。

3. Least squares 的 gradient 与 Hessian

r(w)=Xw−yf(w)=(1/2)r(w)Tr(w)J=Jr

∇f(w)=JTr(w)

Hf(w)=JTJ+Σiri(w)Hri(w)

题面说明 residual 是线性函数,因此每个 Hri=0,故 Hf=JTJ 是精确 Hessian,不只是近似。

4–6. 更新、算法与性能

在 full-column-rank 线性 least squares 中:

Δw=−(JTJ)−1JTr(wk)

initialize w
repeat:
    r := residual(w)
    J := residual Jacobian
    g := Jᵀr
    choose stable solve:
        QR / SVD / damped normal equations
    solve for Δw; do not form an explicit inverse
    w := w + Δw
until gradient norm, loss change, or max iterations stops

线性 full-rank least squares 在精确算术中可一步到最优解;一般非线性问题每轮重新线性化。小 singular values 会放大噪声,可用 pseudoinverse、truncated SVD 或 damping。

Ex.2 — PRAM XOR reduction

1. Sequential

s := A[1]
for i := 2..n:
    s := s XOR A[i]
return s

使用 n−1 次 XOR,所以 work 与 depth 均为 Θ(n)

2. Parallel binary tree

for round r := 0 .. log2(n)-1 in sequence:
    parallel for each block start i:
        A[i] := A[i] XOR A[i + 2^r]
return A[1]

第 r 轮执行 n/2r+1 次 XOR。总 work:

n/2+n/4+⋯+1=n−1=Θ(n)

轮数为 log2n,故 depth 为 Θ(log n)

3. Brent 质量评价

T1/p≤Tp≤T1/p+T=Θ(n/p+log n)

算法 work-optimal。当 p≲n/log n 时可接近线性 speedup;processor 再增加后,span log n 成为下界。

Ex.3 — Spark 中六种梯度下降变体

题项状态与数据流必须讨论
1. Batch,无 broadcast 每轮 closure 携带当前 w;partition 计算梯度;reduce/treeAggregate;driver 更新。 参数 shipping、同步 barrier、完整数据扫描。
2. SGD,无 Hogwild 单样本/小 batch 更新具有串行依赖。 Spark task 调度与通信可能远大于一次更新;不得假装 executor 共享 w。
3. SGD + Hogwild 真正 Hogwild 需要同一共享内存、稀疏特征与无锁更新。 不同 executor JVM 默认不共享 driver heap;需限定 executor-local 或另设参数服务。
4. Batch + broadcast 每轮 broadcast 当前 w;workers 只读;聚合后 driver 生成新 w。 销毁/替换旧 broadcast;broadcast 降低分发成本,不消除每轮 barrier。
5. 二阶 ± broadcast 聚合 JTJJTr;driver factor/solve。 dense Θ(d²) 通信/存储;避免显式 inverse;与 4(b) 记号冲突分开处理。
6. Lab 7 测试 固定 split/seed、preprocessing/PCA 与 stopping rule。 同时报告模型质量、time、iterations、partitions、sparsity 与资源配置。

未提交:当前没有上述六种实现的可审计代码、日志或结果。本页不提供虚构的 benchmark 结论。

HW6 Question 4(b):提示与目标式的代数冲突

路线 A:对 J 做 SVD,能得到目标式

J=UΣVT 且 J 满列秩,则:

JTJ=VΣTΣVT

(JTJ)−1=V(ΣTΣ)−1VT

JT=VΣTUT

(JTJ)−1JT=V(ΣTΣ)−1ΣTUT

这与题面目标式完全一致,但它明确使用的是 J=UΣVT

路线 B:真的对 JᵀJ 做 SVD,不会自然得到同一 Σ/U

G=JTJ。若直接写 G=UGΣGVGT,则:

G−1=VGΣG−1UGT

Δw=−VGΣG−1UGTJTr

因为 G 对称半正定,可以取 UG=VG,而 ΣG 的对角项是 J 的 σi2。但这里的 UGG,VG 不是目标式中 J 的 SVD 因子;若不重新定义符号,维度与含义无法同时吻合。

结论与安全作答方式

代数冲突:提示要求分解 JTJ,目标式却使用了分解 J 才自然出现的 ΣTΣUT。当前题面没有提供能让两套符号同时成立的额外定义。

  1. 作答时并列写出上述路线 A 与路线 B。
  2. 明确声明每个 U、Σ、V 对应 J 还是 JTJ
  3. 向课程方确认预期分解对象与 4(c) 的 Ut 维度。
  4. 在 rank-deficient 情形用 pseudoinverse/truncation,不写不存在的普通 inverse。

不得声称:本页已经消除了题面矛盾,或当前存在经过教师确认的 HW6 4(b) 提交解答。

跨 HW5–6 高频扣分点

自测题与答案

1. 对 3×4 矩阵,full SVD 的 U、Σ、V 分别是什么形状?

答案:U∈ℝ3×3Σ∈ℝ3×4V∈ℝ4×4

2. 为什么宽矩阵优先算 AAᵀ?

答案:m<nAAT 是 m×m,比 n×n 的 ATA 小。它先给 U,再对正 σ 用 vi=ATuii 恢复 V。

3. AᵀA 的 eigenvector 应放在 U 还是 V?

答案:V。由 ATA=VΣTΣVT

4. 若 λ=9,奇异值是多少?

答案:σ=√λ=3,不是 9。

5. σ=0 时如何补右奇异向量?

答案:null(A) 的正交归一基。不能使用 ATu/σ

6. 把 u₁ 改成 −u₁ 时,如何保持 SVD 不变?

答案:同时把对应 v1 改成 −v1。于是 σ(−u)(−v)T=σuvT

7. B=2I 的 U、V 是否唯一?

答案:不唯一。对任意正交 Q,U=V=QΣ=2I 都有效。重复 singular subspace 可同步旋转。

8. 手算 SVD 最后要做哪三类检查?

答案:检查 UTU=IVTV=I;检查 Aviiui;检查 UΣVT=A

9. 为什么 eig(XᵀX) 可能快却更不稳定?

答案:对 1000×100 的 X,XᵀX 只有 100×100;但 κ2(XTX)=κ2(X)2,会放大小奇异方向的数值困难。

10. 解释 90% 方差的 n 如何选?

答案:取最小 n,使前 n 个解释方差比的累计和至少为 0.90。必须先按降序排列,并只在 feature matrix 上拟合 PCA。

11. 线性 least squares 的 gradient 与 Hessian 是什么?

答案:r=Xw−y,则 g=XTrH=XTX

12. HW6 4(b) 为什么存在冲突?

答案:目标式由 J=UΣVT 推出;提示却要求对 JTJ 做 SVD。后者的奇异因子和 Σ 含义不同,不能在未重新定义符号时直接得到同一目标式。

13. XOR tree 的 work 与 depth 是什么?

答案:work 为 n−1=Θ(n),depth 为 Θ(log n);Brent 给 Tp=O(n/p+log n)

14. Spark broadcast 解决了什么,没有解决什么?

答案:它高效分发只读参数,减少 closure 重复传输;它不允许 workers 写共享参数,也不消除每轮聚合和同步 barrier。

15. 当前能否报告 HW6 六种变体的性能排名?

答案:不能。当前工作区没有 HW6 提交实现、统一实验配置或运行日志。任何排名都会是虚构。

考前最终检查