圈复杂度计算

圈复杂度计算

1、点边计算法(复杂)

52cd59c65429990935e93b19c56c291f.png

圈复杂度的计算方法很简单,计算公式为:

V(G) = E - N + 2

其中,e表示控制流图中边的数量,n表示控制流图中节点的数量。

2、节点判定法(简单)

更直观的方法,因为圈复杂度所反映的是“判定条件”的数量,所以圈复杂度实际上就是等于判定节点的数量再加上1,也即控制流图的区域数,对应的计算公式为:

V (G) = P + 1

其中P为判定节点数,判定节点举例:

  1. if语句

  2. while语句

  3. for语句

  4. case语句

  5. catch语句

  6. and和or布尔操作

  7. ?:三元运算符

例子:

1U32 find (string match){
 2         for(auto var : list)
 3         {
 4             if(var == match && from != INVALID_U32) return INVALID_U32;
 5         }
 6         //match step1
 7         if(session == getName() && key == getKey())
 8         {
 9             for (auto& kv : Map)
10             {
11                 if (kv.second == last && match == kv.first)
12                 {
13                     return last;
14                 }
15             }
16
17         }
18         //match step2
19         auto var = Map.find(match);
20         if(var != Map.end()&& (from != var->second)) return var->second;
21
22         //match step3
23         for(auto var: Map)
24         {
25             if((var.first, match) && from != var.second)
26             {
27                 return var.second;
28             }
29         }
30         return INVALID_U32;
31     };

其圈复杂度为:V(G) = 1(for) + 2(if) + 2(if) + 1(for) + 2(if) + 2(if) + 1(for) + 2(if) + 1= 14

参考:

https://blog.51cto.com/u_13538361/6377574

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值