码迷,mamicode.com
首页 > 其他好文 > 详细

炼金术(6): 可进化的模型和用例

时间:2020-03-06 23:59:58      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:遇到   方式   解决   表达式   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 教会你如何画出一个完备的状态机。

  1. 首先找到从初始状态(init state)到最终状态(final state)的最小转换路径;
  2. 其次考虑从final state遇到新的输入后,应该到哪个状态;
  3. 最后,考虑已知状态遇到其他剩余的输入后,应该转换到哪个状态。

这点其实不新鲜,你通过解决一个问题,获得了这个问题背后的知识。而另一方面,我的编程过程很有意思,一开始就几个case,然后每次我觉得可以了,跑下又又一个新case 失败,于是我就把新case加入。然后修改的代码要把旧case和新case都通过。但是解决新case的时候,我会把旧case都注释掉,先解决新case。过了后再把旧case都打开,跑下旧case会有一些被破坏,失败,我就要再修复。都过了后再提交。这样多了几十轮后,最终50几个case都过了,也AC了。

你不觉的这个过程很符合科学研究的原理么?

不断根据失败的新case修正已有的模型,但是已有的模型都属于被发现了的case集合,每次修正的模型,都不是真正正确的,但是呢,每次修正的模型可以保证cover住所有旧case集合+1个新case。新的模型只会比旧模型更正确,但是旧模型在所有旧case集合上是“绝对正确”的。最终,完全正确的模型被迭代出来。

我真正惊喜的不是最后的AC,而是在过程中不断体会这点,我在过程中一点都不着急,因为发现这种迭代方式,一定会导向最后的AC。所以当我发现这点后,就有了“信心”。

这种信心是建立这个基础之上的:“新的模型只会比旧模型更正确,但是旧模型在所有旧case集合上是“绝对正确”的。

炼金术(6): 可进化的模型和用例

标签:遇到   方式   解决   表达式   final   drawing   ems   tco   状态   

原文地址:https://www.cnblogs.com/math/p/rule-006.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!