天生の放荡 2022-05-04 13:50:10
补充几个适用场景,其实作者在多说一句中已经讲出了精髓,需要大量重复的计算,或者大量计算又依赖于之前的结果
最大公约数(GCD)
function gcd(a,b){ var temp; if (a < b) temp=b, b=a, a=temp; // if a < b,switch while(b != 0) temp=b, b = a%b, a=temp; return a; }
阶乘(factorial)
function factorial(n) { return (n <= 1) ? 1 : n * factorial(n-1); }
可能都是些偏向数学的解决。但是扩展了思路,在遇到动态规划的问题时,更难想到优化点,比如很典型的上楼梯一次可以一步或者两部,问上10级有多少种走法,其实就有那么一些fibonacci的味道在里面。
更值得一提的是,memoize并不是拼错了也不是直觉中的memorize,memo是备忘录的意思,比如大家记下自己遇到的bug,以备在今后遇到时能尽快查找,和memory的记忆的概念是不同的,而动态规划中比较常见的有个备忘录算法,和这里的memo有相似之处(个人之见)。
(另,我一直好奇表情是怎么发的哈哈哈哈
天生の放荡 2022-05-04 13:16:47
非常的棒,我是从前端开始学习,最近开始想学习底层原理。发现老哥写的这篇文章,受益良多。
不过我推荐放点图片增加记忆,我自己是选择用数组的方法绘制了图,加强记忆。
天生の放荡 2022-04-30 05:02:23
var isObject = function (data) { return Object.prototype.toString.call(data) === '[object Object]' } var extend = function(deep) { var sources = typeof deep === 'boolean' && deep ? Array.prototype.slice.call(arguments, 1) : Array.prototype.slice.call(arguments) var i = 0; var obj = {}; for (; i < sources.length; i++) { if (!isObject(sources[i])) { console.error("Function[extend] parmas must be Object") return false } for (var key in sources[i]) { if (deep === true && isObject(sources[i][key]) && obj[key]) { obj[key] = extend(deep, obj[key], sources[i][key]) continue } if (sources[i].hasOwnProperty(key)) { obj[key] = sources[i][key] } } } return obj; }
我没有考虑数组对象的情况,只是一个简单的对象的复制。我只是觉得没必要写的你那么繁琐,比如target
,i
,我觉得这些变量必要性都不大的,可以像我这样简写,不知道你对这种写法有啥看法,或者改进的建议
- 共 1 页
- 1
原因:
解决:
FP
(首次渲染)时间第 119 题:Vue 如何优化首页的加载速度?Vue 首页白屏是什么问题引起的?如何解决呢?