位置: 编程技术 - 正文

JavaScript数据结构和算法之图和图算法(javascript数据结构与算法第三版)

编辑:rootadmin

推荐整理分享JavaScript数据结构和算法之图和图算法(javascript数据结构与算法第三版),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:js树结构数据,javascript数据结构与算法第三版pdf下载,javascript数据结构与算法,javascript数据结构与算法 pdf,javascript数据结构与算法第三版,javascript数据结构,javascript数据结构,javascript数据结构,内容如对您有帮助,希望把文章链接给更多的朋友!

图的定义

图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。

有向图

有向边:若从顶点Vi到Vj的边有方向,则称这条边为有向边,也成为弧(Arc),用有序偶<Vi,Vj>来表示,Vi称为弧尾,Vj称为弧头。

无序图

无向边:若顶点Vi到Vj之间的边没有方向,则称这条边为无向边(Edge),用无序偶(Vi,Vj)来表示。

简单图

简单图:在图结构中,若不存在顶点到其自身的边,且同一条边不重复出现,则称这样的图为简单图。

图类

表示顶点

创建图类的第一步就是要创建一个Vertex类来保存顶点和边。这个类的作用和链表、二叉搜索树的Node类一样。Vertex类有两个数据成员:一个用于标识顶点,另一个表明是否被访问过的布尔值。分别被命名为label和wasVisited。

我们将所有顶点保存在数组中,在图类里,可以通过他们在数组中的位置引用他们

表示边

图的实际信息都保存在“边”上面,因为他们描述了图的结构。二叉树的一个父节点只能有两个子节点,而图的结构却要灵活得多,一个顶点既可以有一条边,也可以有多条边和它相连。

我们将表示图的边的方法成为邻接表或者邻接表数组。它将存储由顶点的相邻顶点列表构成的数组

构建图

定义如下一个Graph类:这个类会记录一个图表示了多少条边,并使用一个长度与图的顶点数来记录顶点的数量。

这里我们使用for循环为数组中的每个元素添加一个子数组来存储所有的相邻顶点,并将所有元素初始化为空字符串。

图的遍历

深度优先遍历

JavaScript数据结构和算法之图和图算法(javascript数据结构与算法第三版)

深度优先遍历(DepthFirstSearch),也有称为深度优先搜索,简称为DFS。

比如在一个房间内寻找一把钥匙,无论从哪一间房间开始都可以,将房间内的墙角、床头柜、床上、床下、衣柜、电视柜等挨个寻找,做到不放过任何一个死角,当所有的抽屉、储藏柜中全部都找遍后,接着再寻找下一个房间。

深度优先搜索:

深度优先搜索就是访问一个没有访问过的顶点,将他标记为已访问,再递归地去访问在初始顶点的邻接表中其他没有访问过的顶点

为Graph类添加一个数组:

深度优先搜索函数:

广度优先搜索

广度优先搜索(BFS)属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。

广度优先搜索从第一个顶点开始,尝试访问尽可能靠近它的顶点,如下图所示:

其工作原理为:

1. 首先查找与当前顶点相邻的未访问的顶点,将其添加到已访问顶点列表及队列中; 2. 然后从图中取出下一个顶点v,添加到已访问的顶点列表 3. 最后将所有与v相邻的未访问顶点添加到队列中下面是广度优先搜索函数的定义:

最短路径

在执行广度优先搜索时,会自动查找从一个顶点到另一个相连顶点的最短路径

确定路径

要查找最短路径,需要修改广度优先搜索算法来记录从一个顶点到另一个顶点的路径,我们需要一个数组来保存从一个顶点操下一个顶点的所有边,我们将这个数组命名为edgeTo

拓扑排序算法

拓扑排序会对有向图的所有顶点进行排序,使有向边从前面的顶点指向后面的顶点。拓扑排序算法与BFS类似,不同的是,拓扑排序算法不会立即输出已访问的顶点,而是访问当前顶点邻接表中的所有相邻顶点,直到这个列表穷尽时,才会将当前顶点压入栈中。

拓扑排序算法被拆分为两个函数,第一个函数是topSort(),用来设置排序进程并调用一个辅助函数topSortHelper(),然后显示排序好的顶点列表

拓扑排序算法主要工作是在递归函数topSortHelper()中完成的,这个函数会将当前顶点标记为已访问,然后递归访问当前顶点邻接表中的每个顶点,标记这些顶点为已访问。最后,将当前顶点压入栈中。

Javascript核心读书有感之类型、值和变量 计算机程序的运行需要对值(value)比如数字3.或者文本"helloworld"进行操作,在编程语言中,能够表示并操作的值的类型叫做数据类型(type),编程语言最基

JavaScript数据结构和算法之二叉树详解 二叉树的概念二叉树(BinaryTree)是n(n=0)个结点的有限集合,该集合或者为空集(空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点

Javascript核心读书有感之表达式和运算符 表达式是javascript中的一个短语,javascript解释器会将其计算出一个结果。程序中常用量是最简单的一类表达式就是变量。变量名也是一种简单的表达式,

标签: javascript数据结构与算法第三版

本文链接地址:https://www.jiuchutong.com/biancheng/383903.html 转载请保留说明!

上一篇:javascript中var的重要性分析(javascript中var的作用)

下一篇:Javascript入门学习第四篇 js对象和数组第1/2页(javascript零基础入门)

  • 提足折旧是指
  • 完税证明是可以抵扣吗
  • 工会筹备金的计税依据是应发工资还是实发工资
  • 固定资产清理残料变价收入
  • 增值税抵扣可以跨月吗
  • 取暖费扣个人所得税吗
  • 资产处置损益是收入还是费用
  • 没有购置税发票有影响吗
  • 挂牌出售无形资产
  • 固定资产折旧的会计处理
  • 一般纳税人企业所得税政策最新2023税率
  • 非同一控制下用什么法
  • 怎么办开户许可证
  • 异地施工缴税增值税交多少
  • 跨月的普通发票怎么开
  • 应付账款借方余额在资产负债表中怎么列示
  • 免费的企业
  • 盘亏存货需要进项税额转出吗
  • 库存商品公司自己用怎么下账
  • 怎么辨认专用发票真伪
  • 服务费发票怎么做分录
  • 以前年度的税金及附加
  • 代扣代缴增值税纳税义务发生时间
  • 电商刷单的财务操作
  • 在天猫店铺后台中的提现怎么做会计分录?
  • 出口退税进项税额转出的计算
  • 共同投资项目工程款怎么开票?
  • 投资设立民间非经济组织
  • 超额用电罚款应由谁缴纳
  • 制造业销售费用率多少合适
  • 电子税务局财报怎么报
  • 申报专利 费用
  • 如何防范税务风险
  • 专有技术应当得到
  • 公司备用金申请单
  • nvm使用教程
  • 借银行卡给别人过账有什么风险
  • 跨区域预缴增值税是当月还是次月
  • 最简单的上传php文件
  • 企业所得税退税流程
  • 总公司与分公司怎么报税
  • 应付未付货款会计分录
  • 帝国cms使用手册
  • python根据键输出值
  • 帝国cms如何做网站
  • 生育津贴如何做帐
  • 发票作废是什么样的
  • 个体商户个人所得税怎么算
  • 坏账核销的会计规定
  • 固定资产汽车折旧年限是多少年
  • 所得税弥补以前年度亏损是几年
  • 收到供应商的赔偿款要开票吗
  • 个人技术转让费税率是多少
  • 设备投入安装会计分录怎么写
  • 发工资扣的个人社保计入哪个科目
  • 职工食堂的费用可以在差额里扣除吗
  • 融资租赁可以折旧吗
  • 计提工资是否要交税
  • 金蝶旗舰版如何备份账套
  • 应付账款预付账款期末余额怎么算
  • win8系统怎么清理缓存
  • windows2000怎么安装
  • win8显示wifi关怎么办
  • win8电脑路由器网络受限怎么办
  • linux 定时执行命令
  • cocos 2d x
  • easyui grid
  • 怎么改jdk路径
  • shell脚本中执行命令语句
  • Python实现Mysql数据库连接池实例详解
  • shell打开日志文件
  • unity3d基于物理系统的2D平台跳跃游戏
  • java教程csdn
  • 1、BluetoothChat之BluetoothChat.java
  • javascript基础笔记
  • jquery多级联动下拉菜单
  • 浙江省国税电子税务局如何新增企业
  • 三水水厂热线电话号码
  • 增值税一般纳税人和小规模纳税人的区别
  • 房产税怎么计提和缴纳分录
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设