主要内容

allcycles

找到所有周期图

描述

例子

周期= allcycles (G)返回所有周期在指定的图形。输出周期是一个单元阵列,每个单元格的内容周期{k}列出节点形成一个循环。

例子

(周期,edgecycles)= allcycles (G)在每个周期也返回边缘。输出edgecycles是一个单元阵列在哪里edgecycles {k}给出了边缘在相应的周期,周期{k}

例子

(___)= allcycles (G,名称,值)使用一个或多个名称参数指定附加选项。您可以使用任何的输出参数组合在以前的语法。例如,您可以指定MaxNumCycles和一个标量来限制返回的周期数。

例子

全部折叠

与九节点创建一个有向图。画出图。

s = [1 2 3 5 6 5 4 6 8 9 8 7];t = [2 3 5 6 5 4 2 1 9 8 7 4];G =有向图(s, t);情节(G)

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

计算图中所有的周期。

周期= allcycles (G)
周期=5×1单元阵列{[1 2 3 6 5 4]}{[1 2 3 6 9 8 5 4]}{[1 2 3 6 9 8 7 4]}{[2 3 6 5]}{[2 3 6 9 8 5]}

第二个输出参数allcycles返回包含在每个周期的边缘。这对于油印尤其有用,因为所需的边缘指数唯一地标识边缘在每个周期。

创建一个导演油印有八个节点和18边缘。指定节点的名称。绘制图形是贴有标签的节点和边。

s = [1 1 2 2 3 3 2 2 4 6 8 6 5 6 7 3 3 3];t = [2 3 1 2 3 1 4 4 5 6 2 6 7 8 8 5 7 7];名称= {“一个”,“B”,“C”,' D ',“E”,“F”,‘G’,“H”};G =有向图(s t[],名称);p =情节(G,“EdgeLabel”1:numedges (G));

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

计算图中所有的周期。指定两个输出参数也返回边缘指数边缘在每个周期。

[周期,edgecycles] = allcycles (G);

查看节点和边在第五周期。

周期{5}
ans =1 x7单元格{A} {' C '} {“E”} {‘G’} {' H '} {' F '} {B}
edgecycles {5}
ans =1×72 9 13 17 18 14 3

强调了节点和边在第五周期。

突出(p,“边缘”,edgecycles {5},“EdgeColor”,“r”,“线宽”,1.5,“NodeColor”,“r”,“MarkerSize”6)

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

使用“MaxNumCycles”,“MaxCycleLength”,“MinCycleLength”选项来限制返回的周期的数量allcycles

创建一个完全图的邻接矩阵与20节点。创建一个无向图的邻接矩阵,省略self-loops。

一个= 1 (20);图G = (,“omitselfloops”);

从图中的节点都连接到所有其他节点,图中有大量的周期(超过1.7 e17)。因此,它是不可行的计算所有的周期自结果将不适合在内存中。相反,计算前10周期。

cycles1 = allcycles (G,“MaxNumCycles”,10)
cycles1 =10×1单元阵列{(1 2 3)}{(1 2 3 4)}{(1 2 3 4 5)}{(1 2 3 4 5 6)}{(1 2 3 4 5 6 7)}{(1 2 3 4 5 6 7 8]}{(1 2 3 4 5 6 7 8 9]}{(1 2 3 4 5 6 7 8 9 10]}{(1 2 3 4 5 6 7 8 9 10 11]}{(1 2 3 4 5 6 7 8 9 10 11 12]}

现在计算的前10个周期的周期长度小于或等于3。

cycles2 = allcycles (G,“MaxNumCycles”10“MaxCycleLength”3)
cycles2 =10×1单元阵列{(1 2 3)}{[1 2 4]}{[1 2 5]}{[1 2 6]}{[1 2 7]}{[1 2 8]}{[1 2 9]}{[1 2 10]}{[1 2 11]}{[1 2 12]}

最后,计算一个周期的前10个周期长度大于或等于4。

cycles3 = allcycles (G,“MaxNumCycles”10“MinCycleLength”4)
cycles3 =10×1单元阵列{(1 2 3 4)}{(1 2 3 4 5)}{(1 2 3 4 5 6)}{(1 2 3 4 5 6 7)}{(1 2 3 4 5 6 7 8]}{(1 2 3 4 5 6 7 8 9]}{(1 2 3 4 5 6 7 8 9 10]}{(1 2 3 4 5 6 7 8 9 10 11]}{(1 2 3 4 5 6 7 8 9 10 11 12]}{(1 2 3 4 5 6 7 8 9 10 11 12 13]}

检查的输出cyclebasisallcycles功能与边的数量规模图。

创建和绘制正方形网格图和三个节点两侧的广场。

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

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

计算所有图中循环使用allcycles。使用tiledlayout函数来构造一个数组的次要情节,突出每个周期在一个次要情节。结果表明,总共有13个周期图中。

[周期,edgecycles] = allcycles (G);tiledlayoutk = 1:长度(周期)nexttile突出(情节(G)、周期{k},“边缘”,edgecycles {k},“EdgeColor”,“r”,“NodeColor”,“r”)标题(“循环”+ k)结束

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

这些周期可以被看作是组合的小周期。的cyclebasis函数返回循环形成的一个子集中的所有其他周期的基础图。使用cyclebasis计算的基本周期基础和突出每个基本周期在一个次要情节。即使有13个周期图中,只有四种基本周期。

[周期,edgecycles] = cyclebasis (G);tiledlayoutk = 1:长度(周期)nexttile突出(情节(G)、周期{k},“边缘”,edgecycles {k},“EdgeColor”,“r”,“NodeColor”,“r”)标题(“循环”+ k)结束

图包含4轴对象。坐标轴对象1标题周期1包含一个graphplot类型的对象。坐标轴对象与标题2周期2包含graphplot类型的一个对象。坐标轴对象与标题3周期3包含一个graphplot类型的对象。坐标轴对象与标题4周期4包含一个graphplot类型的对象。

现在,增加节点的数量在每一侧的从三、四方图。这是一个小图形的大小。

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 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 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:长度(周期)nexttile突出(情节(G)、周期{k},“边缘”,edgecycles {k},“EdgeColor”,“r”,“NodeColor”,“r”)标题(“循环”+ k)结束

图包含9轴对象。坐标轴对象1标题周期1包含一个graphplot类型的对象。坐标轴对象与标题2周期2包含graphplot类型的一个对象。坐标轴对象与标题3周期3包含一个graphplot类型的对象。坐标轴对象与标题4周期4包含一个graphplot类型的对象。坐标轴对象与标题5周期5包含graphplot类型的一个对象。坐标轴对象与标题6周期6包含一个graphplot类型的对象。坐标轴对象7标题循环7包含graphplot类型的一个对象。8与标题周期8轴对象包含一个类型的对象graphplot。坐标轴对象9与标题周期9包含graphplot类型的一个对象。

大数量的增加周期只有一个小的变化的大小图是典型的图结构。返回的周期数allcycles可以生长指数图的边的数量。然而,返回的周期数cyclebasis最多可以增加线性图的边的数量。

输入参数

全部折叠

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

例子:图G = (1、2)

例子:2 G =有向图([1],[2 3])

名称-值参数

指定可选的逗号分隔条名称,值参数。的名字参数名称和吗价值相应的价值。的名字必须出现在引号。您可以指定几个名称和值对参数在任何顺序Name1, Value1,…,的家

例子:allcycles (G, MaxNumCycles, 100)只返回第一个图中100次。

最大数量的周期,指定为逗号分隔组成的“MaxNumCycles”和一个非负整数标量。这个选项是有用的,当数量的周期图变得足够大的内存限制。您可以指定MaxNumCycles来限制返回的周期数allcycles这结果符合可用内存。

例子:allcycles (G, MaxNumCycles, 100)

最大的周期长度,指定为逗号分隔组成的“MaxCycleLength”和一个正整数标量。这个选项过滤器返回的结果allcycles所以没有周期长度大于返回指定的限制。一个周期的长度是衡量边的数量,忽略了边。

寻找周期的长度,同时指定“MaxCycleLength”“MinCycleLength”。寻找周期精确指定的长度,为双方指定相同的值“MaxCycleLength”“MinCycleLength”

例子:allcycles (G, MaxCycleLength, 4)回报周期的长度小于或等于4。

例子:allcycles (G, MinCycleLength 3 MaxCycleLength, 5)回报周期长度为3,4或5。

最小的周期长度,指定为逗号分隔组成的“MinCycleLength”和一个正整数标量。这个选项过滤器返回的结果allcycles所以没有周期长度小于返回指定的限制。一个周期的长度是衡量边的数量,忽略了边。

寻找周期的长度,同时指定“MaxCycleLength”“MinCycleLength”。寻找周期精确指定的长度,为双方指定相同的值“MaxCycleLength”“MinCycleLength”

例子:allcycles (G, MinCycleLength, 2)回报周期的长度大于或等于2。

例子:allcycles (G, MinCycleLength 3 MaxCycleLength, 5)回报周期长度为3,4或5。

输出参数

全部折叠

图周期,作为细胞数组返回。每个元素周期{k}包含的节点,属于一个周期的G。每个周期开始节点的最小节点指数和周期辞典编纂的顺序返回。周期无向图只返回一次,在一个方向。如果G不包含任何周期呢周期是空的。

的数据类型细胞周期取决于输入图包含节点名称:

  • 如果图G没有节点名,那么每个元素周期{k}是一个数值向量的节点指标。

  • 如果图G节点名称,那么每个元素周期{k}是一个单元阵列特征向量节点的名称。

边缘在每个周期中,作为细胞数组返回。每个元素edgecycles {k}包含边缘的边缘指数相应的周期,周期{k}。如果G不包含任何周期呢edgecycles是空的。

更多关于

全部折叠

图周期

存在周期在一个图中有一个非空的路径,只有第一个和最后一个节点是重复的。一个周期的例子是:(Node1 - Node2 Node3 Node1)。按照惯例,allcycles不返回循环中的最后一个节点,因为它是与第一个相同。

一个周期不能遍历两次相同的边缘。例如,周期(Node1 - Node2 Node1)在一个无向图只存在如果有多个边缘连接Node1和Node2。根据这个定义,self-loops算作周期,尽管他们不能循环的一部分。

提示

  • 周期图的数量在很大程度上依赖于图的结构。对于一些图结构,周期可以用节点的数量呈现指数级增长。例如,一个完全图12节点给出的图G = ((12))包含近6000万个周期。使用MaxNumCycles,MaxCycleLength,MinCycleLength选择控制的输出allcycles在这些情况下。

介绍了R2021a