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

Posted math

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了炼金术: 可进化的模型和用例相关的知识,希望对你有一定的参考价值。

有一次,我做了一道算法题: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集合上是“绝对正确”的。

以上是关于炼金术: 可进化的模型和用例的主要内容,如果未能解决你的问题,请参考以下文章

炼金术: 可迭代的模型和用例

机器学习:机器的进化-迭代学习

推荐系统POLY2FMFFM模型的进化之路

计算智能基础理论与方法之进化规则浅谈

三万用户的app专项测试工具iTest进化之路

网络模型揭示物种进化的秘密