成绩算法哪个最快?
这个问题的提法不太恰当,应该问“哪种算法最不消耗运算资源”(或“对计算资源的占用率最低”)。因为算法的速度(运行时间)与数据量的关系并不是单调的线性相关。 举个例子来说明这个问题:假设某个算法对于任意多数据量的处理都只需要增加不到1s的时间,那么当数据量增长到10倍的时候,该算法的运算时间也会增长到10倍吗?答案是未必如此,如果处理这些数据需要增加的内存或者CPU周期数恰好是增加的倍数,那时间是增长的倍数;但是如果这些增幅不是倍数的增长,那么时间的增幅就会小于这些数据量的增幅,也就是说时间反而可能只是增长了9倍。这就是由于“缓存缺失”(缓存未能命中而必须进行下一次数据请求和加载)造成的额外系统开销。这种情况是非常常见的。 对于一个特定的算法来说,其本身所固有的运行时间通常很难直接观察到。所以上面的讨论也是理论上最佳的,在实践中难以达到。因此上面讨论的最不消耗运算资源的算法实际上也是最“快”的算法。
当然,在现实世界中,不同的算法为了处理不同规模的数据集其内部的结构可能会有差异,从而导致了它们运行时间可能并不会一样。但是这里所说的“最快”,指的就是在不增加额外的系统开销的情况下,算法能处理的最大数据量。 回到题目中来,题主提到了“成绩算法”的问题。不知道这个问题指的是什么。我猜测是指如何对一个学生多个科目的考试成绩进行加权求和来得到这个学生的最终成绩。如果是这个问题的话,上述讨论依然适用,只不过此时我们关心的并非是最“快”的算法,而是期望得到的最终结果能够尽可能反映每个学生各个科目实际情况的差异。
在这种场景下,最“快”的算法虽然也能完成任务,但是由于其根据所有数据求和的方式可能会让某些分数较低的学生被其他分数高的学生拉平,从而无法真正反映出这些学生的实际水平。如果希望避免这种情况发生,就需要在加权求和的过程中加入一些约束条件,使得最后的加权求和过程中各数据项的系数能够保留下来。这样的算法虽然复杂了一些,但在许多实际问题中,这是最有可能得到最优解的方法。