23

我处于圈复杂度(CC)的学习阶段。为了实践,我正在计算 2 个示例的圈复杂度,并想确认我的答案是否正确......

参考维基百科,CC 由M = E − N + 2Pwhere 给出:

  • E = 图的边数
  • N = 图的节点数
  • P = 连接组件的数量

请帮忙。

示例 1

这里,E = 8,N = 9 和 P = 1。因此 M = 8 - 9 + (2x1) = 1。

示例 2:

示例 2

这里 E = 11,N = 10 和 P = 1。因此 M = 10 - 11 + (2x1) = 1。

因此,对于这两个示例,CC 都是 1。请让我知道我的计算是否正确。

4

4 回答 4

23

您需要更加小心地将值正确插入到公式中。

在示例 1 中,您说

这里,E = 8,N = 9 和 P = 1

但实际上,情况正好相反:9 个边 (=E),8 个节点 (=N),所以 CC 为 3。

在示例 2 中,您的值是正确的:E=11、N=10、P=1。但是您在公式中以错误的顺序插入它们;它实际上应该是11 - 10 + (2x1) = 3

快捷方式:如果你有你的图的图片,你可以很容易地确定圈复杂度。只需计算背景被边缘划分的区域数。在您的第一个示例中,您有 2 个内部区域(以边缘为界)和一个周围区域,CC 为 3。第二个示例也是如此。(显然,此方法要求边缘不相互交叉。)

于 2012-02-01T15:14:05.403 回答
8

此外,如果这有帮助,则条件(If、while、for)语句的数量+1。所以在上面的例子中,有 2 个条件语句。所以 2+1=3。在这种情况下,圈复杂度为 3

于 2012-08-04T10:19:36.223 回答
1

只需计算封闭区域的数量并将其加 1。

在上面的示例中,封闭区域的数量 = 2,因此 CC = 2+1 = 3

于 2016-12-19T11:45:59.407 回答
0

P = 连接组件的数量

换句话说

P = 具有出口点的节点数

来源

于 2017-01-11T10:00:07.650 回答