首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏云云众生s

    降低认知复杂度5个整洁代码技巧

    降低认知复杂度是帮助您编写安全、可维护和可靠代码的关键,这将使开发人员(包括您自己)更快乐。 译自 5 Clean Code Tips for Reducing Cognitive Complexity,作者 John Clifton。 了解每个组件带来的认知复杂度将帮助你走上正确的道路。 4. 有用的东西不会增加复杂度 存在许多结构可以使代码更清晰、更容易理解。 switch 语句是一种很好的方法,可以帮助消除一系列嵌套的 if 或 if/else 语句,这些语句使代码变得模糊不清,并且不会增加代码的认知复杂度。 帮助你跳出循环的 continue 或 break 语句也可以帮助你编写更清晰的代码,并且同样不会增加复杂度。这些只是可以帮助降低认知复杂度的不同类型结构中的一部分。 5.

    43010编辑于 2024-07-08
  • 来自专栏掘金安东尼

    5 分钟了解下【圈复杂度】是如何计算的?

    此图中,E = 9, N = 8, P = 1,因该程序圈复杂度为 9 - 8 + (2*1) = 3 ; 边的个数和节点的个数很好理解,但: 什么是 连通分量? 注意:圈复杂度计算中,计算变量是连通分量,而不是强连通分量! 判定法 上面通过公式来计算圈复杂度,似乎有点太过麻烦,计算边、节点、连通分量,都要费不少劲! 有没有更加粗暴简单的方法呢? 判定法用于简单程序的圈复杂度计算还是很有效果的; 需要注意的是:对于多分支的 case 结构或多个 if - else 结构,必须统计全部实际的判定条件数; ---- 圈复杂度是评判代码优劣的标准之一, 通常来说,圈复杂度不要大于 5 ,否则代码将会被判定为 不易读! 降低圈复杂度大致有如下方法: 简化、合并条件表达式 将条件判定提炼出独立函数 将大函数拆成小函数 以明确函数取代参数 替换算法 从先计算后降低圈复杂度的角度来优化代码,使代码更加易读、易扩展、易维护,这就叫

    3.5K00编辑于 2022-09-19
  • 来自专栏C++/Linux

    【时间复杂度空间复杂度

    时间复杂度 2.1 时间复杂度的概念 2.2 大O的渐进表示法 2.3 常见时间复杂度计算举例 3. 空间复杂度 4. 常见复杂度对比 5. 实例4基本操作执行最好1次,最坏N次,时间复杂度一般看最坏,时间复杂度为 O(N). 实例5: // 计算BubbleSort的时间复杂度? exchange = 1; } } if (exchange == 0) break; } } 实例5基本操作执行最好 常见复杂度对比 一般算法常见的复杂度如下: 5201314 O(1) 常数阶 3n+4 O(n) 线性阶 3n^2+4n+5 O(n^2) 平方阶 3log(2)n+4 O(logn) 对数阶 2n+3nlog (2)n+14 O(nlogn) nlogn阶 n3+2n2+4n+6 O(n^3) 立方阶 2^n O(2^n) 指数阶 5.

    2K00编辑于 2023-03-28
  • 来自专栏萌新的日常

    时间复杂度与空间复杂度

    一、时间复杂度 1.概念 即时间复杂度计算的是执行次数 2.大O的渐进表示法 1.用常数1取代时间中的所有加法常数 2.在修改后的运行次数函数中,只保留最高项 3.如果最高项存在而且不是1,则去除与这个项目相乘的常数 N:factorial(N-1)*N; } 假设为3时得递归展开图 可以看出当N为3时 ,一共递归了3次,每次递归函数调用一次 即时间复杂度为O(N) 二、空间复杂度 1.概念 即创建变量的个数 2.用法 void bubblesort(int *a,int n)//冒泡排序 的bubblesort的空间复杂度 { assert(a); for(size_t end=n;end>0;end { swap(&a[i-1],&a[i]); exchange=1; } } if(exchange==0) break; } } 这里的空间复杂度为 ++) { fibary[i]=fibary[i-1]+fibary[i-2]; } return fibary; } 这道题因为malloc动态开辟了n+1个空间 所以空间复杂度

    54221编辑于 2022-11-10
  • 来自专栏牛人NR

    时间复杂度与空间复杂度

    它表示随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度,其中f(n)是问题规模n的某个函数。 5.常数阶 一般不涉及循环操作的都是常数阶,因为它不会随着n的增长而增加操作次数。 函数调用的时间复杂度分析 之前,我们分析的都是单个函数内,算法代码的时间复杂度,接下来我们分析函数调用过程中时间复杂度。 我么可以用算法的空间复杂度来描述算法对内存的占用。 由于现在的计算机设备内存一般都比较大,基本上个人计算机都是4G起步,大的可以达到32G,所以内存占用一般情况下并不是我们算法的瓶颈,普通情况下直接说复杂度,默认为算法的时间复杂度

    88120发布于 2020-09-01
  • 来自专栏LittlePanger的代码之路

    时间复杂度与空间复杂度

    时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。 空间维度:是指执行当前算法需要占用多少内存空间,我们通常用「空间复杂度」来描述。 记作 T(n)= O( f(n) ),称O( f(n) ) 为算法的渐进时间复杂度,简称时间复杂度。 T(n) 不同,但时间复杂度可能相同。 阶乘阶 旅行商问题 说明:常见的时间复杂度有小到大依次排序,随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低 1. 5. 立方阶 O(n^3) 3次n循环 7. k 次方阶 O(n^k) k次n循环 3 空间复杂度 类似于时间复杂度的讨论,一个算法的空间复杂度(Space Complexity)定义为该算法所耗费的存储空间

    1.1K30发布于 2020-04-14
  • 来自专栏SRE运维实践

    漫谈时间复杂度空间复杂度

    O(N**N);第二种是空间复杂度为O(1)。 空间复杂度,就是运行一次的过程中,占用的存储空间的大小度量,例如在进行一个list操作的时候,那么空间复杂度为O(1),当在进行修改删除操作的时候,可能需要新建一个新的存储空间来存储新的队列,从而空间复杂度为 空间复杂度和时间复杂度,可以作为选择数据类型的评判标准之一。 对于一种数据结构来说,有各种各样的时间复杂度,对于python的list实现,当你查询一个元素的时候,时间复杂度是O(1),常量时间;但是当你进行加入元素,删除元素的时候,时间复杂度是O(N),对于特例在尾部增加和删除的操作来说 ,时间复杂度又是O(1)。

    90830发布于 2019-07-08
  • 来自专栏程序猿杂货铺

    时间复杂度和空间复杂度

    算法的时间复杂度,也就是算法的时间量度,基座T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进算法时间复杂度,简称为时间复杂度。 所以我们可以总结得出,循环的时间复杂度等于循环体的复杂度乘以该循环运行的次数。 那么下面这个循环嵌套,它的时间复杂度是多少呢? 04 常见的时间复杂度总结 执行次数函数 阶 术语描述 12 O(1) 常数阶 2n+3 O(n) 线性阶 3n2+2n+1 O(n2) 平方阶 5log2n+20 O(log2n) 对数阶 2n+3nlog2n 比如直接插入排序的时间复杂度是O(n^2),空间复杂度是O(1) 。而一般的递归算法就要有O(n)的空间复杂度了,因为每次递归都要存储返回信息。 当不用限定词地使用"复杂度'时,通常都是指时间复杂度

    1.4K60发布于 2019-09-04
  • 来自专栏码农编程进阶笔记

    我有 5种接口流量监控方案,5种!性能、成本、复杂度全面对比

                // 增加当前时间片的计数             // 环形数组索引 = 时间片索引 % 窗口数量             // 这里是关键:通过取模运算使得数组索引在0-5间循环 清理长时间未使用的计数器,避免内存泄漏     private void cleanupIdleCounters() {         finallong IDLE_THRESHOLD_MS = ; // 5分钟无调用则清理 entry.getValue();             if (now - counterEntry.lastUpdateTime > IDLE_THRESHOLD_MS) {                 // 如果5分钟未更新 查询接口95分位延迟 histogram_quantile(0.95, sum(rate(api_latency_seconds_bucket{name="UserService.getUser"}[5m ])) by (le)) # 按状态码统计接口调用 sum(rate(api_calls_total{name="UserService.getUser"}[5m])) by (status) 五种方案的数据流架构对比

    51310编辑于 2025-06-12
  • 时间复杂度和空间复杂度

    要比较n2次才行,复杂度O(n2) 总结:稳定的排序方法,时间复杂度O(n^2),空间复杂度O(1),当待排序列有序时,效果比较好。 随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。 2、空间复杂度 与时间复杂度类似,空间复杂度是指算法在计算机内执行时所需存储空间的度量。 讨论方法与时间复杂度类似,不再赘述。 (3)渐进时间复杂度评价算法时间性能   主要用算法时间复杂度的数量级(即算法的渐近时间复杂度)评价一个算法的时间性能。 (5) 如当一个算法的空间复杂度为一个常量,即不随被处理数据量n的大小而改变时,可表示为O(1);当 一个算法的空间复杂度与以2为底的n的对数成正比时,可表示为0(10g2n);当一个算法的空I司复杂度与 (6) 下面如图是常见的算法的时间复杂度和空间复杂度:

    26910编辑于 2025-08-29
  • 来自专栏韩曙亮的移动开发专栏

    【算法】复杂度理论 ( 时间复杂度 )

    文章目录 一、复杂度理论 二、时间复杂度 1、P 与 NP 问题 2、O 表示的复杂度情况 3、时间复杂度取值规则 4、时间复杂度对比 一、复杂度理论 ---- 时间复杂度 : 描述一个算法执行的大概效率 使用 蛮力算法 , 编程复杂度很低 , 很容易看懂 , 但是其时间复杂度是 O(m \times n) ; 如果使用 Rabin-Karp 算法 , 时间复杂度是 O(m + n) , 但是编程复杂度很高 , 也是很难理解的 ; 一般 蛮力算法 时间复杂度 很高 , 但是 编程复杂度 和 思维复杂度 很低 , 代码容易理解 ; 如果对 时间复杂度 要求很高 , 如必须达到 O(n) 或 O(n^ 等 ; 2、O 表示的复杂度情况 O 表示算法在 最坏的情况下的时间复杂度 ; 一般情况下 , 算法的时间复杂度都以最坏情况的时间复杂度为准 ; 但是也有特例 , 快速排序的最坏情况下 , 时间复杂度是 O(n^2) , 这个时间复杂度几乎不会遇到 , 一般情况下描述快速排序的时间复杂度时 , 使用 平均时间复杂度 O(n \log n) ; 3、时间复杂度取值规则 只考虑最高次项 : 时间复杂度描述中

    1.8K20编辑于 2023-03-29
  • 来自专栏程序架道

    软件只有两种复杂度:本质复杂度&偶然复杂度

    图自网络 我们知道软件设计的本质是持续对抗软件本身产生的复杂度。 题目中的两种复杂度名称,最早来源自哪里呢? 在《人月神话》这本书中,作者将软件复杂度分为本质复杂度(Essential Complexity)和偶然复杂度(Accidental Complexity)。 这两种复杂度应该怎么理解呢? 技术而引入的复杂度,为偶然复杂度。 我们继续分别对本质复杂度和偶然复杂度列举两个更详细的案例。 本质复杂度案例:大型电商平台的实时交易系统 图自网络仅示例 考虑一个大型的电商平台,如淘宝或京东,在高峰时段每秒处理数千甚至数万笔交易。 与本质复杂度相比,偶然复杂度更多地是由于技术选择、系统设计和实现过程中的决策所引起的。通过合理的架构设计、模块化和抽象化等方法,可以降低这种偶然复杂度,提高系统的可维护性和可扩展性。

    1.6K10编辑于 2023-12-10
  • 来自专栏c语言

    了解时间复杂度和空间复杂度

    在学习数据结构前,我们需要了解时间复杂度和空间复杂度的概念,这能够帮助我们了解数据结构。 算法效率分为时间效率和空间效率 时间复杂度 一个算法的复杂度与其执行的次数成正比。 举例: 冒泡排序的时间复杂度 从这个例子我们知道了,不是一层循环时间复杂度就是N,两层就是N^2要看具体算法实现。 二分法时间复杂度分析: 阶乘递归的时间复杂度 空间复杂度 对临时储存空间占用大小的量度。计算的是变量的个数。 首先来看冒泡排序的时间复杂度 循环走了N次,重复利用的是一个空间。 斐波那契数列的空间复杂度: 阶乘的时间复杂度: 算法题 消失的数字 面试题 17.04. 这种方法的时间复杂度是N*lgN 思路2: 把0到N加起来,再减去各个数字,得到的数字就是消失的数字。这里的时间复杂度是O(N)。如果先累加,时间复杂度是0(N),依次遍历一遍为O(N)。

    23810编辑于 2024-05-04
  • 来自专栏全栈程序员必看

    时间复杂度和空间复杂度详解

    随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。 (3)最坏时间复杂度和平均时间复杂度  最坏情况下的时间复杂度称最坏时间复杂度。 for(j=1;j<=i;j++) for(k=1;k<=j;k++) x++;    该程序段中频度最大的语句是(5) ,内循环的执行次数虽然与问题规模n没有直接关系,但是却与外层循环的变量取值有关,而最外层循环的次数直接与n有关,因此可以从内层循环向外层分析语句(5)的执行次数: 则该程序段的时间复杂度为T(n)=O (5)时间复杂度评价性能 有两个算法A 1和A 2求解同一问题,时间复杂度分别是T 1(n)=100n 2,T 2(n)=5n 3。 (2)随着问题规模n的增大,两个算法的时间开销之比5n 3/100n 2=n/20亦随着增大。即当问题规模较大时,算法A 1比算法A 2要有效地多。

    1.7K10编辑于 2022-07-15
  • 来自专栏基础知识文章

    时间复杂度与空间复杂度总结

    1 int x=1; 2 while (x <10) 3 { 4 x++; 5 } 该算法执行次数是10,是一个常数,用时间复杂度表示是O(1)。 1 for (i = 0; i < n; i++) 2 { 3 for (j = 0; j < n; j++) 4 { 5 ; 6 =1) 3 { 4 i++; 5 } 在此循环,如果arr[i]不等于1的话,时间复杂度是O(n)。如果arr[i]等于1的话,则循环不能执行,时间复杂度是0。 ,) 2 { 3 int k=10; 4 if(n==k) 5 return n; 6 else 7 return fun(++n); 8 } 递归实现,调用fun函数,每次都创建1个变量k。 调用n次,空间复杂度O(n*1)=O(n)。 时间复杂度与空间复杂度总结: ?

    89520发布于 2020-08-27
  • 来自专栏C / C++

    【数据结构】详解算法复杂度:时间复杂度和空间复杂度

    三、复杂度:时间复杂度和空间复杂度 (一)时间复杂度 1、时间复杂度的定义 在计算机科学中,算法的时间复杂度是用一个函数式T(N)来表示的,T(N)可以定量描述算法运行时间。 示例(5) 要求:计算BubbleSort的时间复杂度—— void BubbleSort(int* a, int n) { assert(a); for (size_t end = n; end Swap(&a[i - 1], &a[i]); exchange = 1; } } if (exchange == 0) break; } } 示例(6) 要求:计算Func5的时间复杂度 —— void func5(int n) { int cnt = 1; while (cnt < n) { cnt *= 2; } } 注意对数的三种表示: 当n接近无穷大的时候,底数的大小对结果影响不大 我们来看看—— k和numsSize的范围都是到10^5,嵌套循环 k * numsSize即n*n,所以时间复杂度是O(n*2),空间复杂度是O(1),只有一个变量。

    39410编辑于 2025-11-12
  • 来自专栏Yui编程知识

    解析时间复杂度和空间复杂度

    时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。在计算机发展的早期,计算机的存储容量很小。而对空间复杂度很是在乎。 所以我们如今已经不早特别需要关注一个程序的空间复杂度。 2.时间复杂度 2.1 时间复杂度的概念 时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量的描述了该算法的运行时间。 练习5 void bubblesort(int* a,int n) { assert(a); for(int i = 0;i<n-1;++i) { int flag = 0; for(int 3.空间复杂度 空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用存储空间大小的量度。 空间复杂度不是程序占用了多少Bytes的字节,因为计算这个没什么意义,所以空间复杂度算的变量个数。 空间复杂度的计算规则和时间复杂度类型,也使用大O的渐近表示法。

    35110编辑于 2024-10-16
  • 来自专栏C/C++、数据结构、算法

    DS:时间复杂度和空间复杂度

    二、时间复杂度 2.1 时间复杂度的概念 在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。 空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟实践复杂度类似,也使用大O渐进表示法。 四、常见的复杂度对比 五、时间复杂度和空间复杂度例题 特点:时间一去不复返,但是空间可以重复利用!! // 计算Func3的时间复杂度? 的复杂度 // 计算阶乘递归Fac的时间复杂度? 、确定被查找的范围 2、确定被查找范围的左右下标 3、根据左右下标确定中间元素的下标 4、找到中间元素和要找的元素比较 情况1:找到了,就结束 情况2:找不到,根据大小关系,确定新的查找范围(折半) 5

    52510编辑于 2024-02-17
  • 来自专栏前端Up Up!

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

    一、说明 时间复杂度和空间复杂度是用来评价算法效率高低的2个标准,身为开发者肯定会经常会听到这2个概念,但它们分别是什么意思呢? 二、时间复杂度的计算 表示方法 我们一般用“大O符号表示法”来表示时间复杂度:T(n) = O(f(n)) n是影响复杂度变化的因子,f(n)是复杂度具体的算法。 三、空间复杂度计算 空间复杂度 O(1) 如果算法执行所需要的临时空间不随着某个变量n的大小而变化,即此算法空间复杂度为一个常量,可表示为 O(1)。 四、总结 评价一个算法的效率主要是看它的时间复杂度和空间复杂度情况。 可能有的开发者接触时间复杂度和空间复杂度的优化不太多(尤其是客户端),但在服务端的应用是比较广泛的,在巨大并发量的情况下,小部分时间复杂度或空间复杂度上的优化都能带来巨大的性能提升,是非常有必要了解的。

    2.2K10发布于 2021-02-28
  • 来自专栏python3

    算法分类 ,时间复杂度 ,空间复杂度,优

    前言: 算法的复杂度分为时间复杂度与空间复杂度,时间复杂度指执行算法需要需要的计算工作量,空间复杂度值执行算法需要的内存量,可能在运行一些小数据的时候,大家体会不到算法的时间与空间带来的体验. # # if __name__ == '__main__': # alist = [12,34,56,78,90,87,65,43,21] # # alist = [1,2,3,4,5,6,7,8,9 时间复杂度,空间复杂度     接下来就要来说说时间复杂度与空间复杂度: 时间复杂度就是假如你 泡茶,从开始泡,到你喝完茶,一共用了多长时间,你中间要执行很多步骤,取茶叶,烧水,上厕所,接电话,这些都是要花时间的 空间复杂度(space complexity) ,执行时所需要占的储存空间,记做 s(n)=O(f(n)),其中n是为算法的大小, 空间复杂度 绝对是效率的杀手,曾经看过一遍用插入算法的代码,来解释空间复杂度的 , 觉得特别厉害,我就比较low了,只能给大家简单的总结一下我遇到的空间复杂度了,   一般来说,算法的空间复杂度值得是辅助空间,比如:一组数字,时间复杂度O(n),二维数组a[n][m]   :那么他的空间复杂度就是

    89730发布于 2020-01-19
领券