主要内容

cyclebasis

图的基本循环基

描述

例子

周期= cyclebasis (G计算基本周期的基础上对于无向图。输出周期是一个单元数组,指示哪些节点属于每个基本周期。

例子

周期edgecycles) = cyclebasis (G还返回每个周期的边。输出edgecycles单元阵列在哪里edgecycles {k}给出节点之间的边周期{k}

例子

全部折叠

创建并绘制无向图。

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)

图中包含一个坐标轴。坐标轴包含一个graphplot类型的对象。

计算每个基本周期中有哪些节点。

周期= 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);

图中包含一个坐标轴。坐标轴包含一个graphplot类型的对象。

计算图的基本循环基础。

[周期,edgecycles] = 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]}

突出每个基本周期,使用tiledlayoutnexttile构建一组副图。对于每个子图,首先获取对应循环的节点周期,边缘从edgecycles.然后,绘制图形并突出那些节点和边。

tiledlayoutk = 1:length(cycles) nexttile highlight(plot(G),cycles{k},“边缘”,Edgecycles {k},“EdgeColor”“r”“NodeColor”“r”)标题(“循环”+ k)结束

图包含6个轴。循环1的轴1包含一个graphplot类型的对象。循环2的轴2包含一个graphplot类型的对象。循环3的轴3包含一个graphplot类型的对象。标题为Cycle 4的轴4包含一个graphplot类型的对象。标题为Cycle 5的轴5包含一个graphplot类型的对象。标题为Cycle 6的轴6包含一个graphplot类型的对象。

您可以通过在使用两个或多个基本周期之间找到对称差异来构建图表中的任何其他周期setxor函数。例如,取前两个周期之间的对称差,然后绘制出新的周期。

图new_cycle_edges = setxor(edgecycle {1},edgecycle {2});突出(情节(G),“边缘”new_cycle_edges,“EdgeColor”“r”“NodeColor”“r”

图中包含一个坐标轴。坐标轴包含一个graphplot类型的对象。

虽然每个循环都可以由由循环基组成的循环组合而成,但并不是每个基循环的组合都形成一个有效的循环。

检查如何输出cyclebasisallcycles函数随图形中边的数量缩放。

创建并绘制一个正方形网格图,每边有三个节点。

n = 5;一个= delsq (numgrid (“年代”, n));图G = (,“omitselfloops”);情节(G)

图中包含一个坐标轴。坐标轴包含一个graphplot类型的对象。

使用。计算图中的所有周期allcycles.使用tiledlayout函数构造子图数组,并突出显示子图中的每个周期。结果表明,图中总共有13个循环。

[周期,edgecycles] = allcycles (G);tiledlayoutk = 1:length(cycles) nexttile highlight(plot(G),cycles{k},“边缘”,Edgecycles {k},“EdgeColor”“r”“NodeColor”“r”)标题(“循环”+ k)结束

图中包含13个轴。循环1的轴1包含一个graphplot类型的对象。循环2的轴2包含一个graphplot类型的对象。循环3的轴3包含一个graphplot类型的对象。标题为Cycle 4的轴4包含一个graphplot类型的对象。标题为Cycle 5的轴5包含一个graphplot类型的对象。标题为Cycle 6的轴6包含一个graphplot类型的对象。标题为Cycle 7的Axes 7包含一个graphplot类型的对象。标题为Cycle 8的轴8包含一个graphplot类型的对象。标题为Cycle 9的轴9包含一个graphplot类型的对象。 Axes 10 with title Cycle 10 contains an object of type graphplot. Axes 11 with title Cycle 11 contains an object of type graphplot. Axes 12 with title Cycle 12 contains an object of type graphplot. Axes 13 with title Cycle 13 contains an object of type graphplot.

其中一些循环可以被视为较小循环的组合。这cyclebasis函数返回构成图中所有其他循环基的循环的子集。使用cyclebasis计算基本周期的基础,并在子图中突出显示每个基本周期。尽管图中有13个循环,但只有4个基本循环。

[周期,edgecycles] = cyclebasis (G);tiledlayoutk = 1:length(cycles) nexttile highlight(plot(G),cycles{k},“边缘”,Edgecycles {k},“EdgeColor”“r”“NodeColor”“r”)标题(“循环”+ k)结束

图中包含4个轴。循环1的轴1包含一个graphplot类型的对象。循环2的轴2包含一个graphplot类型的对象。循环3的轴3包含一个graphplot类型的对象。标题为Cycle 4的轴4包含一个graphplot类型的对象。

现在,将正方形图每边的节点数从3个增加到4个。这表示图的大小略有增加。

n = 6;一个= delsq (numgrid (“年代”, n));图G = (,“omitselfloops”);图绘制(G)

图中包含一个坐标轴。坐标轴包含一个graphplot类型的对象。

使用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 8 7 11 12 1615 14 13 9 5]}{(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 5 8 7 11 15 14 13 9]}{(1 2 3 4 8 7 11 15 14 13 9 10 6 5]}⋮

尽管图中有大量的循环,cyclebasis仍然返回少量的基本周期。图中的每一个环可以只用9个基本环来构造。

[周期,edgecycles] = cyclebasis (G);图tiledlayoutk = 1:length(cycles) nexttile highlight(plot(G),cycles{k},“边缘”,Edgecycles {k},“EdgeColor”“r”“NodeColor”“r”)标题(“循环”+ k)结束

图中包含9个轴。循环1的轴1包含一个graphplot类型的对象。循环2的轴2包含一个graphplot类型的对象。循环3的轴3包含一个graphplot类型的对象。标题为Cycle 4的轴4包含一个graphplot类型的对象。标题为Cycle 5的轴5包含一个graphplot类型的对象。标题为Cycle 6的轴6包含一个graphplot类型的对象。标题为Cycle 7的Axes 7包含一个graphplot类型的对象。标题为Cycle 8的轴8包含一个graphplot类型的对象。标题为Cycle 9的轴9包含一个graphplot类型的对象。

对于某些图形结构,仅具有较小变化的周期数量的循环次数的大幅增加。返回的周期数allcycles可以随着图中边的数量呈指数增长。但是,返回的周期数cyclebasis最多可以随图中的边数线性增长。

输入参数

全部折叠

输入图形,指定为对象。使用创建无向图对象。

例子:图G =(1、2)

输出参数

全部折叠

基本图形循环,作为单元格数组返回。每一个细胞周期{k}包含属于基本循环之一的节点G.每个周期从最小的节点索引开始。如果G不包含任何循环吗周期是空的。

每一个周期G基本周期的组合回归了吗周期.如果一条边是循环的一部分G,那么它至少也是一个基本周期的一部分周期

中的单元格的数据类型周期取决于输入图是否包含节点名称:

  • 如果图G没有节点名,那么每个单元格呢周期{k}是节点索引的数值向量。

  • 如果图G具有节点名称,然后是每个单元格周期{k}是字符向量节点名称的单元格数组。

每个基本周期的边,作为单元格数组返回。每一个细胞edgecycles {k}包含循环中各边的边索引周期{k}.如果G不包含任何循环吗edgecycles是空的。

更多关于

全部折叠

基础基础

在无向图中基本周期的基础上是构成图的环空间基的一组简单环。也就是说,图中的任何循环都可以由基本循环构成。例如,请参见基本循环中的节点和边

图的基本循环基是从图的最小生成树计算出来的。对于每一条不在最小生成树中的边,都存在一个基本循环,它由这条边、它的端点以及连接它们的最小生成树中的路径组成。

使用的最小生成树cyclebasis一般是不同的一个返回minspantree.选择循环是短暂的。然而,cyclebasis并不能保证返回尽可能短的基本周期基础。

介绍了R2021a