我有个临时的想法,还不太成熟。
首先我们不希望参加者提交代码,只需要伪代码即可。这个是大的方面。
考虑到伪代码和文字描述的模糊性,有必要提出几点这里使用的伪代码/文字描述规范,不满足规范的视为思路说明,而非伪代码。我目前想到了如下几点:
文字描述必须包含输入、处理和输出过程,不能假定数据在开始时就已经输入完毕,存储在内存中;
算法的每一步,要么是常数时间内可以完成的动作,要么是众所周知的方法(如排序、最短路等),要么是调用在同一段伪代码中定义的其他方法。循环和方法定义的执行体不视为一步,而是当作多步处理,但其中的每一步仍需满足本条的规范。
要对使用的数据结构有明确的定义。数据结构中要引用其他数据结构的,可以使用指针(如Node* next = nullptr),若做了相应说明,也可以使用引用(如Node next = Null)。但是若没有做说明,则默认内层数据结构是外层数据结构的一个字段,访存时可直接通过外层数据结构的地址和偏移量来访问内层数据结构的成员。默认整数是32位的,实数是64位的,指针是32位的,除特殊说明外字符是单字节的ASCII字符。
尽量少bug。我们不是OJ,不要求伪代码完全正确,但也不是对正确性毫无要求。我们能发现或者被其他人指出来有明显/严重的bug的算法,会酌情扣除少量奖励。奖励发放后被指出错误的,不会追回奖励。
奖励方面,我自己拿不出太多节操,同时我想这个虽然有比赛的成分,但是主要目的还是激发活跃性。因此奖励可能不会太多,就是意思意思。所以可不可以这样:
首先给出可接受答案的,受上赏;
并非首先给出可接受答案,但是给出了新的内容,如算法细节、另一种方法(这个应该不太常见)、更详细的说明、证明等等,受中赏;
参与讨论,给出了有价值的想法以及提出解答中的bug的,受下赏。
非规范的伪代码(即“思路说明”)按详细程度酌情给奖励,最高可以给到相当于一段伪代码的奖励。同时考虑若干加分项:
对算法及其思路进行了较详细解释说明的,如动态规划问题解释清楚动归的目标和状态转移函数;
计算了算法的时空复杂度的。整数和实数的四则运算可以认为能在常数时间内完成,高精度数除外;
对于一些特殊算法(如贪心和剪枝等),证明了正确性的。
@ZERC @inuisanaa @随性而为 @NianRuoshui @魍魉QAQ @提辖 讨论一下,六位的看法是?