🔥 欢迎来到前端面试通关指南专栏!从js精讲到框架到实战,渐进系统化学习,坚持解锁新技能,祝你轻松拿下心仪offer。
前端面试通关指南专栏主页
前端面试专栏规划详情在这里插入图片描述

图结构与遍历算法

在计算机科学中,图(Graph)是一种复杂的非线性数据结构,由顶点(Vertex)和边(Edge)组成,用于描述元素之间多对多的关系。从社交网络的用户关系到地图的路径规划,图结构都有着广泛的应用。本文将系统介绍图的基本概念、存储方式以及两种核心遍历算法——深度优先搜索(DFS)和广度优先搜索(BFS),并结合实例讲解其实现与应用。

一、图的基本概念

1.1 图的定义与组成

图是由顶点集合(V)和边集合(E)组成的二元组,记为G=(V,E)G=(V,E)G=(V,E)。这种数据结构广泛应用于计算机科学、数学、工程学和社会科学等领域。

  • 顶点(Vertex)

    • 图中的基本元素,也称为节点(Node)
    • 可表示具体对象:
      • 社交网络中的用户(如微信好友关系图中的个人账号)
      • 交通网络中的地点(如百度地图中的交叉路口或公交站点)
      • 计算机网络中的设备(如路由器、服务器等)
    • 顶点可带有属性信息,例如社交网络中用户的年龄、性别等元数据
  • 边(Edge)

    • 连接两个顶点的线,表示顶点之间的关系
    • 边的类型包括:
      • 有向边:带有方向性的边,用箭头表示(如A→B)
        • 应用示例:微博的关注关系(A关注B不代表B关注A)
        • 表示单向关系:网页的超链接、工作流中的任务依赖
      • 无向边:没有方向性的边,用直线表示(如A-B)
        • 应用示例:微信好友关系(互为好友)
        • 表示双向关系:社交网络中的友谊、电路中的连接
    • 边可带有权重:
      • 表示关系的强度或成本(如交通网络中两地的距离)
      • 示例:快递路线规划中的运输成本、神经网络中的连接权重

补充说明:

  1. 图的数学形式化表示:

    • 顶点集V = {v₁, v₂, …, vₙ}
    • 边集E ⊆ V×V(对于有向图)或E ⊆ {{u,v} | u,v ∈ V}(对于无向图)
  2. 特殊边的类型:

    • 自环边:顶点连接到自身的边
    • 平行边:两个顶点间存在多条边(在多重图中允许)
  3. 图的视觉表示:

    • 通常用圆圈表示顶点
    • 用连线表示边
    • 有向边带箭头,无向边无箭头

应用场景示例:

  • 互联网网页链接分析(有向图)
  • 城市公交线路规划(可表示为带权无向图)
  • 知识图谱构建(带属性的异构图)
  • 电路板布线设计(平面图)

1.2 图的分类

无向图

无向图中的边没有方向性,表示顶点之间的双向关系。例如在社交网络中,好友关系可以用无向图表示:如果用户A和用户B是好友,则存在边(A,B)和(B,A),这两个边在无向图中被视为同一条边。无向图的邻接矩阵是对称矩阵,因为边(A,B)和边(B,A)表示同一个连接。

有向图

有向图的边具有明确的方向性,表示单向关系。例如在网页链接图中,网页A链接到网页B表示为<A,B>,但这并不意味着网页B会自动链接回网页A。有向图的邻接矩阵通常不对称。有向图常用于表示流程、依赖关系等场景,如课程先修关系图或任务调度图。

加权图

加权图的边带有数值权重,用于量化顶点间关系的某些属性。例如:

  • 交通网络中,边权重可以表示两地间的距离或通行时间
  • 通信网络中,边权重可以表示带宽或延迟
  • 经济网络中,边权重可以表示交易金额或关联强度
    加权图可以是无向的(如双向道路)或有向的(如单行道)。最短路径算法(如Dijkstra算法)常应用于加权图。
连通图

对于无向图:

  • 连通图:任意两个顶点间都存在路径。例如城市道路网如果是连通的,则可以从任意地点到达其他地点。
  • 非连通图:存在至少两个顶点之间没有路径。例如孤立的岛屿与大陆的交通图。

对于有向图:

  • 强连通图:任意两个顶点u和v之间存在u到v和v到u的路径。例如闭合的循环供水系统。
  • 弱连通图:忽略方向后对应的无向图是连通的。例如单向街道组成的城市道路网。
  • 非连通图:存在至少两个顶点之间没有任何路径。例如多个独立的有向循环系统。

特殊情形:

  • 完全图:每对不同的顶点之间都恰有一条边相连。无向完全图有n(n-1)/2条边,有向完全图有n(n-1)条边。
  • 稀疏图/稠密图:根据边数与顶点数的比例划分,通常边数远小于可能的最大边数时为稀疏图。

1.3 图的基本术语

路径

在图论中,路径是指从一个顶点到另一个顶点的一系列顶点序列,其中相邻顶点之间必须通过边连接。在有向图中,路径的方向必须与边的方向保持一致。例如,在有向图中若存在边A→B和B→C,则A→B→C构成一条有效路径,而A→C→B则不是(除非存在边A→C和C→B)。

示例

  • 无向图:在社交网络中,用户A通过共同好友B认识用户C,可表示为路径A-B-C。
  • 有向图:在网页链接图中,若网页A链接到B,B链接到C,则A→B→C是一条有向路径。

(也称为回路)是一种特殊的路径,其起点和终点为同一顶点。环的存在可能表示系统中的循环依赖或重复关系。

示例

  • 交通网络:若城市A到B有单向道路,B到C有单向道路,C又返回A,则A→B→C→A形成一个环。
  • 任务调度:若任务X依赖任务Y,Y依赖任务Z,而Z又依赖X,则形成环,可能导致死锁。

是描述顶点连接性质的重要指标:

  1. 无向图:一个顶点的度是其连接的边的总数。例如,在社交网络中,某用户的度表示其好友数量。
  2. 有向图:度分为两类:
    • 入度:指向该顶点的边数。例如,在微博关注关系中,某用户的入度表示其粉丝数。
    • 出度:从该顶点出发的边数。例如,某用户的出度表示其关注的人数。

应用场景

  • 网页排名:入度高的网页可能更重要。
  • 网络中心性分析:度高的节点可能是关键枢纽。

二、图的存储方式

图的存储需高效表达顶点间的连接关系,常用方式有邻接矩阵和邻接表两种。

2.1 邻接矩阵(Adjacency Matrix)

邻接矩阵是一种用二维数组表示图结构的方法,适用于各种类型的图(无向图、有向图、加权图等)。其核心是通过矩阵的行列索引映射顶点,矩阵元素表示顶点间的关系。

存储原理

对于一个包含nnn个顶点的图,邻接矩阵是一个n×nn×nn×n的方阵,具体定义如下:

  1. 无向图:矩阵对称,matrix[i][j] = matrix[j][i]。值为1表示顶点iiijjj之间存在边,0表示无边。
    • 例如社交网络中的好友关系:若用户A和B是好友,则对应矩阵位置置1
  2. 有向图:矩阵不对称,matrix[i][j] = 1表示存在从顶点iii指向jjj的边。
    • 例如网页链接图:网页A链接到网页B时,matrix[A][B] = 1
  3. 加权图:矩阵元素存储具体权重值,无边时通常用或特殊值(如-1)表示。
    • 例如城市交通图:matrix[i][j]可表示城市iiijjj的公路距离。
示例解析

以无向图为例,顶点集合为{0,1,2,3},其邻接矩阵表示如下:

[[0, 1, 1, 0],  // 顶点0与1、2相连[1, 0, 1, 1],  // 顶点1与0、2、3相连[1, 1, 0, 1],  // 顶点2与0、1、3相连[0, 1, 1, 0]   // 顶点3与1、2相连
]

对应图形化表示为:

      0/ \1---2\ /3
性能分析

优势场景

  • 快速查询:判断任意两顶点是否相邻仅需O(1)O(1)O(1)时间,适合频繁查询的场景。
  • 稠密图高效:当边数接近n2n^2n2时,空间利用率高。
  • 算法适配:如Floyd-Warshall全源最短路径算法直接依赖邻接矩阵。

局限性

  • 空间消耗:空间复杂度固定为O(n2)O(n^2)O(n2),存储1000个顶点的图需要1MB空间(假设每元素占1字节)。
  • 稀疏图不适用:例如社交网络中用户平均好友数远小于总用户数时,矩阵中大量0值造成浪费。
  • 动态操作成本高:添加/删除顶点需重构整个矩阵。

扩展应用

  • 在GPU并行计算中,邻接矩阵的规整结构利于加速矩阵运算。
  • 可通过位压缩技术(如位矩阵)优化稀疏图的存储。

2.2 邻接表(Adjacency List)

邻接表是一种常用的图存储结构,它为图中的每个顶点维护一个链表(或动态数组),用于存储与该顶点直接相连的所有顶点及相关的边信息。这种结构特别适合表示稀疏图(边数远小于顶点数平方的图)。

数据结构实现方式
  1. 链表实现:每个顶点对应一个链表头节点,后续节点存储邻接顶点信息
  2. 动态数组实现:现代编程语言中更常用,如C++的vector、Python的list
  3. 字典/哈希表实现:用顶点ID作为键,邻接列表作为值

具体示例:无向图的邻接表表示

顶点0: [1, 2]       // 0与1、2相连
顶点1: [0, 2, 3]    // 1与0、2、3相连
顶点2: [0, 1, 3]    // 2与0、1、3相连
顶点3: [1, 2]       // 3与1、2相连

加权图的邻接表表示(存储顶点和权重信息):

顶点0: [(1, 5), (2, 3)]  // 0→1边权重为5,0→2边权重为3
顶点1: [(0, 5), (2, 2), (3, 6)]  // 1→0边权重5,1→2边权重2,1→3边权重6
顶点2: [(0, 3), (1, 2), (3, 7)]
顶点3: [(1, 6), (2, 7)]

典型应用场景

  • 社交网络中的好友关系存储
  • 路由算法中的网络拓扑表示
  • 稀疏矩阵的存储优化

操作复杂度分析

操作时间复杂度空间复杂度
添加顶点O(1)O(n)
添加边O(1)O(1)
查询相邻顶点O(1)-
判断两顶点连接O(k)-

优缺点深入分析

  • 优点

    1. 空间效率高:仅存储实际存在的边,空间复杂度为O(n+e)O(n + e)O(n+e)(n为顶点数,e为边数)
    2. 遍历效率高:获取某顶点的所有邻接点只需O(1)O(1)O(1)时间
    3. 动态扩展性好:添加新边/顶点操作简单
  • 缺点

    1. 连接查询慢:判断顶点u和v是否相连需要O(k)O(k)O(k)时间(k为顶点u的度)
    2. 不适合频繁的边删除操作(某些实现中)
    3. 反向查询困难:需要额外存储逆邻接表才能快速找到"指向"某顶点的边

优化变体

  1. 十字链表:有向图的优化存储
  2. 邻接多重表:无向图的优化存储
  3. 跳表实现:加速连接查询

三、图的遍历算法

图的遍历是按某种规则访问所有顶点,核心算法为深度优先搜索(DFS)和广度优先搜索(BFS)。

3.1 深度优先搜索(DFS)

算法思想

从起点出发,优先深入探索路径,直到无法前进时回溯,继续探索其他分支。类似“走迷宫时沿一条路走到头,再回头尝试其他路”。

实现方式
  • 递归:利用函数调用栈记录路径。
  • :手动维护栈存储待访问顶点。
步骤
  1. 访问起点,标记为已访问。
  2. 遍历起点的未访问邻接顶点,选一个深入递归(或入栈)。
  3. 重复步骤2,直到无未访问邻接顶点,回溯到上一顶点继续探索。
代码实现(邻接表+递归)
class Graph {constructor() {this.adjList = new Map(); // 邻接表:key为顶点,value为邻接顶点数组}// 添加顶点addVertex(v) {if (!this.adjList.has(v)) {this.adjList.set(v, []);}}// 添加边(无向图)addEdge(v, w) {this.adjList.get(v).push(w);this.adjList.get(w).push(v);}// DFS递归实现dfs(start) {const visited = new Set(); // 记录已访问顶点const result = [];const dfsRecursive = (v) => {visited.add(v);result.push(v);// 遍历所有未访问的邻接顶点for (const neighbor of this.adjList.get(v)) {if (!visited.has(neighbor)) {dfsRecursive(neighbor);}}};dfsRecursive(start);return result;}
}// 测试
const graph = new Graph();
graph.addVertex('A');
graph.addVertex('B');
graph.addVertex('C');
graph.addVertex('D');
graph.addVertex('E');graph.addEdge('A', 'B');
graph.addEdge('A', 'C');
graph.addEdge('B', 'D');
graph.addEdge('C', 'E');console.log('DFS遍历结果:', graph.dfs('A')); // 输出: ['A', 'B', 'D', 'C', 'E'](路径可能因邻接顺序变化)

3.2 广度优先搜索(BFS)

算法思想

从起点出发,优先访问所有邻接顶点,再按同样规则访问下一层次顶点。类似“水波扩散”,逐层向外遍历。

实现方式
  • 队列:使用队列存储待访问顶点,保证按层次顺序访问。
步骤
  1. 访问起点,标记为已访问,入队。
  2. 出队一个顶点,遍历其所有未访问邻接顶点,标记后入队。
  3. 重复步骤2,直到队列为空。
代码实现(邻接表+队列)
// 基于上述Graph类,添加BFS方法
bfs(start) {const visited = new Set();const result = [];const queue = [start]; // 队列初始化visited.add(start);while (queue.length > 0) {const v = queue.shift(); // 出队result.push(v);// 遍历所有未访问的邻接顶点,入队for (const neighbor of this.adjList.get(v)) {if (!visited.has(neighbor)) {visited.add(neighbor);queue.push(neighbor);}}}return result;
}// 测试
console.log('BFS遍历结果:', graph.bfs('A')); // 输出: ['A', 'B', 'C', 'D', 'E'](层次顺序固定)

3.3 DFS与BFS对比

特性DFS(深度优先搜索)BFS(广度优先搜索)
数据结构使用栈结构(或递归调用栈),后进先出的特性适合深度探索使用队列结构,先进先出的特性保证按层次遍历
访问顺序沿着一条分支深入到底(如:二叉树的先序遍历),可能跳跃访问不同分支按层次逐步扩散(如:二叉树的层序遍历),完全访问完当前层才会进入下一层
空间复杂度O(h)O(h)O(h)hhh为树高或递归深度),如:平衡二叉树为O(log⁡n)O(\log n)O(logn),链状结构为O(n)O(n)O(n)O(w)O(w)O(w)www为树/图的最大宽度),如:完全二叉树最后一层节点数约为n/2n/2n/2
适用场景- 寻找可行路径(如迷宫问题)
- 拓扑排序(有向无环图)
- 检测环
- 连通性分析
- 无权图最短路径(边权相同)
- 社交网络关系扩散
- 多连通分量识别
- 广播网络
典型应用1. 八皇后问题
2. 数独求解
3. 文件系统遍历(递归实现)
4. 语法分析
1. Dijkstra算法基础(无权图)
2. 网页爬虫抓取策略
3. 传染病传播模型
4. 网络路由
实现示例python<br>def dfs(node):<br> visit(node)<br> for child in node.children:<br> dfs(child)<br>python<br>def bfs(root):<br> queue = [root]<br> while queue:<br> node = queue.pop(0)<br> visit(node)<br> queue.extend(node.children)<br>
优劣对比优势:内存消耗较小
劣势:不一定找到最短路径
优势:保证找到最短路径
劣势:存储空间需求较大
特殊变体迭代加深DFS(IDDFS)结合两者优势双向BFS从起点和终点同时搜索

四、图遍历的应用场景

  1. 连通分量检测

    • 用于识别图中相互独立的子图集合,每个子图内的顶点相互可达,不同子图间完全隔离
    • 算法实现
      • 初始化所有顶点为未访问状态
      • 循环选取未访问顶点,执行DFS/BFS遍历
      • 每次完整遍历产生的顶点集合即为一个连通分量
    • 典型场景
      • 社交网络分析(识别不同用户圈子)
      • 电网连通性检测(找出独立供电区域)
      • 示例:在10万用户的社交网络中,通过DFS发现3个主要连通分量,分别对应工作圈、同学圈和亲友圈
  2. 拓扑排序

    • 针对有向无环图(DAG)的线性排序,满足对于任意有向边(u→v),u总出现在v之前
    • 实现方法
      • DFS后序遍历的逆序
      • 卡恩算法(基于入度表迭代移除入度为0的顶点)
    • 应用案例
      • 课程体系规划(必须先完成数据结构才能学习算法分析)
      • 软件构建依赖管理(需先编译底层模块)
      • 任务调度系统(前置任务必须优先执行)
  3. 最短路径求解

    • 无权图处理
      • BFS天然形成层次结构,起点到各顶点的最短路径长度等于遍历层次
      • 示例:地铁换乘查询中,站点间最短换乘次数计算
    • 加权图处理
      • Dijkstra算法(要求非负权重):
        1. 维护优先队列按距离排序
        2. 每次扩展距离起点最近的顶点
        3. 时间复杂度O(E+VlogV)
      • 典型应用:
        • 导航系统路线规划
        • 网络数据传输路由选择
  4. 网络爬虫

    • DFS策略
      • 沿着链接深度优先抓取,适合垂直领域爬取
      • 可能陷入无限深度,需设置最大深度阈值
      • 示例:学术论文爬虫追踪参考文献链条
    • BFS策略
      • 优先抓取与种子页面直接相连的网页
      • 保证重要页面优先被抓取
      • 示例:新闻网站爬取时先抓取首页链接的所有新闻
    • 混合策略
      • 初期使用BFS建立索引,后期针对特定区域采用DFS
  5. 二分图判断

    • 定义验证:能否用两种颜色标记顶点,使相邻顶点颜色不同
    • 算法步骤
      1. 选取任意顶点着红色
      2. 其邻居着蓝色,依此类推
      3. 若发现相邻顶点同色则非二分图
    • 实际应用
      • 人员-岗位匹配(应聘者与合适职位)
      • 学生选课系统(学生与可选课程)
      • 广告投放匹配(用户画像与广告类型)
    • 扩展应用
      • 利用二分图性质解决最大匹配问题(匈牙利算法)
      • 社交网络好友推荐(避免推荐已有好友)

五、总结

图结构作为一种重要的非线性数据结构,是描述实体间复杂关系网络的强大工具。在计算机科学领域,图的存储方式主要有两种经典实现:

  1. 邻接表:采用链表结构存储每个节点的相邻节点,适用于稀疏图(边数远小于顶点数平方的情况)。其空间复杂度为O(V+E),在社交网络(如好友关系)、网页链接等场景表现优异。例如,Facebook的好友关系图采用邻接表存储,可高效查询某个用户的所有直接好友。

  2. 邻接矩阵:使用二维数组表示顶点间的连接关系,适用于稠密图。虽然空间复杂度较高(O(V²)),但能快速判断任意两顶点是否相邻,如交通路网中查询两城市是否有直达航班。

基础遍历算法方面:

  • 深度优先搜索(DFS):采用栈结构(递归或显式栈)实现,适合解决迷宫求解、拓扑排序等问题。例如在编译器分析代码依赖关系时,常用DFS进行拓扑排序。
  • 广度优先搜索(BFS):基于队列实现,擅长处理最短路径问题(无权图)和层级遍历。如网络爬虫按网页层级抓取、微信好友推荐中"朋友的朋友"关系发现。

这些基础算法是更高级图算法的基础:

  • 最小生成树(Prim/Kruskal算法)可用于电网布线优化
  • 最短路径(Dijkstra/Floyd算法)支撑着地图导航服务
  • 连通分量分析帮助社交平台识别用户社群

在实际工程应用中,选择策略应考虑:

  1. 数据特征(稀疏/稠密)
  2. 高频操作类型(查询/更新)
  3. 硬件限制(内存/缓存)
    例如,Google Maps在路径规划时,对道路网络采用邻接表存储结合A*算法;而小型的局域网拓扑管理可能更适合使用邻接矩阵。

本文从图的基础概念出发,系统讲解了存储方式、遍历算法及应用,结合代码示例帮助读者理解。无论是面试准备还是实际开发,图结构都是必备知识点,建议通过更多实例(如拓扑排序、最短路径)深入练习。

📌 下期预告:算法时间与空间复杂度分析
❤️❤️❤️:如果你觉得这篇文章对你有帮助,欢迎点赞、关注本专栏!后续解锁更多功能,敬请期待!👍🏻 👍🏻 👍🏻
更多专栏汇总:
前端面试专栏
Node.js 实训专栏

数码产品严选
数码产品严选

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/914012.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914012.shtml
英文地址,请注明出处:http://en.pswp.cn/news/914012.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

渗透测试之木马后门实验

一、实验背景 根据CNCERT的监测数据显示&#xff0c;2018年位于美国的1.4万余台木马或僵尸网络控制服务器&#xff0c;控制了中国境内334万余台主机&#xff1b;2018年位于美国的3325个IP地址向中国境内3607个网站植入木马&#xff0c;根据对控制中国境内主机数量及控制中国境内…

【LeetCode 热题 100】24. 两两交换链表中的节点——(解法一)迭代+哨兵

Problem: 24. 两两交换链表中的节点 题目&#xff1a;给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 文章目录整体思路完整代码…

微积分核心考点全解析

一、微积分核心知识框架 1. 极限与连续&#xff08;重点&#xff01;&#xff09; 核心概念&#xff1a; 极限定义&#xff08;ε-δ语言&#xff09;重要极限&#xff1a;lim⁡x→0sin⁡xx1limx→0​xsinx​1&#xff0c;lim⁡x→∞(11x)xelimx→∞​(1x1​)xe连续性判定&am…

TypeScript---泛型

一.简介TypeScript 就引入了“泛型”&#xff08;generics&#xff09;。泛型的特点就是带有“类型参数”&#xff08;type parameter&#xff09;。在日常 TypeScript 编程中&#xff0c;我们经常会遇到这样的场景&#xff1a;函数的参数类型与返回值类型密切相关。此时&#…

手把手一起使用Miniforge3+mamba平替Anaconda(Win10)

Anaconda 开始对企业收费&#xff0c;目前急需平替Anaconda。这里采用Minforgemamba作为替代&#xff0c;可以避免Anaconda追责&#xff0c;并100%兼容原conda仓库及使用方式&#xff0c;如果各位小伙伴有更好的平替方式&#xff0c;欢迎分享。 Miniforge3安装 下载并安装Min…

【Note】Linux Kernel 主题学习之“完整的嵌入式 Linux 环境、构建工具、编译工具链、CPU 架构”

Linux Kernel 主题学习之“完整的嵌入式 Linux 环境、构建工具、编译工具链、CPU 架构” 一、完整的嵌入式 Linux 环境 一个嵌入式 Linux 系统通常包括以下关键组件&#xff08;以 Jetson、树莓派等 ARM 版 SBC 为例&#xff09;&#xff1a; 交叉编译工具链&#xff08;cros…

Lecture #20:Database Logging

Lecture20目录&#xff1a;崩溃恢复缓冲池管理策略窃取策略强制策略NO-STEAL-FORCE影子分页执行恢复缺点日志文件预写日志&#xff08;WAL&#xff09;执行缓冲池策略日志方案检查点崩溃恢复 恢复算法是一种确保数据库ACID的技术&#xff0c;数据库崩溃后&#xff0c; 所有已经…

Kubernetes高级调度1

目录 一:初始化容器 Initcontainer 1:Initcontainer 的基本概念 2:示例 1--延迟指定时间后启动 3:示例 2--使用初始化容器修改内核参数 4:示例 3--等待依赖服务启动 4:pause容器 二&#xff1a;临时容器 Ephemeral Containers 1.临时容器的概念 2.临时容器的使用 三&a…

服务器机柜与网络机柜各自的优势

一、服务器机柜优势服务器机柜设计有强大的承重结构&#xff0c;能承受大量服务器设备堆叠产生的重量&#xff0c;保障设备安全稳定放置&#xff0c;防止因承重不足导致机柜变形甚至设备损坏&#xff0c;同时&#xff0c;服务器在运行的过程中&#xff0c;会产生大量热量&#…

AI技术通过提示词工程(Prompt Engineering)正在深度重塑职场生态和行业格局,这种变革不仅体现在效率提升,更在重构人机协作模式。

AI技术通过提示词工程&#xff08;Prompt Engineering&#xff09;正在深度重塑职场生态和行业格局&#xff0c;这种变革不仅体现在效率提升&#xff0c;更在重构人机协作模式。以下是关键影响维度及未来趋势分析&#xff1a;一、职场效率革命&#xff08;效率提升300%场景&…

Hugging Face 开源机器人 Reachy Mini 开启预定

我们最新的开源机器人 Reachy Mini 正式亮相 &#x1f389; 这款富有表现力的开源机器人由 Pollen Robotics 与 Hugging Face 联合打造&#xff0c;专为人机交互、创意编程和 AI 实验而设计。它价格亲民&#xff0c;体积小巧&#xff0c;却蕴藏着无限可能。来自全球的各个年龄段…

vue3+node.js+mysql写接口(二)

目录 一、产品模块(products表) 1.1、添加产品(/adminapi/product/add) 1.2、产品列表(/adminapi/product/list) 1.3、编辑产品(/adminapi/product/update) 1.4、首页产品联动 二、前台模块 2.1、路由配置 2.2、NavBar组件 2.3、新闻搜索 2.4、新闻选项卡 2.5、新闻…

解析LLM层裁剪:Qwen实战指南

怎么实现对LLM 部分层裁剪输出结果 Qwen 7b 是28层MLP,28头 Qwen 14b 是48层MLP,40头,词向量维度:5120 模型加载部分 from transformers import AutoTokenizer, AutoModelForCausalLM

【AI大模型】深度学习正则化技术:Batch Normalization (BatchNorm) 详解

1. 为什么需要 BatchNorm&#xff1f; - 问题的根源&#xff1a;Internal Covariate Shift (ICS)问题描述&#xff1a; 深度神经网络在训练过程中&#xff0c;随着网络层数的加深&#xff0c;前面层参数的微小更新会导致后面层输入数据的分布发生显著变化。这种现象称为内部协变…

20.缓存问题与解决方案详解教程

文章目录1. 缓存基础概念1.1 什么是缓存1.2 缓存的作用1.3 常见的缓存类型1.4 缓存架构示例2. 缓存雪崩 (Cache Avalanche)2.1 什么是缓存雪崩2.2 缓存雪崩的原因2.3 缓存雪崩的危害2.4 缓存雪崩的解决方案方案1&#xff1a;设置随机过期时间方案2&#xff1a;缓存集群和主从复…

(满满的坑LLAMA3使用申请被拒绝rejected)利用huggingface导入LLAMA3模型

文章目录前言坑后续前言 大家都知道&#xff0c;使用huggingface导入大模型是使用如下办法 from transformers import AutoModelForCausalLM, AutoTokenizermodel_name "Qwen/Qwen2.5-7B-Instruct"#要导入的大模型名称。model AutoModelForCausalLM.from_pretrai…

大规模集群下 Prometheus 监控架构实战经验分享

大规模集群下 Prometheus 监控架构实战经验分享 1 业务场景描述 在互联网金融业务发展过程中&#xff0c;我们需要对数千台主机、上万容器与微服务实例进行指标监控&#xff0c;并统计历史数据以支持 SLA 报表、告警与容量规划。传统监控系统面临以下挑战&#xff1a; 实例动态…

主流消息队列技术总结和对比

消息队列&#xff08;Message Queue&#xff0c;简称 MQ&#xff09;作为构建分布式互联网应用的关键组件&#xff0c;松耦合的架构设计能显著提升系统的可用性与可扩展性。在分布式系统中扮演着至关重要的角色&#xff0c;主要承担着实现异步消息传递、应用解耦、流量削峰以及…

数据结构 顺序表(3)---顺序表的应用

在之间的两篇文章中&#xff0c;我们着重讲了顺序表及顺序表的实现。今天这篇文章我们将简单讲解关于顺序表的三个算法题。这三个题也都属于力扣上的经典例题。1.例题1:移除元素例题来源(力扣) : https://leetcode.cn/problems/remove-element/description/这是一道数组操作算法…

逆向入门(9)汇编篇-bound指令的学习

看程序的时候碰到这么一行没见过的代码&#xff0c;简单记录一下 00427AC8 |. 6215 3C7B4200 |bound edx,qword ptr ds:[0x427B3C]这里是用到了bound指令&#xff0c;这是 x86 汇编中的指令&#xff0c;用于检查数组索引是否在有效范围内。 指令解析 bound edx, qword ptr ds…