🎯要点
- 🎯邻接图表征类:🖊边生成图算法 | 🖊生成顶点标记图算法 | 🖊图深度优先遍历算法 | 🖊图深度优先生成树的算法 | 🖊双向图最左边深度优先遍历的算法 | 🖊图广度优先遍历算法 | 🖊图广度优先生成树的算法 | 🖊图广度优先生成树最短路径算法 | 🖊二分图最大基数匹配算法 | 🖊二分图匹配增广路径算法 | 🖊二分图最大权重匹配算法 | 🖊二分图两个顶点匹配增广路径算法 | 🖊有序图同构算法 | 🖊枚举图团回溯算法 | 🖊枚举图最大团回溯算法 | 🖊图的最大团分支定界算法。
- 🎯树结构表征类:🖊边生成树算法 | 🖊生成节点标记完全二叉树算法 | 🖊有序树距离简单算法 | 🖊有序树距离回溯算法 | 🖊有序树距离分支定界算法 | 🖊有序树距离分而治之算法 | 🖊有序树距离自顶向下、自底向上动态规划算法 | 🖊树前序遍历递归和迭代算法 | 🖊节点树前序、后序遍历迭代算法 | 🖊节点树后序遍历递归算法 | 🖊自上而下遍历树迭代算法 | 🖊自上而下遍历节点树迭代算 | 🖊自下而上遍历树迭代算法 | 🖊自下而上遍历节点树迭代算法 | 🖊计算树节点深度、高度和分层布局算法 | 🖊测试有序、无序树同构算法 | 🖊有序树、无序树自顶向下子树同构算法 | 🖊枚举有序树、无序树自下而上子树同构算法 | 🖊有序树、无序树自顶向下最大公共子树同构算法 | 🖊有序树、无序树自底向上最大公共子树同构算法。
- 🎯代数计算图算法 | 🎯图学习博物馆艺术品 | 🎯竞技比赛流体动力学策略图学习 | 🎯图学习药物精度控制
🍇Python图分析
在图论中,图具有连接到两个元素 (E) 的有限顶点集 (V)。 连接两个目的地或节点的每个顶点 (v) 称为链接或边。 考虑下面的自行车道图:集合 {K,L}、{F,G}、{J,H}、{H,L}、{A,B} 和 {C,E} 是边的示例。
flowchart TB
A((A))---B((B))
C((C)) & D((D))---E((E))
F((F))---G((G)) & H((H))
G---I((I)) & J((J))
J---H & K((K))
I---K
H---L((L)) & M((M))
K---L---M
每个节点的边总数就是该节点的度。在上图中,M 的阶数为 2({M,H} 和 {M,L}),而 B 的阶数为 1({B,A})。度正式描述为:
d
i
(
g
)
=
∑
j
=
1
n
g
i
j
\begin{aligned} d_i(g) & =\sum_{j=1}^n g_{i j} \end{aligned}
di(g)=j=1∑ngij
通过使用多个边的连接称为路径。 {F, H, M, L, H, J, G, I} 是路径的示例。 简单路径是指不重复节点的路径——正式称为欧拉路径。 {I, G, J, H, F} 是简单路径的示例。 最短的简单路径称为测地线。 I 和 J 之间的测地线是 {I, G, J} 或 {I, K, J}。 最后,循环是指路径的起点和终点相同(例如{H,M,L,H})。 在一些笔记本中,循环被正式称为欧拉循环。
并非图系统中的所有网络都是互连的。断开是在分量形成时发生的。如下图所示,只有当每个节点都有到其他节点的路径时,分量才会形成。
在 Python 中,networkx 通常用于应用图论,也称为网络分析。 该包具有快速总结图形特征的有用功能。
首先,下面的代码创建一个图空对象 P。接下来的步骤添加节点并描述边。
P = nx.Graph()
P.add_nodes_from(['A','B','C','D', 'E'])
P.add_edges_from ([('B','C'), ('A','C'), ('B','D'), ('D','A'), ('D','E'), ('B','E')])
print(P.nodes())
print(P.edges())
最后,nx.draw 用于可视化网络。
%matplotlib inline
import matplotlib.pyplot as plt
nx.draw(P, with_labels = True)
下面的练习一将使用航班的数据。数据集包括出发地和目的地机场以及描述航班的属性,包括飞行时间和延误(天气、安全或航空公司相关)。
import pandas as pd
import numpy as np
path = "INSERT YOUR PATH"
file = pd.read_csv(path + "flights.csv", low_memory = False)
file.shape
#review data
file.head()
由于我们已经有了出发地和目的地数据,****字段 ORIGIN_AIRPORT 和 DESTINATION_AIRPORT 将用作节点和边的源字段 - 无需像我们在第一个练习中那样创建节点或边。 一旦定义了节点,<object>.edges()
将提供它们之间的所有成对关系。 最后,nx.draw 将帮助生成一个到边缘的图形。
import networkx as nx
FG = nx.from_pandas_edgelist(file2, source='ORIGIN_AIRPORT', target='DESTINATION_AIRPORT', edge_attr=True)
FG.nodes()
nx.draw(FG, with_labels = True)
示例2:
NG.add_nodes_from(['A','B','C','D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L']) # Add a list of nodes by passing a
NG.add_edges_from([('A', 'B'),('C','E'),('D','E'), ('F','G'), ('F','H'), ('G', 'J'), ('H', 'J'), ('H', 'M'), ('H','L'), ('M', 'L'), ('J', 'K'), ('J', 'G'), ('K', 'I'), ('I', 'G'), ('L', 'K')])
s
NG = nx.from_pandas_edgelist(ntwrk, source='source', target='target', edge_attr=True)
NG.nodes()
NG.edges()
nx.draw(NG, with_labels = True)
djk_path = nx.dijkstra_path(NG, source='L', target='F')
djk_path