循环复杂度
2023-02-18 16:31:30 时间
循环复杂度(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)】来表示。
相关文章
- 手绘图解java类加载原理
- Java中的线程到底有哪些安全策略
- Java中观察者模式与委托,还在傻傻分不清
- 一图详解java-class类文件原理
- Java遇上SPL:架构优势和开发效率,一个不放过
- 长篇图解java反射机制及其应用场景
- [java并发编程]基于信号量semaphore实现限流器
- java并发编程-StampedLock高性能读写锁
- 【java并发编程】ReentrantLock 可重入读写锁
- 【java并发编程】Lock & Condition 协调同步生产消费
- Java synchronized对象级别与类级别的同步锁
- java并发编程JUC第十二篇:AtomicInteger原子整型
- java并发编程JUC第十一篇:如何在线程之间进行对等数据交换
- java并发编程JUC第十篇:CyclicBarrier线程同步
- java并发编程JUC第九篇:CountDownLatch线程同步
- java并发编程工具类JUC第八篇:ConcurrentHashMap
- java并发编程工具类JUC第七篇:BlockingDeque双端阻塞队列
- java并发编程工具类JUC第六篇:SynchronousQueue同步队列
- java并发编程工具类JUC第五篇:PriorityBlockingQueue优先级队列
- java并发编程工具类JUC第四篇:LinkedBlockingQueue链表队列