首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

对复杂if-else代码优化方案

if-else可能是最高频代码关键字,毕竟,这也比较符合人们二维思考问题方式,试想大部分问题答案都是只有两个维度,要么true,要么false,那么通过if-else方式是再好不过了。...当然,if-else固然好,但是在代码中过多使用,或者反复嵌套使用,那样就不好了。 前几天看到了下面这张图,固然这张图比较夸张,但是也说明了,多重嵌套if-else不可取之处。 ?...1.2 用switch-case优化 鉴于if-else控制逻辑冗余性,如果if-else分支间不存在关联性,那么首先想到解决方案是通过switch-case。...那么只要我们后续添加类型都始终满足这个逻辑的话,我们就可以使用反射方式来优化这部分代码,使其符合开闭原则。...责任链模式链实际上是一个list对象,如果需要进入下一个嵌套,那么此处就不是写一个新if-else,而是将这个新if-else封装为一个对象,写在代码里面。

97220

算法时间复杂度

算法效率: 是指算法执行时间,算法执行时间需要通过算法编制程序在计算机上运行时所消耗时间来衡量。 一个算法优劣可以用空间复杂度时间复杂度来衡量。 时间复杂度:评估执行程序所需时间。...可以估算出程序对处理器使用程度。 空间复杂度:评估执行程序所需存储空间。可以估算出程序对计算机内存使用程度。...O(n)线性阶 线性阶主要分析循环结构运行情况,如下: for(let i = 0; i < n; i++){ // 时间复杂度O(1)算法 ... } 上面算法循环体中代码执行了...假设循环次数为x,则由2^x=n得出x=log₂n,因此得到这个算法时间复杂度为O(logn)。...O(n²)平方阶 平凡阶一般出现在嵌套循环中,如下: for(let i=0; i<n; i++){ for(let j=i; j<n; j++){ // 时间复杂度O(1)算法

1.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

为什么if-else会影响我代码复杂度

时间长了代码会越来越臃肿,因此这种情况下我推荐使用一些设计模式例如策略模式,责任链模式等去优化if语句带来问题,文中我发现使用规则引擎也能实现类似效果,因此介绍了怎么使用规则引擎Easy Rules去取代...if-else增加了代码复杂度 文章发布后,有很大一部分读者认为只用设计模式会增加代码阅读性,还是会觉得if-else好,就算if写得再复杂,也要使用if-else。...读者大部分不赞成使用设计模式原因是:if-else能看懂,设计模式可能会看不懂,觉得这是一个没有必要纠结。...这里我要阐明我一个观点: “我观点并不是说,我们在编码时不能使用if-else,而是说我们不应该简陋地用if-else去实现业务分支流程,因为这样随意代码堆砌很容易堆出一座座"屎山"。...” 当我们存在不同业务逻辑时,我们通常习惯使用if-else来实现这些不同逻辑,时间长了,代码就会难以维护。我相信大部分人写过下面类似的代码。

1.5K10

时间复杂度计算

所以为了让代码评估更加规范和科学,我们更多使用事前分析估计方法,即计算一个代码时间复杂度。...其实一段代码时间复杂度计算很容易,它是一种对计算次数统计,它有如下几条规则: 1.用常数1取代运算次数中所有的加法常数。 2.只保留最高阶项。...//执行1次 上面一段代码一共执行3次,但是时间复杂度是O(3)吗,按照规则1,上述代码时间复杂度应该是O(1)。...次 { printf("%d",i); //执行n次 } 上面一段代码一共执行2n+2次,按照大O阶方法: 2n+2——2n+1 2n+1——2n 2n——n 上述代码时间复杂度应该是...上述代码时间复杂度应该是 ? 最后给出常见执行次数函数与其对应时间复杂度: ? 常见时间复杂度排序: ?

1.2K80

时间复杂度计算

时间复杂度 方法: 1、按效率从高到低排列: 2、取最耗时部分 4个便利法则: 对于一个循环,假设循环时间复杂度为 O(n),循环次数为 m,则这个循环时间复杂度为 O(n×...\n"); // 循环时间复杂度为 O(1) }} 时间复杂度为:O(n×1) 对于多个循环,假设循环时间复杂度为 O(n),各个循环循环次数分别是a, b, c…...,则这个循环时间复杂度为 O(n×a×b×c…)。...\n"); // 循环时间复杂度为 O(1) } }} 时间复杂度为:O(1×n×n),即O(n²) 对于顺序执行语句或者算法,总时间复杂度等于其中最大时间复杂度...\n"); } } 时间复杂度为:O(n²) 对于条件判断语句,总时间复杂度等于其中时间复杂度最大路径 时间复杂度

81430

算法时间复杂度与空间复杂度

【C语言】时间复杂度与空间复杂度 算法效率 时间复杂度 空间复杂度 算法效率 算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。...因此衡量一个算法好坏,一般是从时间和空间两个维度来衡量,即时间复杂度和空间复杂度。...时间复杂度主要衡量一个算法运行快慢,而空间复杂度主要衡量一个算法运行所需要额外空间。 时间复杂度 时间复杂度定义:在计算机科学中,算法时间复杂度是一个函数,它定量描述了该算法运行时间。...一个算法所花费时间与其中语句执行次数成正比例,算法中基本操作执行次数,为算法时间复杂度。...空间复杂度不是程序占用了多少bytes空间,因为这个也没太大意义,所以空间复杂度是变量个数。 空间复杂度计算规则基本跟实践复杂度类似,也使用大O渐进表示法。

1K00

算法时间复杂度和空间复杂度

算法复杂度         算法复杂度就是用来衡量一个算法效率,一般由两个指标构成,时间复杂度和空间房租啊都。时间复杂度在乎算法运行快慢,空间复杂度衡量一个算法运行时所需要额外空间大小。...时间复杂度 概念         时间复杂度是一个函数,它用于定量描述一个算法运行时间,一个算法所消耗时间是不可以算出来,只有放到机器上才能得知,但是很麻烦。...时间复杂度是一个分析方法 ,用于分析一个算法运行相对时间,一个算法时间与其中语句执行次数成正比例,算法中基本操作执行次数,就是算法时间复杂度。        ...N^2 + 2* N + 10         那么它时间复杂度就是O(N ^ 2) 大O渐进表示法         大O是用于描述函数渐进行为数学符号。        ...空间复杂度         空间复杂度是用来衡量一个算法占用额外空间大小。这个与时间复杂度类似,也用大O渐进表示法。

9510

算法时间复杂度与空间复杂度

二、时间复杂度计算 表示方法 我们一般用“大O符号表示法”来表示时间复杂度:T(n) = O(f(n)) n是影响复杂度变化因子,f(n)是复杂度具体算法。...所以它时间复杂度其实是O(n); 对数阶O(logN) int i = 1; while(i < n) { i = i * 2; } 可以看到每次循环时候 i 都会乘2,那么总共循环次数就是...O(logn)代码循环N遍的话,那么它时间复杂度就是 n * O(logN),也就是O(nlogN)了。...n,后面虽然有循环,但没有再分配新空间,因此,这段代码空间复杂度主要看第一行即可,即 S(n) = O(n)。...可能有的开发者接触时间复杂度和空间复杂度优化不太多(尤其是客户端),但在服务端应用是比较广泛,在巨大并发量情况下,小部分时间复杂度或空间复杂度优化都能带来巨大性能提升,是非常有必要了解

1.5K10

递归算法时间复杂度

,第一层遍历时间复杂度是n,第二层遍历时间复杂度是n,内层时间复杂度是O(n^2),再加上递归,最后时间复杂度是O(2^n*n^2),这个算法可见很粗糙,假如递归深度到是100,最后执行效率简直会让人头皮发麻...第一层遍历时间复杂度是O(n),加上递归,最后时间复杂度是O(2^n*n),不算太理想,最起码比第一次好点。 再看看一个面试常见题目,斐波拉契数列,n=1,1,3,5,8,13......(n-2) 这个算法时间复杂度是O(2^n),关于时间复杂度具体看调用次数便能明白。...O(1),这样这个算法时间复杂度就是O(n)。...递归算法优化大概就是避免重复运算,将中金状态保存起来,以便下次使用,从结构上来看,是将时间复杂度转换为空间复杂度来解决。

2.2K20

算法中时间复杂度

比如说对于一个功能,可以实现方法很多种,我们在实现过程中选择效率最佳方式来实现,它影响了我们在一定场景下选择数据结构和算法,比如何时选择使用ArrayList,何时用LinkedList。...时间复杂度常用大O符号表述。 时间复杂度可被称为是渐近,即考察输入值大小趋近无穷时情况。...渐进时间复杂度 为便于计算时间复杂度,通常会估计算法操作单元数量,每个单元运行时间都是相同。因此,总运行时间和算法操作单元数量最多相差一个常量系数。...+n和 $sum=0 for($i=1;$i<=$n;$i++){ $sum+=$i } 可以看到循环了n次,所以时间复杂度就是O(n) 常数阶 O(1) function test($n){...n次,所以时间复杂度为O(n^2) 立方阶 与上面类似,就是 三个 for 循环 对数阶:O(log2n) while($n>=1){ $n=$n/2; } 即不断除以2, n

1.2K10

算法时间复杂度计算

:T(n)=O(f(n)).它表示随着问题规模n增大,算法执行时间增长率和f(n)增长率相同,称作算法渐近时间复杂度,简称时间复杂度.其中f(n)是问题规模n某个函数....简单来说T(n)代表时间频度:一个算法中语句执行次数称为时间频度 时间复杂度就是:算法时间复杂度描述是T(n)变化规律,计作:T(n) = O(f(n))。...n大小无关 根据推导大O阶方法,常数项3改为1,即时间复杂度为O(1) 对于分支结构(不含循环结构),无论真或假,执行次数都是恒定 不会随着n变大而发生变化,其时间复杂度也是O(1) 四...、线性阶 for(let i=0;i<n;i++){ /* 这里是时间复杂度为O(1)程序步骤序列*/ } 关键就是要分析循环结构运行情况 上面这是一个for循环,那么它时间复杂度又是多少呢...首先循环体就是一个执行一次循环体,总共执行了n次,那么执行次数就是f(n) =n,启动我们游戏攻略三部曲知道,时间复杂度就是为O(n).

1.2K10

理解算法时间复杂度

空间和时间复杂度是算法测量尺度。我们根据它们空间(内存量)和时间复杂度(操作次数)来对算法进行比较。...算法在执行时使用计算机内存总量是该算法空间复杂度(为了使本文更简短一些我们不会讨论空间复杂度)。因此,时间复杂度是算法为完成其任务而执行操作次数(考虑到每个操作花费相同时间)。...在时间复杂度方面,以较少操作次数执行任务算法被认为是有效算法。但是空间和时间复杂性也受操作系统、硬件等因素影响,不过现在不考虑它们。...现在让我们计算它执行操作次数。这里答案是10(因为它比较了数组每个元素)。因此线性搜索使用十个操作来查找给定元素(这是使用线性搜索算法时对此数组最大操作数,这也被称为最坏情况。...资料来源:Techtud 从图中可以清楚地看出,线性搜索时间复杂度增长速度比二分搜索快得多。 当我们分析算法时,一般使用 Big O 表示法来表示其时间复杂度

1.1K30

算法时间复杂度和空间复杂度计算

所以这段代码时间复杂度为O(n^2)。 总结:如果有三个这样嵌套循环就是n^3。所以总结得出,循环时间复杂度等于循环复杂度乘以该循环运行次数。...于是由2^x = n得到x = log(2)n,所以这个循环时间复杂度为O(logn)。...function函数时间复杂度是O(1),所以整体时间复杂度就是循环次数O(n)。...:function内部循环次数随count增加(接近n)而减少,所以根据游戏攻略算法时间复杂度为O(n^2)。...“渐进表示法”,这些所需要内存空间通常分为“固定空间内存”(包括基本程序代码、常数、变量等)和“变动空间内存”(随程序运行时而改变大小使用空间) 通常,我们都是用“时间复杂度”来指运行时间需求,是用

1.6K20

算法时间复杂度和空间复杂度-总结

(3)求解算法时间复杂度具体步骤是:   ⑴ 找出算法中基本语句;   算法中执行次数最多那条语句就是基本语句,通常是最内层循环循环体。   ...如果算法中包含嵌套循环,则基本语句通常是最内层循环体,如果算法中包含并列循环,则将并列循环时间复杂度相加。...Ο(n),第二个for循环时间复杂度为Ο(n2),则整个算法时间复杂度为Ο(n+n2)=Ο(n2)。   ...O(1)时间 (4).对于循环结构,循环语句运行时间主要体现在多次迭代中执行循环体以及检验循环条件时间耗费,一般可用大O下”乘法法则” 乘法法则: 是指若算法2个部分时间复杂度分别为 T1(n)=...一般情况下,对步进循环语句只需考虑循环体中语句执行次数,忽略该语句中步长加1、终值判别、控制转移等成分,当有若干个循环语句时,算法时间复杂度是由嵌套层数最多循环语句中最内层语句频度f(n)决定

1.3K20

算法时间复杂度和空间复杂度笔记

第一个for循环时间复杂度为Ο(n),第二个for循环时间复杂度为Ο(n2),则整个算法时间复杂度为Ο(n+n2)=Ο(n^2)。...1)时间 (4).对于循环结构,循环语句运行时间主要体现在多次迭代中执行循环体以及检验循环条件时间耗费,一般可用大O下"乘法法则" 乘法法则: 是指若算法2个部分时间复杂度分别为 T1(n)=...此类算法时间复杂度是O(1)。...一般情况下,对步进循环语句只需考虑循环体中语句执行次数,忽略该语句中步长加1、终值判别、控制转移等成分,当有若干个循环语句时,算法时间复杂度是由嵌套层数最多循环语句中最内层语句频度f(n)决定...O(n) 与上方雷同,较简单,忽略 O(n^3) 与上方雷同,较简单,忽略 常用算法时间复杂度和空间复杂度 ?

1.1K10

数据结构算法时间复杂度_数据结构中排序时间复杂度

大家好,我是架构君,一个会写代码吟诗架构师。今天说一说数据结构算法时间复杂度_数据结构中排序时间复杂度,希望能够帮助大家进步!!!...算法时间复杂度,也就是算法时间量度,记作:T(n}=0(f(n))。它表示随问题规模n增大,算法执行时间埔长率和 f(n)埔长率相同,称作算法渐近时间复杂度,简称为时间复杂度。...其中f( n)是问题规横n某个函数。 根据定义,求解算法时间复杂度具体步骤是: 找出算法中基本语句   算法中执行次数最多那条语句就是基本语句,通常是最内层循环循环体。...i += 2; } } 设for循环语句执行次数为T(n),则 i = 2T(n) + 1 <= n - 1, 即T(n) <= n/2 - 1 = O(n) 四 分析下列时间复杂度 void...故此上述算法时间复杂度递归关系如下: 常用排序算法时间复杂度

80310

算法—算法时间空间复杂度

事后分析法 缺点:不同数据规模,不同机器下算法运行时间不同,无法做到计算运行时间 2....事前分析法 2.1 大O时间复杂度 渐进时间复杂度 随着n增长,程序运行时间跟随n变化趋势 2.1.1 几个原则 去掉常数项 2(n^2) =n^2 一段代码取时间复杂度最高 test(n) {...= 0; i < n ; i++){ print(n); } } //时间复杂度n for(int i = 0; i < n ; i++){ print(n); } } 这段代码时间复杂度为...test(n) { int i = 1; while (i <= n) { i = 2 * i; } } 随着循环次数增加,i值变化如下 根据对数函数公式 2i次方等于n,...i等于log2n 2.2 最好情况时间复杂度 数据比较有序情况时间复杂度 2.3 最坏情况时间复杂度 数据完全无序 3.

1.1K00

递归时间复杂度(Master 公式)

递归在较难理解同时,其算法复杂度也不是很方便计算。而为了较为简便地评估递归算法复杂度,Master公式。Master公式含义T(N):表示当输入规模为 N 时,算法所需时间复杂度。...例如,在归并排序中,a 值为 2,因为每次递归调用会将问题分为两个子问题。T(N/b):表示每个子问题时间复杂度。b 是问题规模减小因子,即每次递归调用时,问题规模都会减少到原来 1/b。...例如,在归并排序中,每次递归调用都会处理数组一半,所以 b 值为 2。O(N^d):表示除了递归调用之外,算法在每次递归步骤中所做额外工作时间复杂度。...O(N^d) 是除了递归调用之外时间开销上界。d 是一个常数,表示额外工作时间复杂度与 N 关系。...,这样子的话不符合相同规模划分,就不能使用 Master 公式来计算时间复杂度

14210

排序算法时间复杂度下界

《算法导论》中有一节讲的是“(比较)排序算法时间下界”,本文将论述同一个问题,思路略有差异。本文将从信息熵角度论述排序算法时间复杂度下界。若本文论述过程中有错误或是不足,还请各位指正。...(比较)排序算法时间下界对被排序序列和排序方法做了以下限制 没有关于被排序序列先验信息,譬如序列内数据分布、范围等,即认为序列内元素在一个开区间内均匀分布。同时,序列内元素互异。...排序过程是输入序列位置调整过程,一旦给定输入序列和算法,那么这个调整过程是确定,也就是说,结合排序算法和输出有序序列,可以知道输入序列排列方式。...(比较)排序算法算法时间复杂度等价为确定输入序列排列方式需要多少次比较操作。 2 . 信息熵 香农对信息定义是事物运动状态和存在方式不确定性描述。事件 ?...,因此获得信息量是(单位:比特) ? 因此最少需要 ? 次比较才能够解决这一问题。对应(比较)排序算法时间下界为 ? 。由于 ? ,因此 ? 3.

1.1K30
领券