本文转载自公众号“读芯术”(ID:AI_Discovery)。大O的精到最 首先,符号什么是和代代码效率?这个热门术语在各种会议、讲座和博客中已经被用滥了。码效它被广泛用于描述代码的率花力速度和可靠性,与软件的最少算法效率和运行时执行速度密切相关。在当下,产出这个人工智能、大O的精到最可扩展性和机器学习处于软件开发前沿的符号时代,这个话题始终被反复提及。和代 那么什么是码效大O符号呢?在计算机科学领域中,它是率花力用来描述算法的性能和效率以及分析整体性能的工具,被用于确定完成算法执行所需时间或空间的最少最坏情况。大O符号是产出基于性能来确定函数最佳实现的宝贵工具,它提供了一种正式的大O的精到最说法,用于讨论算法的运行时间如何根据输入而变化。 时间复杂度vs空间复杂度 大O符号用于度量时间复杂度和空间复杂度。 复杂度类型 时间复杂度可以分为几种不同的类型。下列是几种较常见类型: 图源:Colt Steele的JavaScript算法和数据结构大师班 有助于确定时空复杂度的一般规则 这些规则是可以起作用的方向,但不保证每次都有效果。 确定时间复杂度: 确定空间复杂度: 来看一些例子 图源:Colt Steele的JavaScript算法和数据结构大师班 至于空间复杂度,addUpToN有2个变量赋值(total和i)。当循环完成其操作时,这些变量会被重新分配,但无论输入数据集的大小如何,这些变量占用的空间都保持不变。空间复杂度将为常数阶/O(1)。 这里有3个简单的运算(乘、加、服务器托管除)。不管n的大小如何,操作的数量保持不变。addUpToNAgain的时间复杂度为常数阶/O(1)。 此时只会返回一个值。输入值不会改变分配给此函数的空间。因此,空间复杂度也是线性阶/O(1)。 在这里,有一个线性阶O(n)运算嵌套在另一个O(n)运算中。当输入的n值缩放时,运行时间随之发生变动。sumEachPair的时间复杂度是平方阶/O(n²)。 回顾一下前文所述的一般规则,这个案例正好对应了其中一条:引用类型一般是O(n),其所需的空间量与输入值直接相关。空间复杂度则为线性阶/O(n)。 想分析算法的性能,可以使用大O符号帮助分析,大O符号可以加深对算法的时间和空间要求的理解。 总之,程序员要理解好所编写的代码的时空复杂度,进而确保运行时间和执行速度达到最快,同时保证代码始终保持在其运行系统的实体存储范围内,“修炼”成一个高效的程序员。