首页 / 资讯中心 / 文章详情

1024 算法评测先验收什么:从跨语言新基准到五组边界测试

1024 算法评测先验收什么:从跨语言新基准到五组边界测试 ★ FEATURED ARTICLE
给模型一道难题拿到一段很长的推导再看代码能不能过样例这还不够构成一次评测。最容易漏掉的东西往往很小题目允许重复值吗空输入返回什么整数能不能装下中间结果10 月 19 日OpenAI 发布低资源语言编码研究分别讨论“构建软件”和“迁移时保持原有行为”。这里值得借用的是评测对象的划分不能把厂商在数据库任务上的成绩换算成算法竞赛胜率。官方原文我给这次 1024 学习练习定的目标很具体先做出能抓住错误答案的检验器再考虑比较模型。本文没有调用模型也没有一张预先填好的胜负表。五组边界要对应五项明确约定边界需要先问清的问题可以独立检查的东西空输入无解、空结果、抛错选择哪一种返回值是否符合题面重复值元素按集合还是多重集合处理每个值的出现次数负数证明是否偷偷使用了非负前提小范围穷举与反例大整数数学整数还是固定宽度整数中间值范围与溢出策略不连通图未到达节点返回什么独立遍历得到的可达集合它们不是五道已经跑完的竞赛题而是五种设计测试的方向。每项都需要题目规格。例如 Python 整数不会按 32 位有符号数自动回绕把同样的输入搬进 C 时要重新检查类型和运算语义。只说“边界已覆盖”也不够。图是否允许重边、自环排序是否要求稳定都可能继续改变答案的定义。一个会被样例放过的错误排序时顺手去重假设要求返回所有输入元素的升序排列。有人写成了sorted(set(values))。对[3, 1, 2]输出完全正确对[2, 1, 2]它把一个 2 丢掉了。下面的检验器检查两项性质非降序以及输出与输入的计数一致。还要传入输入的副本避免候选函数原地修改数据后把检验依据也改掉。from collections import Counter def valid_sort_result(before, after): return ( isinstance(after, list) and Counter(before) Counter(after) and all(x y for x, y in zip(after, after[1:])) ) def correct(values): return sorted(values) def loses_duplicates(values): return sorted(set(values)) cases [[], [2, 1, 2], [-3, 0, -3], [2**40, -2**40]] for original in cases: snapshot original.copy() assert valid_sort_result(snapshot, correct(original.copy())) counterexample [2, 1, 2] assert not valid_sort_result( counterexample, loses_duplicates(counterexample.copy()) ) print(4 valid cases checked; duplicate-loss bug detected)该脚本已在本地 Python 3.9.6 独立运行。输出是上面最后一行字符串。它验证的是这一个检验器及构造错误不是任何大模型的通过率。检查性质时也要小心只比较集合会漏掉重复次数只比较长度会放过替换元素只检查有序会让空列表蒙混过关。这里用两个相互补充的条件恰好对应这道排序题的规格。将来接入模型哪些记录不能省每次生成至少保留题目版本、输入约束、模型实际 ID、工具权限、可设置的推理参数、完整公开输出、测试集版本与失败原因。别名可能随服务更新改变指向仅记录一个商业名称不足以支持重放。生成失败、格式错误、超时、测试失败应分开记录。题目没有完成不能从分母里删掉。比较多个预算时还要区分“设置的上限”与“实际消耗”一次调用没有提供的用量字段应记缺失。公开题库可以学习检验方法也可能存在训练数据污染。EvalPlus 将更充分的正确性测试与效率评估分开这种分工比一句“过了 Hard”更有解释力但用过它的数据集也不能证明掌握了新题。EvalPlus 项目说明现在能下的结论这份小练习找到了一个确定的去重错误说明检验器至少能识别这一类违约输出。它没有证明排序实现对所有类型都正确更没有证明模型懂不懂排序。作为算法学习者我希望先能回答“这段代码错在哪里哪个输入能重放”有了这个答案再讨论模型之间的差别才站得住。本文对应 10 月 24 日稿位不包含尚未发生的当日发布或模型盲测。
阅读完成 · 觉得有帮助?
咨询建站