一、总论
第三个单元作为从第二个单元的心态考验中解放的一个单元,很容易让人先入为主的松了一口气。这个单元干的事情确实要之前两个单元要少,这是因为其实我觉得 OO 最体现思维的“架构设计” 部分被 JML 剥夺了(这么说并不严谨,之后分析)。导致确实这个单元的任务重心并不在完成作业本身,这是大部分人呈现的情况。
但是人的精力总是一定的,没有被写 OO 本身浪费掉,就会被其他事情浪费掉。而这个单元恰恰有两件浪费精神的事情。一件是去优化算法的复杂度,,一件是去做测评。
关于算法时间复杂度的优化,我个人感觉是一种“被动卷”。这种卷带来的不好受并不是像前两个单元,因为简化一个表达式,或者改一种电梯策略的“主动卷”。而是一个必须参与的“默认卷”,一个很死板的东西。从三个方面分析:
- 代价过大,比如说如果没有进行算法优化,不是没有性能分,而是直接被人 hack 掉,虽然分数确实不多,但是太令人恶心了。
- 毫无美感,所谓的优化就是内部维护一个中间变量,不涉及算法(当然图算法也算用到了,但是最恶心的是其他的维护变量)
- 与
JML无关,哪怕是图算法或者并查集,很精妙,但是跟JML没有关系,JML是用于规范代码的行为的,算法是用来改善代码行为的。类似于一个是法律,一个是经济,要研究法律(JML),探讨的应该是“张三与 20 个老婆结婚但是都不领结婚证,算不算重婚?”这一类明显需要细细甄别的问题,而不应该探讨“如何让张三与 20 个老婆结婚但不领结婚证”这个问题(这是一个经济问题(算法))。