数据结构与算法(flutter)之基础概念(一)

对于一个程序(或算法)性能的评估, 经常是从时间与空间两个维度来进行考虑。时间方面是指程序的运行时间, 称为"时间复杂度"。空间方面是程序在计算机内存所占的空间大小, 称为"空间复杂度"。

时间复杂度

我们可以就某个算法的执行步骤计数来衡量运行时间的标准,也是一科渐进表示法。一起来看一个例子,同样是两条指令:

css 复制代码
a= a+1与a=a+0.3/0.7*10005

由于涉及变量存储类型与表达式的复杂度,因此真正绝对精确的运行时间一定不相同。不过话又说回来,如此大费周章地精确计算程序的运行时间往往寸步难行,而且也亳无意义。因此用一种"估算"的方法来衡量程序或算法的运行时间反而更加怡当,这种估算的时间就是"时间复杂度"。详细定义如下:

在一个完全理想状态下的计算机中,我们定义 T(n)来表示程序执行所要花费的时间,其中n代表数据输入量。当然,程序的运行时间(Worse Case Executing Time)或最大运行时间是时间复杂度的衡量标准,一般以 Big-oh 表示。

分析算法的时间复杂度必须考虑它的成长比率 (Rate of Growth),往往是一种函数,时间复杂度也是一种"渐近表示法" (Asymptotic Notation)。

空间复杂度

所谓"空间复杂度",就是估算一个算法在运行过程中临时占用内存空间的大小,是一种渐进表示法。而这些所需要的内存空间通常可以分为 "固定空间内存"(包括基本程序代码、常数、变量等)与"变动空间内存"(随程序运行时而改变大小的使用空间,例如引用类型变量。由于计算机硬件发展日新月异以及计算机不同, 因此纯粹从程序(或算法)的性能角度来看, 应该以算法的运行时间为主要评估与分析的依据。

常见的Big-Oh

事实上,时间复杂度只是执行次数的一个概略的估算,并非真实的执行次数。Big-oh 是一种用来表示最坏运行时间的估算方式,也是最常用于描达时间复杂度的渐近式表示法。

Big-Oh 特色与说明
O(1) 称为常数时间 (constant time),表示算法的运行时间是一个常数倍数
O(n) 称为线性时间 (linear time),表示执行的时间会随着数据集合的大小而线性增长
O(log2n) 称为次线性时间 (sub-linear time),成长速度比线性时间慢,而比常数时间快
O(n2) 称为平方时间 (quadratic time),算法的运行时间会成二次方的增长
O(n3) 称为立方时间 (cubic time),算法的运行时间会成三次方的增长
O(2n) 称为指数时间 (exponential time),算法的运行时间会成2的口次方增长。例如解决非多项式问题 (Nonpolynomial Problem)算法的时间复杂度即为 O(2")
O(nlog2n) 称为线性乘对数时间,介于线性和二次方增长的中间模式
相关推荐
AI科技星2 分钟前
ELN 升级:π 级数自动生成器全域数理架构
大数据·人工智能·python·算法·金融
强盛机器学习~7 分钟前
2026年SCI一区新算法-傅里叶变换优化算法(FTO)-公式原理详解与性能测评 Matlab代码免费获取
算法·matlab·进化计算·群体智能·傅里叶变换·元启发式算法
王老师青少年编程10 分钟前
csp信奥赛C++高频考点专项训练之贪心算法 --【跳跃与过河问题】:过河问题
c++·算法·贪心·csp·信奥赛·跳跃与过河问题·过河问题
沉默-_-1 小时前
备战蓝桥杯-哈希
c++·学习·算法·蓝桥杯·哈希算法
拼好饭和她皆失1 小时前
基础算法--写给算法小白的模板指南:快速掌握核心代码,蓝桥杯必备模板
算法
吞下星星的少年·-·1 小时前
rotate函数应用模板
算法
AI科技星1 小时前
人类首张【全域数学公理体系】黑洞内部结构图—基于「0-1-∞」三元本源的全维深度解析
人工智能·算法·机器学习·数学建模·数据挖掘·量子计算
paeamecium1 小时前
【PAT甲级真题】- Recover the Smallest Number (30)
数据结构·算法·pat考试·pat
Dillon Dong1 小时前
【风电控制】变流器转矩控制回路深度解析:从指令生成到闭环控制
算法·变流器·风电控制
玛丽莲茼蒿1 小时前
Leetcode hot100 在排序数组中查找元素的第一个和最后一个位置【中等】
数据结构·算法