“儿时有个至今印象深刻的记忆,在拼一套巨大的拼图时,那个拼图没有边框,是关于恐龙的,我是分部分拼,进行一段时间后基本分成了上下两大部分,省下的碎片也不少,但是卡在了这里,一直找不到弥补两部分缝隙的部分,之后在某一瞬间,创造性地将两个部分合在了一起,发现原来它们本来就应合在一起,随着阅历的增加,本质上就像物理所追求的万物统一,之后可以推广到其他领域”
在掘金刷题中,又有了相同的感悟。
记忆化搜索,剪枝,原来都可以看成是动态规划,好几年的迷雾仿佛消散了不少,本文重点讨论更接近动态规划的记忆化搜索,剪枝偏向于广义的动态规划。
动态规划其实可以分为两种,一种是从下往上,一种是从上往下。从下往上是我们经常见到的经典动态规划,像背包,最长上升子序列用从下往上都很简洁,而从上往下便是记忆化搜索,最长上升子序列这类问题也能用记忆化搜索解决。
我浅薄地认识,从记忆化搜索到我之前所认为的动态规划是上升的过程,记忆化搜索是从问题出发,不断地分化出许多子问题,其中的分支都一模一样,但是计算机还不能识别出来。而我们就通过记忆化告诉计算机很多次不用重复计算的。而传统动态规划直接从底层出发,目标单纯地走向最后的结果,本质是在人的大脑里已经演化了一遍树的生成过程,之后进行简化,从而实现了更简洁的代码实现。
这种思想不仅仅在算法编程管用,反而对人生更有用。
如万事万物都有底层逻辑,并且不同事物之间的底层逻辑有不少重叠部分,我们若能不断地在自身探索中总结经验教训,看透本质,那么,做事情会变得越来越轻松。以及我们要多学会和别人交流合作,这样我们的记忆就会变得更多,做事情更容易碰到有记录的记忆化数组,这样会让学习生活更加便捷高效。
这次突破以后十分开心,这一周是最后的冲刺周,加油!