Dijkstra 算法原理及js实现

2019-03-24
阅读 14 分钟
4.2k
1. 用链表表示带权图 1.1 对链表头节点的描述 {代码...} 1.2 对链表的其它节点的描述 {代码...} 1.3 图 {代码...} 1.4 简单的 uuid {代码...} 2. Dijkstra 算法 Dijkstra 算法的思想是将图中的所有节点划分到两个集合中,集合Q中存放的是最短路径未确定的节点,集合S中存放的是已经确定最短路径距离的节点,初始时,所有...

二叉堆、堆排序、优先队列、topK问题详解及js实现

2018-01-15
阅读 15 分钟
4.8k
说明 本文涉及的堆,下标都从0开始,本文算法部分严格按照《算法导论》并参照了维基百科 1. 满二叉树 深度为k的二叉树为满二叉树的充要条件是节点数为 $$2^{k}-1$$ 图 1.1 2. 完全二叉树 满二叉树也是一种完全二叉树 图 2.1 2.1. 叶节点只能出现在最下层和次下层 2.2. 非叶子节点的孩子一定是从左至右依次排列的 3. 二叉...

单源点最短路径(Bellman-Ford)原理及js实现

2018-01-03
阅读 6 分钟
4.8k
Bellman-Ford算法运行结束后,会得到从源节点 s 到其它所有节点的最短路径,同时得到每个节点的前驱节点,Bellman-Ford不能包含负权回路如图 1.1 但可以包含图 1.2,这里所说的负权环路是指环路的权值总和为正或为负

最小生成树原理及Kruskal算法的js实现

2017-12-30
阅读 8 分钟
7.1k
设图G(V,E)连通,则生成树:包含图G(V,E)中的所有节点,及|V|-1条边的连通图,一个图的生成树可以有多颗最小生成树:最小权重生成树,在生成树的概念上加一个限制条件,即生成树的所有边的权值总和最小的树,最小生成树也可以有多颗

拓扑排序原理分析及js实现

2017-12-21
阅读 8 分钟
7.4k
设R是集合A上的一个二元关系,若R满足下列三个性质则称R为A上的偏序关系自反性:对任意x∈A,有<x,x>∈R反对称性:对任意的x,y∈A,如果<x,y>∈R,且<y,x>∈R,则必有x=y传递性:对任意x,y,z∈A,若<x,y>∈R,<y,z>∈R,则必有<x,z>∈R

BFS,DFS 算法原理及js实现

2017-12-16
阅读 14 分钟
18k
图的表示分为对顶点集 V 的表示和对边集 E 的表示,这里的重点是如何表示边,边的表示分为邻接矩阵和邻接链表这两种表示方法,邻接矩阵适合表示边稠密的图,其消耗空间为|V|*|V|,如果是无向图,则可以用上三角矩阵或者下三角矩阵来表示,是空间消耗变为|V|*|V|/2,邻接链表适合表示边稀疏的图,其消耗的空间为 O(|V|+|E|...

express 中间件机制及实现原理

2017-08-27
阅读 5 分钟
9k
中间件机制可以让我们在一个给定的流程中添加一个处理步骤,从而对这个流程的输入或者输出产生影响,或者产生一些中作用、状态,或者拦截这个流程。中间件机制和tomcat的过滤器类似,这两者都属于责任链模式的具体实现。

正向代理和反向代理

2017-08-05
阅读 1 分钟
2.9k
1 正向代理 例子,我们通过找代理来访问facebook 特点分析: 1.1. facebook对所有的用户提供的统一的访问接口,我们不能访问它是因为网络限制,并不是因为facebook限制 1.2. 美国的一个用户可以直接访问facebook也可以通过一个代理来访问facebook 1.3. 对于facebook来说没有所谓的代理,对他而言,所有的客户端都同等对...

Promise 规范解读及实现细节 (二)

2017-07-18
阅读 6 分钟
2.6k
Promise的实现原理已经在 Promise 规范解读及实现细节 (一) 中说的很清楚了,这里将详细分析 Promises/A+规范 中的Promise解析过程,最后会实现一个 Promise 并提供用于测试的代码

JavaScript this 从此不再疑惑

2017-07-09
阅读 2 分钟
2.7k
为什么会有以上这种情况呢,在 java 中 this 是始终指向调用对象的。是的,始终指向调用对象,调用对象,这个很重要,java 的静态成员是没有 this 的概念的。在 javascript 中 this 只和函数的执行环境有关。只有三种情况,在浏览中 window、调用对象、严格模式下的undefined,对应我们开发者来说能接触到的就是以上三者...

ES6 Generator与异步的同步书写

2017-07-09
阅读 6 分钟
7.5k
我们从来没有停止过对javascript语言异步调用方式的改造,我们一直都想用像java那样同步的方式去写异步,尽管Promise可以让我们将异步回调添加到then方法中,但是这种调用方式仍然不那么优雅,es6 中新增加了generator,我们可以通过他的特性来实现异步任务更加优雅的书写方式。

Promise 规范解读及实现细节 (一)

2017-07-09
阅读 6 分钟
3k
这两个是指两个队列,脚本整体代码、setTimeout、setInterval、setImmediate、I/O、的回调及UI渲染都会被加入到 macrotask 队列中, process.nextTick回调、Promise(浏览器实现)、MutationObserver回调都会被加入到microtask队列。

react 实践之 redux applyMiddleware方法详解

2017-03-19
阅读 3 分钟
10.8k
使用方式 {代码...} 源码 版本 0.14.0 {代码...} applyMiddleware方法主要是对redux的dispacth方法进行封装 原理 {代码...} 原理很简单就是将store的dispatch进行替换,换成一个功能增强了但是具有dispach功能的新函数请输入代码原理和java设计模式中的 装饰者模式很像,旨在增强功能,但不改变接口 接下来具体分析 appl...

react实践之 redux react-redux

2017-03-16
阅读 4 分钟
3k
首先 对于单页应用程序来说全局只有一个store,state当然也只有一个,如果是多页应用,一般每一页对于一个store和一个state,当然,我这里的页是指入口。

spring AOP(二) 相关类或接口

2016-09-15
阅读 3 分钟
3.6k
注意: 前一节我们的代理是对对象进行了代理,而spring 的AOP 可以基于方法进行代理,因为类的属性和方法都有相应的类来描述或者对应 属性由java的Field 表示,方法由Method 来表示

spring AOP (一) 动态代理

2016-09-06
阅读 4 分钟
3.4k
invoke方法参数说明: invoke方法的第一个参数是 proxy 是 Proxy.newProxyInstance 创建的对象,我在网上看到很多文章说这个参数是被代理类的对象即RealSubject的对象,这种说法是错误的,大家可以用RTTI对proxy进行了解,它确实是 Proxy.newProxyInstance 创建的对象构造器说明: ProxyHandler() 构造器接受一个参数,这...

由Jquery创建对象引发的思考

2016-09-05
阅读 5 分钟
3.7k
问题1 Jquery 中创建对象的奥秘问题2 JavaScript中this的指向问题问题3 return this 的作用问题4 instanceof / 对象和类之间的关系