详细分析McCabe环路复杂度(附例题)

前言

该知识点常出在408或者软考中,对此此文重点讲讲理论知识以及例题

对于例题平时看到也会更新

1. 基本知识

McCabe环路复杂度是一种用于衡量软件代码复杂性的指标,主要是通过计算代码中的控制流图中的环路数量来衡量的

核心概念是控制流图(Control Flow Graph,CFG)

对代码中控制结构(如条件语句、循环语句等)之间的控制流关系进行图形化表示的一种方法

在控制流图中,节点表示基本块(basic block),而边表示从一个基本块到另一个基本块的控制流转移。环路(或称为循环)则是在控制流图中形成闭合回路的一组节点

McCabe环路复杂度的计算基于以下公式:V(G)=E−N+2P

  • V(G) 是McCabe环路复杂度
  • E 是控制流图中的边数
  • N 是控制流图中的节点数。
  • P 是控制流图中的连通分量数(即图中的连通子图数)

假设代码如下:

def example_function(x, y):
    if x > 10:
        while y < 100:
            y += 10
    else:
        for i in range(x):
            y -= i
  • 节点数 N:5(函数定义、条件语句、循环语句、循环内语句、条件语句的else分支)
  • 边数 E:5(函数定义到条件语句、条件语句到循环语句、循环语句到循环内语句、循环内语句到循环语句、条件语句到条件语句的else分支)
  • 连通分量数 P:1(整个控制流图是连通的)

总体计算如下:

V(G)=5−5+2∗1=2

2. 例题

原题如下:
在这里插入图片描述

计算方式:计算出最小环的数量为3,可以知道复杂度是3+1=4

在这里插入图片描述

计算方式2:最终是12-10+2

在这里插入图片描述

  • 24
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农研究僧

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值