leetcode 上的题目是怎么想到的,测试用例是怎么确保是完整覆盖的呢?

2023-06-06 10:35:39 +08:00
 pythonee

刷了几十道题后,我突然想到,这些 oj 类的网站,感觉难的不是做题的人,而是出题的人。 他们怎么想出来这些题目,怎么生成测试用例来验证提交程序的准确性和性能要求

4110 次点击
所在节点    程序员
18 条回复
5200721
2023-06-06 10:51:20 +08:00
也不全是所有的题测试案例完整覆盖吧?如果你有正确的程序,把案例丢进去跑不就生成了测试用例了吗
emSaVya
2023-06-06 10:57:23 +08:00
近期周赛新题都搞成老题换皮了。越来越没意思。
gam2046
2023-06-06 11:32:34 +08:00
就是拍脑袋想的。当然也可以说是经验。

假设出了一道题要求实现 a+b ,那么出题人就会想一下一些可能存在的边界值,比如正数+负数,正数+正数,负数+负数,0+0

除了边界值以外,常见的还有越界问题,比如超大正数相加,超大负数相加等等。
xth12138
2023-06-06 12:02:27 +08:00
出题人自己想的,如果你遇到没覆盖的情况,可以去贡献测试用例
zzzlight
2023-06-06 13:12:47 +08:00
有没有可能,当你发现问题后你也可以提交用例(众人拾柴火焰高)
corcre
2023-06-06 13:15:19 +08:00
不能, 所以提供测试用例会得金币
S179276SP
2023-06-06 13:35:25 +08:00
所以有些题目很傻逼,看踩就知道。
Tompes
2023-06-06 14:26:39 +08:00
不是一定能全覆盖的
LavaC
2023-06-06 14:32:57 +08:00
所以像周赛就会有 rejudge ,我也试过几次以为是奇思妙想结果只是刚好过了所有测试用例的错误解题代码。
kachu673
2023-06-06 14:33:05 +08:00
跟高考出题人一样,都是先有的答案,或者先有的一个思路,然后给你不断加难点
threebr
2023-06-06 14:35:31 +08:00
全覆盖在数学上叫做形式化验证。但实际工程里没人这么搞,都是出了 bug 再去补
pythonee
2023-06-06 17:10:50 +08:00
@LavaC 原来如此,好想观摩一下
menc
2023-06-06 20:41:56 +08:00
如果你打信息学竞赛,就会发现有 case 给错的,有 case 不够导致错误解法也能 ac 的,也有用例太少选手直接暴力提交碰答案的
txy3000
2023-06-06 21:30:20 +08:00
贪心过了 很可能是 case 不够全 得 dp 然后被 rejudge
learningman
2023-06-07 09:45:18 +08:00
数据出弱了挺常见的吧
UMadeleine
2023-06-07 10:03:04 +08:00
我在学校的程序设计竞赛校队呆过,也担任过校赛的出题人。这个其实不能很好地保证,数据弱了是常有的事情。出题不是一个人,会有其它人验题,我们校赛出题是一个人出之后至少两个人验,leetcode 这种网站完全可以增加更多验题人的数量,这样基本能覆盖到(但其实也不能保证每一道题都不出问题)。更好的机制是 codeforces (程序设计竞赛网站)的 hack 机制,通过对提出 hack 的参赛选手给予加分,来鼓励参赛选手找出题目中的问题。
Asmodeus
2023-06-07 15:04:05 +08:00
@LavaC 这就很哲学了,为啥能过了所有测试用例还是错的呢。
LavaC
2023-06-07 16:10:07 +08:00
@Asmodeus 因为我发到群上的时候有人发了个用例让我测一下,确实没通过。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/946177

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX