当前位置: 首页 > news >正文

野生前端的数据结构基础练习(8)——图

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

网上的相关教程非常多,基础知识自行搜索即可。

习题主要选自Orelly出版的《数据结构与算法javascript描述》一书。

参考代码可见:https://github.com/dashnowords/blogs/tree/master/Structure/graph

一.图的基本知识

基本概念

图是由边的集合和点的集合组成的。如果图的边有方向(或者说图中的顶点对是有序的)则成为有向图,如果边没有方向则称为无向图

基本建模

图可以用来对现实中许多事物进行建模。比如交通流量,计算机网络等。

二.基本练习

  1. 构建一个图的类Graph

  2. 图的深度优先搜索(DFS)

    深度优先搜索从起始顶点开始,直到到达最后一个顶点,然后回溯,直到遍历完随后顶点或查找到指定顶点。深度优先是应用非常广泛的基本搜索思想,往往借助结构来实现。demo中的dfs.js直接使用函数的调用栈来追踪搜索,如果数据量很大,则可以通过手动用一个数组来管理

  3. 图的广度优先搜索(BFS)

    广度优先搜索从第一个顶点开始,尝试访问尽可能靠近它的顶点,搜索范围基本是逐层移动的。它的实现依靠数据结构中的队列来实现。

  4. BFS查找最短路径

    图最常见的操作之一就是寻找从一个顶点到另一个顶点的最短路径。书中示例中通过this.edgeTo这个数组来存储顶点的访问路径,例如w节点是通过访问v节点的临近节点时访问的,那么就执行如下赋值this.edgeTo[w] = v,并将节点标记为已访问,由于广度优先搜索逐层扩展的特性,最终通过this.edgeTo迭代显示出的路径必然是搜索中最先实现标记的路径,也就是最短的路径,所以并不需要将每次访问都记录下来最终再比较步长。

  5. 拓扑排序

    拓扑排序用于输出一个有向无环图所有顶点的线性序列,使之满足:

    a 每个顶点只出现一次

    b 若存在一条从顶点A到B的路径,那么序列中A一定出现在B前面。

    书中给出的示例在输出时描述有误,导致输出结果与真实的排序是相反的,在拓扑排序时采用了结构,入栈顺序是反的,正确的输出顺序是按照出栈顺序来输出。

三.小结

图论是非常复杂的领域,对数学基础要求较高,感兴趣的读者可以自行继续研究。至此,基本数据结构的课就补完了,希望你也认真做了练习,完成了这个基本的扫盲过程。

转载于:https://www.cnblogs.com/dashnowords/p/10030035.html

相关文章:

  • 文本多行溢出显示...之最后一行不到行尾的解决
  • HyperLeger Fabric SDK开发(二)——Fabric SDK配置
  • Python函数高级
  • JVM 参数调优
  • 参数为空取全部数据的几种做法
  • Chisel3 - 基本数据类型
  • 实验五 编写调试具有多个段的程序
  • JSAAS 平台实现 微信类似的TOKEN机制
  • kafka集群Controller竞选与责任设计思路架构详解-kafka 商业环境实战
  • Linux C编程之一:Linux下c语言的开发环境
  • 写给高年级小学生看的《Bash 指南》
  • Windows10下 tensorflow-gpu 配置
  • 前端模板技术面面观(2)
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 操作系统-进程控制
  • 网络传输文件的问题
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 78. Subsets
  • ECS应用管理最佳实践
  • Git 使用集
  • IOS评论框不贴底(ios12新bug)
  • Mac转Windows的拯救指南
  • node-glob通配符
  • React as a UI Runtime(五、列表)
  • sessionStorage和localStorage
  • Spring Cloud中负载均衡器概览
  • vue-cli3搭建项目
  • 第十八天-企业应用架构模式-基本模式
  • 看域名解析域名安全对SEO的影响
  • 配置 PM2 实现代码自动发布
  • 前端设计模式
  • 深入 Nginx 之配置篇
  • 世界上最简单的无等待算法(getAndIncrement)
  • 试着探索高并发下的系统架构面貌
  • 思考 CSS 架构
  • 详解移动APP与web APP的区别
  • 小而合理的前端理论:rscss和rsjs
  • 一些关于Rust在2019年的思考
  • 应用生命周期终极 DevOps 工具包
  • 云大使推广中的常见热门问题
  • 正则表达式
  • No resource identifier found for attribute,RxJava之zip操作符
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 阿里云ACE认证学习知识点梳理
  • ​ArcGIS Pro 如何批量删除字段
  • "无招胜有招"nbsp;史上最全的互…
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (力扣记录)1448. 统计二叉树中好节点的数目