循环复杂度

简介: 循环复杂度

循环复杂度(Cyclomaticcomplexity)也称为条件复杂度,是一种软件度量,是由老托马斯·J·麦凯布(英语:ThomasJ.McCabe,Sr.)在1976年提出,用来表示程式的复杂度,其符号为VG或是M。

循环复杂度由程式的源代码中量测线性独立路径的个数。

此概念有些类似的量测文字复杂度的Flesch-Kincaid可读性测试

(英语:Flesch-KincaidReadabilityTest),不过方法不完全相同。

循环复杂度是由程式的控制流图(英语:controlflowgraph)来计算:

有向图的节点对应程式中个别的程式码,而若一个程式执行后会立刻执行另一程式码,会有边连结二程式码对应的节点。圈复杂度可应用在程式的子程序、模组、方法或类别。

麦凯布首先提出一种称为“基础路径测试”(BasisPathTesting)的软件测试方式,是测试程式中的每一线性独立路径,此情形的测试用例个数即为程式的循环复杂度。

"循环复杂度"的名称有时会让人误解,因为此复杂度不只计算程式中的循环个数。

循环复杂度是指程式的控制流图中,若将结束点到启始点再增加一个边时,控制流图中的圈(几个边形成封闭路径)的个数。

例如:

我们利用循环做一个累加器

package com.item.action;
public class Main {
  public static void main(String args[]) {
    int i = 1;// 1、初始值
    int sum=0;
    while(i<101) {//2、表达式
      sum+=i;//3、循环体
      i++;//4、迭代器
    }
    System.out.println(sum);
  }
}

这样会一直的累加到5050,一共执行了100次,一个循环,循环复杂度也就是1,但是我们通常用时间复杂度【O(n)】与空间复杂度【S(n)】来表示。

相关文章
|
28天前
|
算法
数据结构和算法学习记录——时间复杂度的计算(嵌套循环、大O的渐进表示法、双重循环、常数循环、strchr、冒泡排序、二分查找、斐波那契数列递归)
数据结构和算法学习记录——时间复杂度的计算(嵌套循环、大O的渐进表示法、双重循环、常数循环、strchr、冒泡排序、二分查找、斐波那契数列递归)
35 1
|
11月前
|
Java
常见的for循环优化方式
经常使用一些循环,进行耗时计算的操作,特别是 for 循环,它是一种重复计算的操作,如果处理不好,耗时就比较大,如果处理书写得当,将大大提高效率,下面总结几条 for 循环的常见优化方式。
81 0
|
9月前
|
存储 算法 数据处理
for 循环嵌套 for 循环,你需要懂的代码性能优化技巧!
本篇分析的技巧点其实是比较常见的,但是最近的几次的代码评审还是发现有不少兄弟没注意到。 所以还是想拿出来说下。
194 4
|
8月前
|
缓存 索引
这 11 个 for 循环优化你得会
这 11 个 for 循环优化你得会
|
缓存 算法 Java
使用迭代优化递归程序
大家好,我是王有志。 今天我们将会分析上篇文章中递归算法存在的问题,并通过迭代去优化。
86 1
使用迭代优化递归程序
|
11月前
|
Web App开发 测试技术
优化循环的方法-循环展开
优化循环的方法-循环展开
64 0
|
搜索推荐 算法
认识复杂度和简单排序算法
认识复杂度和简单排序算法
65 0
|
机器学习/深度学习 算法 C语言
[最全算法总结]我是如何将递归算法的复杂度优化到O(1)的
[最全算法总结]我是如何将递归算法的复杂度优化到O(1)的
160 0
[最全算法总结]我是如何将递归算法的复杂度优化到O(1)的
|
算法 Java
算法java快速排序的两种方法(单边循环、双边循环)
算法java快速排序的两种方法(单边循环、双边循环)
142 0
|
算法 程序员
【简单算法】什么是复杂度?
【简单算法】什么是复杂度?