专题路线

计算机科学基础

学习程序设计、数据结构、算法复杂度、数据处理与实验设计。

3 个阶段18 章预计 22 小时
学习进度0/18 章完成
0%
开始学习程序、类型、控制流与函数
先修内容

适合准备学习科学计算、机器学习或科研软件开发的读者。

学习阶段

阶段自测

  1. 学完 C00 · 编程与科学计算综合项目

    对一个数值脚本,说明如何用单元测试、性质测试和固定随机种子保证结果可复现,并列出必须记录的依赖与环境信息。

  2. 学完 C02 · 数据处理与实验设计综合复习

    为一个算法对比实验设计随机化方案与主指标,说明多重比较带来的错误率风险,以及制品发布应包含哪些版本与校验信息。

综合练习

练习完成进度:0/2

难度 3/5

排序算法的渐近复杂度与常数因子

对随机排列的 n 个元素,比较归并排序与插入排序的比较次数量级;当 n=10⁶ 时估算两者基本操作次数的比值,并说明常数因子在何种情形下会让插入排序更快。

查看提示

归并排序比较次数约 n log₂ n,插入排序最坏与平均均为 Θ(n²);小 n 或近乎有序输入时常数项主导。

展开分步解答

归并排序约 n log₂ n 次比较,n=10⁶ 时约 2×10⁷;插入排序平均约 n²/4=2.5×10¹¹,两者相差约 10⁴ 量级。插入排序常数小、额外空间为 O(1),且对近乎有序数据为 O(n),故当 n 很小(经验上数十个元素)或输入几乎有序时反而更快,这也是混合排序在小分段切换到插入排序的原因。

结果核验:用递推 T(n)=2T(n/2)+n 展开归并排序恰得 n log₂ n;对 n=64 的小输入实测两种实现的比较计数,可复现插入排序的常数优势,与渐近分析互补。

难度 3/5

哈希表装载因子与期望探测长度

开放寻址哈希表容量 m=1024,已存入 n=768 个键。计算装载因子 α,并用均匀散列假设下不成功查找的期望探测数 1/(1-α) 估计探测次数,说明 α 接近 1 时性能为何急剧恶化。

查看提示

α=n/m;均匀散列下每次探测命中空闲槽的概率为 1-α,期望探测数为其倒数。

展开分步解答

α=768/1024=0.75,期望探测数 1/(1-α)=4 次。当 α→1 时空闲槽比例趋于零,聚集效应使连续被占区间越来越长,期望探测数发散,因此实现通常设定装载因子上限(如 0.7),超过即扩容并重新散列。

结果核验:α=0.5 时公式给 2 次、α=0.9 时给 10 次,单调性与直觉一致;用随机键模拟插入并统计平均探测长度,可与 1/(1-α) 曲线逐点对比核对。

参考资料