数据结构和算法——2.算法复杂度

算法复杂度

算法分析

➢ 同一算法用不同语言实现,用不同编译器,或是在不同计算机上运行,效率均不同

➢ 使用绝对时间衡量算法效率不合适

基本操作重复执行的次数作为算法的时间度量

判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,而更应该关注主项(最高阶项)的阶数

算法复杂度的记法

➢ 定义:

• 在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析

T(n)随n的变化情况,并确定T(n)的数量级。

• 算法的时间复杂度,记作:T(n)=O(f(n))。表示随问题规模n的增大,算法执行时

间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。

• 其中f(n)是问题规模n的某个函数。

➢ 用大写O()来体现算法时间复杂度的记法,称之为大O记法。

➢ O(1)为常数阶,O(n)为线性阶,O(n^2)为平方阶。

算法的时间复杂度

  • 常数阶:只有执行次数的差异,跟问题规模n的取值无关,所以为O(1)时间复杂度
  • 线性阶:O(n)
  • 对数阶:O(logn)
  • 平方阶:O(n^2),O(mn)

EXAMPLE

  1. 嵌套循环
int i, j;
for (i = 0; i < n; i++) {
for (j = i; j < n; j++) { // 注意 j = i 而不是0
// 时间复杂度为O(1)的程序步骤序列
}
}

时间复杂度为O(n^2)

常见的算法时间复杂度

算法的空间复杂度

➢ 算法的空间复杂度通过计算算法所需的存储空间实现,记作S(n)=O(f(n)),

其中n为问题的规模,f(n)为语句关于n所占存储空间的函数。

• 可以理解为函数内局部变量的空间

➢ 若算法执行时所需的辅助空间相对于输入数据量而言是个常数,则称此算法的空间复杂度为O(1)。

posted @   Michael_Yeung  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示