标签:遇到 方式 解决 表达式 final drawing ems tco 状态
有一次,我做了一道算法题:https://leetcode.com/problems/regular-expression-matching/
最终的代码,我用JavaScript写了300多行代码,通过的时候我本地的测试用例有50几个。这个题目我做了挺久的,但是我从中获得了很多启发。
当然,算法本身所代表的DFA/NFA,以及模式匹配等知识是其中的一个方面。例如,在做完了这题之后,我去搜了下应该怎样从正则表达式直接画出对应的DFA,这个链接: drawing-minmal-dfa-for-the-given-regular-expression 教会你如何画出一个完备的状态机。
这点其实不新鲜,你通过解决一个问题,获得了这个问题背后的知识。而另一方面,我的编程过程很有意思,一开始就几个case,然后每次我觉得可以了,跑下又又一个新case 失败,于是我就把新case加入。然后修改的代码要把旧case和新case都通过。但是解决新case的时候,我会把旧case都注释掉,先解决新case。过了后再把旧case都打开,跑下旧case会有一些被破坏,失败,我就要再修复。都过了后再提交。这样多了几十轮后,最终50几个case都过了,也AC了。
你不觉的这个过程很符合科学研究的原理么?
不断根据失败的新case修正已有的模型,但是已有的模型都属于被发现了的case集合,每次修正的模型,都不是真正正确的,但是呢,每次修正的模型可以保证cover住所有旧case集合+1个新case。新的模型只会比旧模型更正确,但是旧模型在所有旧case集合上是“绝对正确”的。最终,完全正确的模型被迭代出来。
我真正惊喜的不是最后的AC,而是在过程中不断体会这点,我在过程中一点都不着急,因为发现这种迭代方式,一定会导向最后的AC。所以当我发现这点后,就有了“信心”。
这种信心是建立这个基础之上的:“新的模型只会比旧模型更正确,但是旧模型在所有旧case集合上是“绝对正确”的。”
标签:遇到 方式 解决 表达式 final drawing ems tco 状态
原文地址:https://www.cnblogs.com/math/p/rule-006.html