产品中心PRDUCTS DISPLAY

联系我们

联系人:张生

咨询热线:400-123-4657

传真:+86-123-4567

手机:13800000000

邮箱:admin@youweb.com

地址:广东省广州市天河区88号

在线咨询

新闻动态

您现在的位置是: 首页 > 新闻动态

请简要解释一下你对堆的理解。

如何实现?应用场景?这篇文章是从微信公众号「JS每日一题」转载而来,作者是灰灰。如需转载本文,请与JS每日一题公众号联系。在计算机科学中,图是一种抽象的数据类型,其中的数据元素通常被称为结点,顶点的集合称为V,边的集合称为E。如果两个顶点v、w之间只有从v到w的路径,而没有从w到v的路径,那么我们称这种情况为v到w的有向边。V被称为初始点,而W被称为终点。这种图称为有向图。如果v和w没有顺序,从v到w和从w到v是完全相同的,这种图称为无向图。图的结构复杂,任意两个顶点之间都可能存在联系,因此无法以数据元素在存储区中的物理位置来表示元素之间的关系。常见的表达图的方式有如下:\n- 邻接矩阵\n- 邻接表\n邻接矩阵通过使用一个二维数组G[N][N]进行表示N个顶点,通过邻接矩阵可以立刻看出两顶点之间是否存在一条边,只需要检查邻接矩阵行i和列j是否是非零值。对于无向图,…邻接矩阵是对称的。邻接表的存储方式如下图所示。在javascript中,可以使用Object进行表示,如下:\nconst graph = {\n A: [2, 3, 5],\n B: [2],\n C: [0, 1, 3],\n D: [0, 2],\n E: [6],\n F: [0, 6],\n G: [4]\ ;图的数据结构也可能包含与每条边相关联的数值,比如一个标签或权重,表示花费、容量、长度等。二、关于图的操作常见的有:深度优先遍历和广度优先遍历。首先构建一个图的邻接矩阵表示,如下面的图用代码表示则如下:const graph = {0:[1,4], 1:[2,4],...深度优先搜索(DFS)是一种尽可能深入搜索图中各分支的算法思想。首先确定根节点,然后深度遍历其未访问的相邻节点。以0为根开始深度优先搜索,依次遍历1、2、3,完成一条分支0-1-2-3的探索。再选择另一条分支,如4,因为3已被访问,因此跳过。因此不再访问

的代码表示如下:

新集合const visited = Set();定义深度优先搜索函数 dfs = (n) => {   console.log(n)   visited.add(n) // 记录已访问节点   若未访问过,遍历图中的节点    graph[n].forEach(c => {     if(!visited.判断是否访问呢过dfs(c)广度优先遍历先访问离根节点最近的节点,然后进行入队操作,解决思路如下:\n新建一个队列,把根节点入队\n把队头出队并访问\n把队头的没访问过的相邻节点入队\n重复二、三步骤队列为空是否使用代码标识如下: \n```javascript\nconst visited = new Set()\nconst dfs = (n) => {\n visited.add(n)\n const q = [n]\n while(q.length){\n const n = q.shift()\n console.log(n)\n graph[n].forEach(c => {\n if(!\n```visited.(c)) {         q.push(c)           add(c)       }     }   } }  第三,总结

根据以上初步了解,我们可以看到图是由顶点的有限非空集合和连接这些顶点的边组成的集合。图可以分为无向图和有向图

的表现形式可以分为邻接矩阵和邻接表两种形式。在javascript中,可以使用二维数组和对象的方式来表示图。实际上,图可以非常复杂,并且可以扩展为无向图和带权图。具体如下所示:\n参考文献:\n- https://zh.wikipedia.org/wiki/图_(数据结构)\n- https://www.kancloud.cn/imnotdown1019/java_core_full/2159607

在线客服

关注我们 在线咨询 投诉建议 返回顶部