Skip to content
← 返回数学列表
习题与解析

程序员数学 11:文件处理任务的数学复盘 ​

一个数学公式只有在对象、单位与前提都明确时才有用。本课将前面各篇放进一个虚构文件处理任务。所有数字都是题目设定,可以手算,不需要数据库或在线服务。

一、校验、配对与分桶 ​

处理文件前要求“格式有效且校验和匹配”。要比较 200 个文件的每一对,忽略顺序且不允许自配对。临时目录使用长度为 8 的环形编号。

  1. 写出拒绝处理的布尔条件。
  2. 两两比较一共多少次?如果文件数变成 2000 呢?
  3. 当前编号为 1,向后退 4 格后,合法的非负编号是多少?
查看答案与讲解
  1. !validFormat || !checksumMatches,由德摩根律得到。它只表达这两个必要条件,不表示通过后所有 I/O 都必然成功。
  2. 200×199/2=19,900;2000×1999/2=1,999,000。数量扩大 10 倍,比较次数约扩大 100 倍。
  3. 1−4=−3,模 8 的非负代表元为 5。JavaScript 直接 -3 % 8 为 -3,需要按约定归一化。

二、依赖与有限重试 ​

任务依赖为“读取→校验→压缩→发布”,另有“校验→生成清单→发布”。一次上传最多尝试三次,每次失败概率 0.2,暂时假设各次独立且失败概率不变。

  1. 给出一个合法执行顺序,指出哪两个任务可以没有先后依赖。
  2. 计算最终失败概率与期望尝试次数。
  3. 如果三次尝试都受同一个持续故障支配,第 5 题还能直接使用吗?
查看答案与讲解
  1. “读取、校验、压缩、生成清单、发布”合法;压缩和生成清单可以交换,也允许在资源与其他约束满足时并行。
  2. 0.23=0.008,即 0.8%;期望为 1+0.2+0.22=1.24 次。
  3. 不能。独立性可能失效,应重新建模联合事件或使用实测结果。公式计算正确不代表前提适合真实系统。

三、耗时统计与汇总 ​

20 次处理耗时中,18 次为 10 ms,一次 100 ms,一次 1000 ms。采用最近秩分位数定义。另一份报表记录 A 组成功 90/100,B 组成功 1/10。

  1. 计算平均耗时、P95 和 P99。
  2. 计算整体成功率,并说明为什么不是两个百分比的简单平均。
  3. 只报告“平均耗时 64 ms”会漏掉什么?
查看答案与讲解
  1. 平均为 (180+100+1000)/20=64 ms;P95 取第 19 个值,为 100 ms;P99 取第 20 个值,为 1000 ms。
  2. 91/110≈82.73%。整体口径是每次尝试同等权重,两个组的分母不同。
  3. 会漏掉长尾及样本量。还要说明只有 20 条样本、分位数算法和观测条件,不能把这些样本直接等同于长期总体表现。

四、坐标、优化与数值表示 ​

可视化中把点 (2,1) 变换为 (2x+y,y)。批量成本模型为 C(b)=400/b+b,允许整数 1≤b≤12。运行预算为 0.6 秒,观测耗时为 500 毫秒。

  1. 变换后的点是什么?
  2. 成本模型的无约束最小点和约束下最优批量分别是多少?
  3. 是否超出运行预算?能否用 0.1 + 0.2 === 0.3 检验十进制金额相等?
查看答案与讲解
  1. (2×2+1,1)=(5,1)。
  2. C′(b)=1−400/b2,正数域驻点为 20;C″(b)>0。受上限 12 约束时,函数在允许范围内递减,因此选 12。还需验证真实成本是否符合模型。
  3. 没超出,0.6 秒等于 600 毫秒。不能把该浮点等式用作精确十进制金额判断;应按最小单位、舍入规则与取值范围选择精确表示。

怎样写一份数学分析结论 ​

保留四项即可:问题和单位、使用的模型、计算结果、模型没覆盖的条件。例如:“在三次尝试独立且单次失败率固定为 0.2 的模型下,最终失败概率为 0.8%;持续共享故障可能破坏独立性,此数值不是线上可用性保证。”

如果算对了却无法写出前提,应回到对应文章继续练。完整路线与课程资料见程序员数学学习路线。

继续阅读