数据结构与算法(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) 称为线性乘对数时间,介于线性和二次方增长的中间模式
相关推荐
Wils0nEdwards2 小时前
Leetcode 独一无二的出现次数
算法·leetcode·职场和发展
Y.O.U..2 小时前
力扣HOT100——无重复字符的最长子字符串
数据结构·c++·算法·leetcode
CodeJourney.2 小时前
从PPT到DeepSeek开启信息可视化的全新之旅
数据库·人工智能·算法·excel·流程图
Ludicrouers4 小时前
【Leetcode-Hot100】和为k的子数组
算法·leetcode·职场和发展
巨可爱熊5 小时前
高并发内存池(定长内存池基础)
linux·运维·服务器·c++·算法
爱数模的小驴7 小时前
2025 年“认证杯”数学中国数学建模网络挑战赛 C题 化工厂生产流程的预测和控制
深度学习·算法·计算机视觉
序属秋秋秋8 小时前
算法基础_数据结构【单链表 + 双链表 + 栈 + 队列 + 单调栈 + 单调队列】
c语言·数据结构·c++·算法
apcipot_rain9 小时前
【密码学——基础理论与应用】李子臣编著 第五章 序列密码 课后习题
算法·密码学
不要不开心了9 小时前
sparkcore编程算子
pytorch·分布式·算法·pygame
88号技师9 小时前
【2024年最新IEEE Trans】模糊斜率熵Fuzzy Slope entropy及5种多尺度,应用于状态识别、故障诊断!
人工智能·算法·matlab·时序分析·故障诊断·信息熵·特征提取