半岛bandao体育(中国)官方网站

BOB半岛娱乐:能否简单介绍一下你对堆的理解?

日期:2024-06-21 22:39 / 作者:zoc7RcITctunhMtq7EzA
如何实现?应用场景? [[426520]]

本文摘自微信公众号「JS每日一题」,作者是灰灰。请在转载本文时与JS每日一题公众号联系。在计算机科学中,图是一种抽象的数据类型。图中的数据元素通常称为结点,所有顶点的集合记为V,所有边的集合记为E。如果两个顶点v和w之间只有一条从v指向w的有向边,而没有从w指向v的边,则称这种情况为从v到w的有向边。v被称为初始点,而w则被称为终点。这种类型的图被称为有向图BOB半岛APP

。如果两个顶点v和w没有排序,从v到w和从w到v是完全相同的,这种图称为无向图

。图的结构很复杂,任意两个顶点之间都可能存在联系,因此无法通过数据元素在存储区中的物理位置来表示元素之间的关系

。通常表示图的常见方式如下:

邻接矩阵 邻接表 。邻接矩阵

使用一个二维数组G[N][N]来表示N个点的连接,通过邻接矩阵可以立即看出两个顶点之间是否存在一条边,只需检查邻接矩阵的第i行和第j列是否为非零值。对于无向图,邻接矩阵是对称的。邻接表的存储方式如下图所示。在javascript中,可以使用对象来表示,如下例:\n```javascript\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]\ \n```图的数据结构可能包括与每条边相关的数值,例如标签或权重(表示花费、容量、长度等)。图的常见操作包括深度优先遍历和广度优先遍历。首先需要构建图的邻接矩阵表示,代码示例如下:\nconst graph={\n 0:[1,4],\n 1:[2,4],\n ...深度优先遍历,也就是尽可能向图的分支深处进行搜索。实现思路是,首先确定一个根节点,然后对根节点的未被访问的相邻节点进行深度优先遍历。首先确定以0为根节点,然后进行深度遍历,接着遍历1,然后遍历2,然后遍历3。这样便完成了一条分支0-1-2-3的遍历。接着换一条分支,即4,因为3已经被遍历过了,所以在4之后结束。所以就不再访问

节点了,用代码表示如下:

const visitedSet = new Set() const dfs = (n) => {   console.log(n)   visited.add(n) // 访问过添加记录   graph[n].forEach(c => {     if(BOB半岛平台!visited.有关于访问函数的部分代码,请参阅以下注释:\n```C\n// 使用dfs(c)来判断是否访问过c\nif (访问过(c)) {\n // 已经访问过c\ else {\n // 还没有访问过c\ \n```\n广度优先遍历是一种先访问离根节点最近的节点,然后进行入队操作的遍历方式。解决思路如下:\n- 新建一个队列,把根节点入队\n- 把队头出队并访问\n- 把队头的未访问过的相邻节点入队\n- 重复二、三步骤当队列为空时,用代码来标识如下所示:在const visited = new Set()和const dfs = (n) => {visited.add(n);const q = [n];while(q.length){const n = q.shift();console.log(n);graph[n].forEach(c => {if(!visited.在JavaScript中,如果有 c,则执行代码 q.push(c)。通过上述简单介绍,我们可以知道图由顶点的有限非空集合和顶点间的边构成,分为无向图和有向图。图的表示形式可以是邻接矩阵或邻接表两种形式。图的表示可以通过二维数组和对象来实现,实际上是相当复杂的。接下来还可以衍生出无向图和带权图,对应如下所示:\n参考文献:维基百科 - 图 (数据结构)\n链接:https://zh.wikipedia.org/wiki/图_(数据结构)\n参考文献:Java核心全解析\n链接:https://www.kancloud.cn/imnotdown1019/java_core_full/2159607

能否简单介绍一下你对堆的理解?

BOB半岛入口

BOB半岛下载

BOB半岛官方

能否简单介绍一下你对堆的理解?


BOB半岛APP