矩阵相乘的Strassen's算法

矩阵乘法的数学表达式为对于两个n*n整数矩阵,相乘需要进行n^3次整数乘法和n^3-n^2次整数加法,显然时间复杂度为O(n^3)。我们先将问题简化,任意的矩阵乘法我们都可以转换为两个2x2的矩阵相乘。而这个2x2的矩阵乘法可以拆解为如下形式。Strassen有(7/8)n^3次整数乘法和(7/8)n^3+(3/4)n^2+8次加法,而整数乘法运算时间大于加法。最终的时间复杂度为O(n*log2(7))算法的核心思想是用更小规模的乘法来得到中间矩阵,最后加法汇总成需要的矩阵。Introdu...

在Vue组件可见时异步加载

对于单页应用,我们通常用路由来做代码分割,但在一个页面,对于一个首屏不可见的组件或者说需要用户交互才会触发显示的组件,我们还可以用延迟加载组件的方法,来减少首页体积,更细粒度的控制加载内容。vue 提供了 asyncComponent 工厂函数,我们可以在这个基础上做可见时异步加载。const AsyncComponent = () => ({ // 需要加载的组件 (应该是一个 `Promise` 对象) component: import('./MyComponent.v...

前端状态管理——Redux与有限状态机(FSM)

ReduxRedux和Vuex都是基于Flux的思想实现的,这里我们以Redux为例。核心概念所有的状态存放在 Store。组件每次重新渲染,都必须由状态变化引起。用户在 UI 上发出 action。纯函数 reducer 接收 action,然后根据当前的 state,计算出新的 state。特点数据的单一来源:即整个APP尽量不使用内部state,所有的状态全部源自于Redux纯函数reducer:处理action并生成新的state,其形式为 newState = f(state,a...

【译】使用 WebStorm 调试 Nuxt.js

你之前一直只用控制台调试吗?你是否对其输出的顺序头疼不已?用很长时间才发现丢失了对象?让我们面对现实...几乎每个人都不得不重复这种方法,包括我自己。console.log 不是且永远不是调试的银弹调试器是一个伴随我们多年但因为种种原因人们不再Node世界中使用。我们来自NodeJS,VSCode和Jetbrains的朋友创建了大量工具,帮助我们“停止”应用程序,并在那个时刻获得应用程序的当前状态。NuxtJS,另一方面,尝试启动和运行调试器一直很痛苦,难以搞定,因此人们就倾向于放弃并开始...

JS 实现LRU缓存

为什么不直接用对象这种k-v结构,因为内存空间很宝贵而且是有限的。在浏览器我们无所谓,但服务端就不一样了,例如nuxt就是用了LRU算法缓存接口数据或者渲染后的dom对象。LRU(Least Recently Used)把最近没用过的一个置换出去,意思就是如果最近用到了就放到前面,如果不够了最后一个就是最近没使用的,将其删除掉就好。使用双链表就能满足这种需求。/* * Illustration of the design: * * entry en...