起因

最近在看《数据结构与算法--javascript描述》,然后上npmjs.org去搜索,想找合适的库参考并记录下来,以备以后用时能拿来即用,最没有发现很合自己意的,于是就决定自己一一实现出来。
这是《数据结构与算法--javascript描述》学习笔记的最后一篇了,本阶段学习圆满结束^_^。

npmjs相关库

  • graph;

  • some-graph。

编程思路

  • 深度优先遍历使用递归,但需要设定外部状态数组,因此使用了一个小技巧;

  • 最短路径为不加权的,加权的应该需要经典的Dijkstra算法,以后再继续完善;

  • 注意拓扑排序与深度优先遍历的异同;

  • 以模块模式组织代码;

自己的实现

Graph.js

(function(){"use strict";function Graph(v){this.vertexs = v;this.vertexList = [];this.edges = 0;this.adj = Object.create(null);this._vertex_marked = [];this._edgeTo = [];          //保存可达路径}//拓扑排序Graph.prototype.topSort = function(){var stack = [];var visited = [];for(var i =0; i < this.vertexs; i++){visited[i] = false;}for(var i = 0; i < this.vertexs; i++){if(visited[i] == false){this.topSortHelper(i, visited, stack);}}var al = stack.pop();while(al != null){console.log(this.vertexList[al]);al = stack.pop();}};Graph.prototype.topSortHelper = function(v, visited, stack){visited[v] = true;for(var w in this.adj[v]){if(!visited[this.adj[v][w]]){this.topSortHelper(this.adj[v][w], visited, stack);}}stack.push(v);};Graph.prototype.initMarked = function(){for(var i = 0; i< this.vertexs; i++){this._vertex_marked[i] = false;}};Graph.prototype.pathTo = function(v){var start = 0;this.bfs(start);if(!this.hasPathTo(v)){return null;}var path = [];for(var i = v; i != start; i = this._edgeTo[i]){path.push(i);}path.push(start);var rs = "";while(path.length > 0){if(path.length > 1){rs += path.pop() + "-";}else{rs += path.pop();}}return rs;};Graph.prototype.hasPathTo = function(v){return this._vertex_marked[v];};//广度优化遍历,并生成可达路径,为计算无权最短路径提供数据Graph.prototype.bfs = function(v){this.initMarked();var queue = [];this._vertex_marked[v] = true;queue.push(v);while(queue.length > 0){var cur = queue.shift();console.log("Visited vertex: " + cur);for(var w in this.adj[cur]){if(!this._vertex_marked[this.adj[cur][w]]) {this._edgeTo[this.adj[cur][w]] = cur;this._vertex_marked[this.adj[cur][w]] = true;queue.push(this.adj[cur][w]);}}}};//深度优先遍历Graph.prototype.dfs = function(v){if(arguments[1] == undefined){this.initMarked();}this._vertex_marked[v] = true;console.log("Visited vertex: " + v);for(var w in this.adj[v]){if(!this._vertex_marked[this.adj[v][w]]){this.dfs(this.adj[v][w],1);}}};Graph.prototype.display = function(){for(var i = 0; i < this.vertexs; i++){if(this.adj[i] == null){console.log(i + " --> This vertex is isolate.")}else{console.log(i + " --> " + this.adj[i].join(" "))}}};Graph.prototype.addEdge = function(v, w){if(this.adj[v] == null){this.adj[v] = [];}this.adj[v].push(w);if(this.adj[w] == null){this.adj[w] = [];}this.adj[w].push(v);this.edges++;};module.exports = Graph;
})();

源代码地址

https://github.com/zhoutk/js-data-struct
http://git.oschina.net/zhoutk/jsDataStructs

图(Graph)的javascript实现相关推荐

  1. 从图(Graph)到图卷积(Graph Convolution):漫谈图 神经⽹络模型 (⼀)

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者最近看了一些图与图卷积神经网络的论文,深感其强大,但一些Sur ...

  2. 数据结构--图(Graph)详解(四)

    数据结构–图(Graph)详解(四) 文章目录 数据结构--图(Graph)详解(四) 一.图中几个NB的算法 1.普里姆算法(Prim算法)求最小生成树 2.克鲁斯卡尔算法(Kruskal算法)求最 ...

  3. 数据结构--图(Graph)详解(三)

    数据结构–图(Graph)详解(三) 文章目录 数据结构--图(Graph)详解(三) 一.深度优先生成树和广度优先生成树 1.铺垫 2.非连通图的生成森林 3.深度优先生成森林 4.广度优先生成森林 ...

  4. 数据结构--图(Graph)详解(二)

    数据结构–图(Graph)详解(二) 文章目录 数据结构--图(Graph)详解(二) 一.图的存储结构 1.图的顺序存储法 2.图的邻接表存储法 3.图的十字链表存储法 4.图的邻接多重表存储法 二 ...

  5. 数据结构--图(Graph)详解(一)

    数据结构–图(Graph)详解(一) 文章目录 数据结构--图(Graph)详解(一) 一.图的基本概念 1.图的分类 2.弧头和弧尾 3.入度和出度 4.(V1,V2) 和 < V1,V2 & ...

  6. python加载模型文件进行图片分类_tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式...

    Google提供了一个工具,TensorBoard,它能以图表的方式分析你在训练过程中汇总的各种数据,其中包括Graph结构. 所以我们可以简单的写几行Pyhton,加载Graph,只在logdir里 ...

  7. 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络 (二)

    在从图(Graph)到图卷积(Graph Convolution): 漫谈图神经网络 (一)中,我们简单介绍了基于循环图神经网络的两种重要模型,在本篇中,我们将着大量笔墨介绍图卷积神经网络中的卷积操作 ...

  8. 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (一)

    本文属于图神经网络的系列文章,文章目录如下: 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (一) 从图(Graph)到图卷积(Graph Convolutio ...

  9. 数据结构与算法(python):图(Graph)的基本概念及应用

    参考自 MOOC数据结构与算法Python版 本章代码: https://github.com/HuiFang-hub/-/tree/main. 目录 一.图Graph的概念 1.1 互联网 1.2 ...

  10. 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (二)

    本文属于图神经网络的系列文章,文章目录如下: 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (一) 从图(Graph)到图卷积(Graph Convolutio ...

最新文章

  1. RANet : 分辨率自适应网络效果和性能的best trade-off | CVPR 2020
  2. 方阵旋转180度JAVA代码_方阵顺时针旋转的实现代码
  3. java 字符串过长_idea java常量字符串过长解决办法
  4. 大学计算机基础章节知识点,《大学计算机基础》知识点
  5. c语言程序设计修改题,2006年秋季C语言程序设计》期末考试题A卷答案答案--修改后.doc...
  6. Windows - 通过注册表编辑器来删除多余盘符
  7. 37 Reasons why your Neural Network is not working
  8. element-ui中el-table的表头、内容样式
  9. Activiti中的流程存储服务(RepositoryService)
  10. 《鸟哥的Linux私房菜 基础学习篇(第四版)》 第23章 XWindows设定介绍 笔记
  11. linux下编写sql脚本,在Linux系统中编写简易shell脚本,向PLSQL表中插入数据
  12. 教你写页游自动化Python脚本,取色,大漠识别和后台点击
  13. python获取word页数_使用Python的word文档的页数(Number of pages of a word document with Python)...
  14. 常规设置——SDKMAN
  15. Tesla Model S的设计失误
  16. 阿里云SLB负载均衡理论与操作
  17. 防止APP被黑客攻击的解决方案
  18. MythType添加空格
  19. 基础软件与开发语言开源论坛| ChinaOSC
  20. 树莓派搭建网络摄像头

热门文章

  1. 关于MEET大会直播抽奖后续红包发放的说明
  2. 衡阳之后,重估自动驾驶落地
  3. 中国最懂自动驾驶量产公司秀肌肉:自动驾驶算力怪兽、百亿参数云端超大模型、百万公里路测里程...
  4. 英伟达发布“空气CPU”,Arm架构专为AI而生,性能超x86十倍,与自家GPU更搭
  5. 中国物流供应链“零的突破”!阿里路径规划算法入围运筹学“奥斯卡”
  6. 黄道十二宫杀手密码51年后被破解,来自两位程序员与数学家通力合作
  7. 倒计时两天丨NeurIPS 2020预讲会:7位智源青年科学家,21场报告
  8. 年薪40万,我用的是这套Python学习体系
  9. activemq高级客户端选项
  10. 对进入单用户进行加密