【机器学习】机器学习中用到的高等数学知识-8. 图论 (Graph Theory)

  • 图的表示和遍历:用于处理社交网络、推荐系统等结构化数据。

图论是研究图(Graph)结构的数学分支,在处理网络、关系和结构化数据时起着至关重要的作用。本文将从图的基本表示、遍历算法及其在实际应用中的使用展开讨论,并配以代码和可视化示例。

1. 图的基本表示

1.1 定义

图由节点(顶点)和边组成。

  • 无向图:边没有方向,如 (u, v) 表示节点 u 和 v 之间的连接。
  • 有向图:边有方向,如 (u, v) 表示从节点 u 到 v 的连接。
1.2 表示方法
  1. 邻接矩阵:用 n × n 的矩阵表示,矩阵的元素表示节点之间是否有边。
  2. 邻接表:每个节点对应一个列表,存储与该节点相连的所有节点。
    节点 1: [2, 3]
    节点 2: [1, 4]
    节点 3: [1]
    

1.3 Python 实现
import numpy as np

# 邻接矩阵
graph = np.array([
    [0, 1, 1, 0],
    [1, 0, 0, 1],
    [1, 0, 0, 0],
    [0, 1, 0, 0]
])
print("邻接矩阵:")
print(graph)

 

2. 图的遍历

2.1 深度优先搜索 (DFS)

DFS 按照深度优先的策略遍历节点,适用于寻找路径或检查连通性。

2.1.1 定义

深度优先搜索按照递归深入的方式访问节点,尽可能向深层的节点探索,直到无法继续,再回溯到上一层节点。

2.1.2 算法流程
  1. 从起始节点出发,标记为已访问。
  2. 访问其一个未访问的邻居节点。
  3. 对该邻居节点重复步骤 1 和 2。
  4. 如果当前节点的所有邻居都已访问,则回溯到上一个节点。
  5. 重复直到所有节点访问完毕。
2.1.3 Python 实现
def dfs(graph, start, visited=None):
    if visited is None:
        visited = set()
    visited.add(start)
    print(start, end=" ")  # 输出当前节点
    
    for neighbor in graph[start]:
        if neighbor not in visited:
            dfs(graph, neighbor, visited)

# 示例图:邻接表表示
graph = {
    1: [2, 3],
    2: [4],
    3: [5],
    4: [],
    5: []
}

print("深度优先搜索结果:")
dfs(graph, 1)
深度优先搜索结果:
1 2 4 3 5 
2.1.4 应用案例
  • 连通性检查:检查图是否是一个连通图。
  • 路径探索:用于迷宫或网络中的路径查找。
2.1.5 可视化

import networkx as nx
import matplotlib.pyplot as plt

# 构建图
G = nx.Graph()
edges = [(1, 2), (1, 3), (2, 4), (3, 5)]
G.add_edges_from(edges)

# DFS 遍历
visited = []
def dfs_vis(graph, node):
    if node not in visited:
        visited.append(node)
        for neighbor in list(graph.neighbors(node)):
            dfs_vis(graph, neighbor)

dfs_vis(G, 1)

# 可视化
plt.figure(figs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值