java中时间复杂度怎么算的,java时间复杂度和空间复杂度

  java中时间复杂度怎么算的,java时间复杂度和空间复杂度

  什么是圈复杂度?

  ———————————————————————————————————————

  圈复杂度是衡量计算机程序复杂程度的一个尺度。它是根据程序从头到尾的线性独立路径数来计算的。

  圈子的复杂程度越高,代码的维护就越复杂和困难。坑越大。

  从1开始,一步一步地完成这个程序。

  但是遇到以下关键词,或者其他类似的词,就加1: if,while,repeat,for,and,or。

  case语句中的每个case加1。

  例如,以下函数的圈复杂度为1,这意味着代码只有一条路径。

  默认添加(a,b):

  退货b

  对于带有分支的代码,其圈复杂度为2,例如以下递归计算阶乘的代码:

  deffactorial(n):

  ifn==0:

  返回1

  否则:

  returnn *阶乘(n-1)

  其计算方法很简单:

  公式1: V (g)=E-N 2p。其中e表示控制流图中的边数,n表示控制流图中的节点数,p图中的连通分量数(图中的分量数是连通节点的最大集合)。因为所有的控制流图都是连通的,所以p是1。

  循环复杂性

  代码状态

  易测性

  维修费用

  1-10

  清晰且有条理

  高的

  低的

  11-20

  复杂的

  中间

  中间

  21-30

  非常复杂

  低的

  高的

  30

  难以理解的

  不可预知的

  非常高

  如何衡量一个程序的圈复杂度?

  ———————————————————————————————————————

  在Python中,mccabe包可以用来度量程序的圈复杂度。

  Mccabe可以用一个简单的命令行安装。

  pipinstallmccabe

  运行以下命令来检测test.py的圈复杂度

  python-mmccabe - min5test.py

  其中-min5表示允许的最小圈复杂度,输出大于5的圈复杂度,如下图所示:

  第一个输出的结果是一个91行的roundRobin函数,复杂度为7。5%.

  除了mccabe,市场上还有很多检测圈复杂度的工具。

  工具

  类型

  系统平台

  扫描语言

  PMD/方格风格

  免费

  Windows/Linux/Mac

  Java,JS

  OClint

  免费

  苹果个人计算机

  指挥官

  隐蔽性

  商业

  Windows/Linux/Mac

  C/C,Java,C#,OC/C,JS,Python,Ruby,PHP

  源监视器

  免费

  Windows操作系统

  C/C,C#,VB。NET,Java,Delphi,VB6,HTML

  反干扰措施(counter-counter measures的缩写)

  免费

  Windows操作系统

  JS、C/C、C#

  HFCCA

  免费

  Windows/Linux/Mac

  C/C,OC

  蜥蜴

  免费

  Windows/Linux/Mac

  C/C,Java,C#,JS,OC/C,Swift,Python,Ruby,TTCN-3,PHP,Scala,GDScript

  代码质量优化

  ———————————————————————————————————————

  将一个子程序的一部分提取到另一个子程序中,并不会降低整个程序的复杂度,只是将决策点移到了其他地方,但这样做可以降低你必须同时注意的复杂度水平。因为重点是减少你需要同时考虑的项目数量,所以降低给定程序的复杂性是有价值的。

  1.细化函数(以php为例,以下同):

  functiontest($number){

  如果($number

  {

  $ NUMBER=self:MIN _ NUMBER;

  }

  for($ I=0;$i

  //somecode

  }

  }

  您可以用以下模式替换它:

  functiontest($number){

  $ number=getMin($ number);

  for($ I=0;$i

  //somecode

  }

  }

  functiongetMin($number){

  如果($number

  return self:MIN _ NUMBER;

  }

  返回$number

  }

  2.替换算法(用另一个更清晰的算法替换复杂的算法):

  if($str==China){

  $result=中国人;

  }

  elseif($str==US){

  $ result= American

  }

  elseif($str==France){

  $ result= French

  }

  变成这样:

  $people=[

  中国=中国人民,

  “美国人”,

  法国=法国

  ];

  $ result=$ people[$ str];

  3.反向表达式(更改条件表达式顺序以简化复杂性):

  If((条件1,条件2)!1)条件{

  returntrue

  }

  否则{

  返回false;

  }

  变成这样:

  If(条件1!2)条件{

  返回false;

  }

  returntrue

  4.分解条件(分解复杂的条件表达式(if,else),提取成独立的函数):

  if(do _ some _ 1($ number) do _ some _ 2($ number)){

  $number=$number。$someStr1。$someStr2。123456789;

  }

  否则{

  $number=$number。$someStr3。$someStr4。123456789;

  }

  变成这样:

  if(do_some_fun($number)){

  $ number=do _ some _ fun 1($ number);

  }

  否则{

  $ number=do _ some _ fun 2($ number);

  }

  5.合并条件(将这些判断合并为一个条件式,并提取成独立函数):

  如果($x

  如果(10美元)返回0;

  如果($z!=0)返回0;

  变成这样:

  if(get_result($x,$y,$ z))返回0;

  6.移除控制标记(可以使用破裂和返回取代控制标记。):

  $ bool=false

  foreach($arrsas$arr){

  如果(!$bool){

  if($arr==1){

  某函数();

  $ bool=true

  }

  if($arr==2){

  某函数();

  $ bool=true

  }

  }

  }

  变成这样:

  foreach($arrsas$arr){

  if($arr==1$arr==2){

  某函数();

  }

  打破;

  }

  7.以多态取代条件式(将整个条件式的每个分支放进一个子类的重载方法中,然后将原始函数声明为抽象方法。由于服务器端编程语言(专业超文本预处理器的缩写)是弱类型语言,这里体现的有点模糊):

  开关(卡特彼勒){

  案例"鱼":

  吃鱼();

  案例“莫斯”:

  吃苔藓();

  }

  functioneatFish(){

  回声鲸鱼

  }

  functioneatMoss(){

  回声"鲸鱼大气";

  }

  变成这样:

  接口在{

  functioneatFish();

  functioneatMoss();

  }

  classWhaleimplementsEat{

  publicfunctioneatFish(){

  回声鲸鱼

  }

  publicfunctioneatMoss(){

  回声"鲸鱼大气";

  }

  }

  8.参数化方法(建立单一函数,以参数表达那些不同的值):

  $result=min(lastUsage(),100)* 0.03;

  if(lastUsage()100){

  $result=(min(lastUsage(),200)-100)* 0.05;

  }

  变成这样:

  $result=getMin(0,100)* 0.03;

  $result=getMin(100,200)* 0.03;

  functiongetMin($start,$end){

  if(lastUsage()$start){

  return(min(lastUsage(),$ end)-$ start);

  }

  返回0

  }

  9.明确函数取代参数(针对该参数的每一个可能值,建立一个独立函数):

  if($name==width){

  $宽度=$值

  }

  elseif($name==height){

  $ height=$ value

  }

  变成这样:

  functionsetWidth($value){

  $宽度=$值

  }

  functionsetHeight($value){

  $ height=$ value

  }

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: