【计算理论】计算复杂性 ( 小 O 记号 | 严格渐进上界 | 分析算法的时间复杂度 )

简介: 【计算理论】计算复杂性 ( 小 O 记号 | 严格渐进上界 | 分析算法的时间复杂度 )

文章目录

一、小 O 记号 ( 严格渐进上界 )

二、分析算法的时间复杂度





一、小 O 记号 ( 严格渐进上界 )


如果 g ( n ) \rm g(n)g(n) 是 f ( n ) \rm f(n)f(n) 渐进上界 , 符号化表示为 f ( n ) = O ( g ( n ) ) \rm f(n) = O(g(n))f(n)=O(g(n)) ,


如果 f ( n ) \rm f(n)f(n) 除以 g ( n ) \rm g(n)g(n) , 求 n → ∞ n \to \inftyn→∞ 极限为 0 00 时 , 符号化表示为 l i m n → ∞ f ( n ) g ( n ) = 0 \rm lim_{n \to \infty} \cfrac{f(n)}{g(n)} = 0lim

n→∞


 

g(n)

f(n)


=0 ,


那么称 g ( n ) \rm g(n)g(n) 是 f ( n ) \rm f(n)f(n) 的 严格渐进上界 ;



严格渐进上界使用 小 o \rm oo 记号 表示 :


① n = o ( n ) \rm \sqrt{n} = o(n)

n


=o(n)


② n = o ( n   l o g   l o g   n ) \rm n = o(n\ log\ log \ n)n=o(n log log n)


③ n   l o g   l o g   n = o ( n   l o g   n ) \rm n\ log\ log \ n = o(n\ log \ n)n log log n=o(n log n)


④ n   l o g   n = o ( n 2 ) \rm n\ log \ n = o(n ^2)n log n=o(n

2

)


⑤ n 2 = o ( n 3 ) \rm n ^2 = o(n ^3)n

2

=o(n

3

)






二、分析算法的时间复杂度


构造图灵机认识如下语言 : A = { 0 k 1 k : k ≥ 0 } \rm A = \{ 0^k1^k : k \geq 0 \}A={0

k

1

k

:k≥0}


M 1 = \rm M_1 =M

1


= "在长度为 n \rm nn 的字符串 w \rm ww 上进行如下计算 :


① 扫描整个带子上的字符串 , 查看 0 00 和 1 11 的顺序 , 所有的 0 00 必须在所有的 1 11 前面 ; 如果顺序错误 , 进入拒绝状态 ;


② 扫描整个带子 , 遇到一个 0 00 , 就划掉一个 1 11 ; 如果带子上存在 0 00 和 1 11 , 该操作重复进行 ;


③ 如果最后只剩下 0 00 或只剩下 1 11 , 说明 两个数字的个数不等 , 进入拒绝状态 ; 如果最后带子上只剩下空白字符 , 说明两个数字个数相等 , 进入接受状态 ; "



分析上述算法的时间复杂度 :



字符串 w = " 0000 ⋯ 1111 ⋯ " \rm w = "0000 \cdots 1111 \cdots"w="0000⋯1111⋯" , 整个 字符串长度为 n \rm nn ;


① 首先从左向右扫描一遍字符串 , 如果 0 00 出现在 1 11 右边 , 说明字符串不符合条件 , 检查的字符个数最坏的情况就是遍历 n \rm nn 次 , 使用 大 O \rm OO 标记 为 : O ( n ) \rm O(n)O(n) ;


② 扫描带子 , 读取到一个 0 00 , 划掉一个 1 11 , 然后在掉过头来 , 读取到一个 0 00 , 划掉一个 1 11 ;


这是一个循环 , 计算循环复杂度 , 只需要考虑 每次循环花费的时间 , 和 循环次数 ;


循环的次数最坏情况是 n 2 \rm \cfrac{n}{2}

2

n


 , 还是 n \rm nn 的数量级 , 标记为 O ( n ) \rm O(n)O(n) ;


每次循环的花费时间步数 : 向右走 n 2 \rm \cfrac{n}{2}

2

n


 步 , 找到 1 11 字符 , 删除 1 11 字符后 , 然后再向左 n 2 \rm \cfrac{n}{2}

2

n


 步 回到第 0 00 个 , 大约是 n 2 \rm \cfrac{n}{2}

2

n


 步 , 数量级还是 n nn , 使用 大 O \rm OO 标记 为 : O ( n ) \rm O(n)O(n) ;


将上述 循环次数 和 每次循环步数 大 O \rm OO 标记 相乘 , 就是该阶段的 大 O \rm OO 标记 为 : O ( n ) × O ( n ) = O ( n 2 ) \rm O(n) \times O(n) = O(n^2)O(n)×O(n)=O(n

2

) ;



上述 ① 和 ② 总的 大 O \rm OO 标记 为 : O ( n ) + O ( n 2 ) = O ( n 2 ) \rm O(n) + O(n^2) = O(n^2)O(n)+O(n

2

)=O(n

2

)


目录
相关文章
|
1月前
|
机器学习/深度学习 人工智能 监控
AI算法分析,智慧城管AI智能识别系统源码
AI视频分析技术应用于智慧城管系统,通过监控摄像头实时识别违法行为,如违规摆摊、垃圾、违章停车等,实现非现场执法和预警。算法平台检测街面秩序(出店、游商、机动车、占道)和市容环境(垃圾、晾晒、垃圾桶、路面不洁、漂浮物、乱堆物料),助力及时处理问题,提升城市管理效率。
AI算法分析,智慧城管AI智能识别系统源码
|
1月前
|
算法
经典控制算法——PID算法原理分析及优化
这篇文章介绍了PID控制算法,这是一种广泛应用的控制策略,具有简单、鲁棒性强的特点。PID通过比例、积分和微分三个部分调整控制量,以减少系统误差。文章提到了在大学智能汽车竞赛中的应用,并详细解释了PID的基本原理和数学表达式。接着,讨论了数字PID的实现,包括位置式、增量式和步进式,以及它们各自的优缺点。最后,文章介绍了PID的优化方法,如积分饱和处理和微分项优化,以及串级PID在电机控制中的应用。整个内容旨在帮助读者理解PID控制的原理和实际运用。
89 1
|
1月前
|
机器学习/深度学习 存储 缓存
数据结构从入门到精通——算法的时间复杂度和空间复杂度
算法的时间复杂度和空间复杂度是评估算法性能的两个重要指标。时间复杂度主要关注算法执行过程中所需的时间随输入规模的变化情况,而空间复杂度则关注算法执行过程中所需的最大存储空间或内存空间。
71 0
|
1月前
|
算法 机器学习/深度学习 索引
【算法设计与分析】——搜索算法
【算法设计与分析】——搜索算法
40 1
|
1月前
|
算法 调度
【算法设计与分析】— —基础概念题(one)可作为日常联系或期末复习
【算法设计与分析】— —基础概念题(one)可作为日常联系或期末复习
47 1
|
1天前
|
机器学习/深度学习 数据采集 算法
共享单车需求量数据用CART决策树、随机森林以及XGBOOST算法登记分类及影响因素分析
共享单车需求量数据用CART决策树、随机森林以及XGBOOST算法登记分类及影响因素分析
|
2天前
|
移动开发 算法 数据可视化
数据分享|Spss Modeler关联规则Apriori模型、Carma算法分析超市顾客购买商品数据挖掘实例
数据分享|Spss Modeler关联规则Apriori模型、Carma算法分析超市顾客购买商品数据挖掘实例
|
3天前
|
算法 数据可视化 大数据
圆堆图circle packing算法可视化分析电商平台网红零食销量采集数据
圆堆图circle packing算法可视化分析电商平台网红零食销量采集数据
33 13
|
10天前
|
算法 数据可视化 Python
Python中LARS和Lasso回归之最小角算法Lars分析波士顿住房数据实例
Python中LARS和Lasso回归之最小角算法Lars分析波士顿住房数据实例
15 0
|
10天前
|
算法 定位技术 Windows
R语言最大流最小割定理和最短路径算法分析交通网络流量拥堵问题
R语言最大流最小割定理和最短路径算法分析交通网络流量拥堵问题
16 4