# R01-D1 百分位性能收束报告 > 状态:R01-D1 已实现并通过自动化与干净构建,待独立复验。 ## 修改范围 - 新增纯函数 `CandidatePercentileCalculator`; - `CompanyScoringDashboardService` 保留原调用位置,仅将百分位计算委托给纯函数; - 未修改候选人综合分、排序、分页、过滤、披露门槛或响应结构。 ## 算法与兼容性 旧实现对每个候选分数再次扫描全部分数,复杂度为 O(n²)。新实现先排序,再以每个分数第一次出现的位置作为“严格低于该分数的数量”,复杂度为 O(n log n)。分母仍为 `有效分数数 - 1`,仍使用 10 位中间精度、HALF_UP,并最终保留两位小数。 等价测试覆盖空集合、单样本、全 null、输入顺序、null 位置、并列分数,以及由 `{null, 0, 1.0, 1.00, 2.5}` 生成的长度 0–6 全组合,并逐项与旧 O(n²) 公式比较。 首次实现使用 `HashMap`,测试立即发现 `1.0` 与 `1.00` 被错误视为不同键;改为按 `BigDecimal.compareTo` 排序的 `TreeMap` 后恢复旧语义。另一个首次失败来自手写并列夹具把最高分期望误写为 66.67;旧公式预言机证明应为 100.00,修正夹具期望,未改变生产公式。 ## 验证 - 定向与看板关联测试:28/28,Failures=0、Errors=0、Skipped=0; - `mvn clean verify`:2099/2099,Failures=0、Errors=0、Skipped=20,BUILD SUCCESS;20 项为既有环境条件跳过项,R01-D1 定向及关联测试 Skipped=0; - OpenAPI:176 paths / 214 operations,All checks passed; - 无 Flyway、ErrorCode、公网接口、表、索引或依赖变化; - 未暂存、未提交、未推送。