cyclebasis
图的基本循环基
描述
例子
图的基本循环基
创建并绘制无向图。
S = [1 1 2 2 3 4 4 5 5 6 7 8];T = [2 4 3 5 6 5 7 6 8 9 8 9];G =图(s,t);情节(G)
计算每个基本循环中有哪些节点。
cycles = cyclebasis(G)
周期=4×1单元格数组{[1 2 5 4]} {[2 3 6 5]} {[4 5 8 7]} {[5 6 9 8]}
基本循环中的节点和边
计算图的基本循环中的节点和边,将基本循环可视化,然后利用基本循环找到图中的其他循环。
创建并绘制无向图。
S = [1 1 1 2 2 3 3 4 4 4 5 6];T = [2 3 4 4 5 4 6 5 6 7 7 7];G =图(s,t);情节(G);
计算图的基本循环基。
[cycles, edgeccycles] = cyclebasis(G)
周期=6×1单元格数组{(1 2 4)} {[1 3 4]} {[2 4 5]} {[3 4 6]} {[4 5 7]} {[4 6 7]}
edgecycles =6×1单元格数组{[1 4 3]} {[2 6 3]} {[4 8 5]} {[6 9 7]} {[8 11 10]} {[9 12 10]}
突出显示每个基本周期,使用tiledlayout
而且nexttile
构建一组子图。对于每个子图,首先获取对应循环的节点周期
,和边缘来自edgecycles
.然后绘制图形并突出显示这些节点和边。
tiledlayout流为k = 1:length(cycles) nexttile highlight(plot(G),cycles{k},“边缘”, edgecycles {k},“EdgeColor”,“r”,“NodeColor”,“r”)标题(“循环”+ k)结束
你可以在图中构造任何其他的循环,方法是找出两个或多个基本循环之间的对称差setxor
函数。例如,取前两个循环之间的对称差,并绘制得到的新循环。
图new_cycle_edges = setxor(edgeccycles {1}, edgeccycles {2});突出(情节(G),“边缘”new_cycle_edges,“EdgeColor”,“r”,“NodeColor”,“r”)
虽然每个循环都可以由循环基的循环组合而成,但并不是每个基循环的组合都能形成一个有效的循环。
比较基本周期基与所有周期集
检查的输出如何cyclebasis
而且allcycles
函数随图中边的数量而缩放。
创建并绘制方格网格图,方格每边有三个节点。
N = 5;A = delsq(numgrid)“年代”, n));G =图(A,“omitselfloops”);情节(G)
计算图中的所有循环allcycles
.使用tiledlayout
函数构造子图数组并突出显示子图中的每个周期。结果表明,图中总共有13个循环。
[cycles, edgeccycles] = allcycles(G);tiledlayout流为k = 1:length(cycles) nexttile highlight(plot(G),cycles{k},“边缘”, edgecycles {k},“EdgeColor”,“r”,“NodeColor”,“r”)标题(“循环”+ k)结束
其中一些循环可以看作是较小的循环的组合。的cyclebasis
函数返回构成图中所有其他循环基的循环的子集。使用cyclebasis
计算基本周期基并在副图中突出显示每个基本周期。尽管图中有13个循环,但基本循环只有4个。
[cycles, edgeccycles] = cyclebasis(G);tiledlayout流为k = 1:length(cycles) nexttile highlight(plot(G),cycles{k},“边缘”, edgecycles {k},“EdgeColor”,“r”,“NodeColor”,“r”)标题(“循环”+ k)结束
现在,将正方形图两边的节点数从3增加到4。这表示图形的大小略有增加。
N = 6;A = delsq(numgrid)“年代”, n));G =图(A,“omitselfloops”);图绘制(G)
使用allcycles
计算新图中所有的循环。对于这张图,有超过200个循环,这太多了,无法绘制。
allcycles (G)
ans =213×1单元格数组{[8 1 2 3 4 5 6 7]} {(1 2 3 4 5 8 7 6 10 9]} {(1 2 3 4 8 7 6 10 11 12 16 15 14 13 9 5]} {(1 2 3 4 5 8 7 6 10 11 15 14 13 9]} {(1 2 3 4 8 7 6 10 14 13 9 5]} {(1 2 3 4 8 7 11 10 6 5]} {(1 2 3 4 5 8 7 11 10 9]} {(1 2 3 4 5 8 7 11 10 14 13 9]} {(1 2 3 4 8 7 11 12 16 15 14 10 6 5]} {(1 2 3 4 5 8 7 11 12 16 15 14 10 9]} {(1 2 3 4 5 8 7 11 12 16 15 14 13 9]} {(1 2 3 4 8 7 11 12 16 15 14 13 9 10 6 5]} {(1 2 3 4 8 7 11 15 14 10 6 5]} {(1 2 3 4 5 8 7 11 15 14 10 9]} {(1 2 3 4 8 7 11 15 14 139 5]} {[1 2 3 4 8 7 11 15 14 13 9 10 6 5]}
尽管图中有大量的循环,cyclebasis
仍然返回少量的基本周期。图中的每个循环只能用9个基本循环来构造。
[cycles, edgeccycles] = cyclebasis(G);图tiledlayout流为k = 1:length(cycles) nexttile highlight(plot(G),cycles{k},“边缘”, edgecycles {k},“EdgeColor”,“r”,“NodeColor”,“r”)标题(“循环”+ k)结束
对于某些图结构来说,循环数的大量增加而图的大小只有很小的变化是典型的。返回的循环数allcycles
可以随图中边的数量呈指数增长。然而,返回的循环数cyclebasis
最多可以随图中边的数量线性增长。
输出参数
周期
-基本图循环
单元阵列
基本图循环,作为单元格数组返回。每一个细胞周期{k}
包含属于的基本循环之一的节点G
.每个循环从最小的节点索引开始。如果G
不包含任何循环,那么周期
是空的。
每个周期G
返回的是基本周期的组合吗周期
.如果一条边是循环的一部分G
,那么它也是至少一个基本周期的一部分周期
.
中的单元格的数据类型周期
取决于输入图是否包含节点名:
如果图
G
没有节点名,那么每个单元格呢周期{k}
是节点索引的数值向量。如果图
G
有节点名,然后是每个单元格周期{k}
字符向量节点名称的单元格数组。
edgecycles
-每个基本周期的边缘
单元阵列
每个基本循环中的边,作为单元格数组返回。每一个细胞edgecycles {k}
包含循环中边的边索引周期{k}
.如果G
不包含任何循环,那么edgecycles
是空的。
更多关于
图周期
当存在一个非空路径,其中只重复第一个和最后一个节点时,图中就存在循环。也就是说,除了在路径末尾重复第一个节点以关闭循环之外,没有重复其他节点。例如:(Node1 - Node2 - Node3 - Node1)。按照惯例,cyclebasis
不返回循环中的最后一个节点,因为它与第一个节点相同。
一个循环不能两次穿过同一条边。例如,无向图中的循环(Node1 - Node2 - Node1)只在Node1和Node2之间有多条边连接的情况下存在。根据这个定义,自循环算作循环,尽管它们不能成为更大循环的一部分。
基本周期基准
在无向图中基本周期基准是构成图的循环空间基的一组简单循环。也就是说,图中的任何循环都可以由基本循环构造出来。示例请参见基本循环中的节点和边.
图的基本循环基由图的最小生成树计算。对于不属于最小生成树的每条边,都存在一个基本循环,这个循环由该边、它的端点节点和连接它们的最小生成树路径组成。
中的最小生成树cyclebasis
通常与返回的值不同minspantree
.它的选择使其周期较短。然而,cyclebasis
不能保证返回最短的基本周期基。
版本历史
在R2021a中引入
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。