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 = graph(s,t);情节(G)
计算每个基本循环中的节点。
cycles =循环基(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 2 3 3 4 4 4 5 6];T = [2 3 4 4 5 4 6 5 6 7 7 7];G = graph(s,t);情节(G);
计算图的基本循环基。
[cycles, edgcycles] = 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(edgecycle {1},edgecycle {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, edgcycles] = 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, edgcycles] = cyclbasis (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 13{[1 2 3 4 8 7 11 15 14 13 9 10 6 5]}
尽管图中有大量的循环,cyclebasis
仍然返回少量的基本周期。图中的每一个环都可以只用9个基本环来构造。
[cycles, edgcycles] = cyclbasis (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
是空的。
更多关于
基本周期基础
在无向图中基本周期基础是构成图的循环空间的基的一组简单循环。也就是说,图中的任何环都可以由基本环构造而成。使用示例请参见基本循环中的节点和边。
图的基本循环基是从图的最小生成树中计算出来的。对于不在最小生成树中的每条边,存在一个基本循环,该循环由该边、其末端节点以及连接它们的最小生成树路径组成。
的最小生成树cyclebasis
一般和退货的不一样吗minspantree
。它的选择是为了使周期短。然而,cyclebasis
不能保证返回尽可能短的基本周期基础。
版本历史
MATLAB命令
您点击了与此MATLAB命令对应的链接:
通过在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
你亦可选择下列网址:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家网站没有针对您所在位置的访问进行优化。