算法系统学习-xdm,时间复杂度到底是个啥?

简介: 该系列是基于有一定语言基础(C,C++,Java等等)和基本的数据结构基础进行的算法学习专栏,如果觉得有点吃力 😥 ,建议先了解前提知识再学习喔!本个专栏会将用更容易理解的表达去学习算法,如果在一些表述上存在问题还请各位多多指点

算法分析和评价:


在不考虑机器对算法的影响,我们对一个算法主要从时间效率和空间效率两个维度上考虑。

在算法完成功能的前提下,最好是占用的空间少而且执行时间短,事实上,两全其美的算法是不容易设计的,多数的情况是占用空间多时数据处理的步骤就少,反之占用空间少的数据处理的步骤多。

(所以经常会听到空间换时间,时间换空间的说法,包括一些语言执行上也是有这种特性,对反应的速度要求高的更多倾向于接近底层系统的繁重语言例如C,而响应速度没那么高,就选择更加简洁的语言编写)


算法的时间复杂性:


简单理解是就是执行完该算法所用的时间,一般用bigO表示,它是数量级Order的第一个字母。一个算法转换程序后所耗费的时间,主要取决与算法中执行重复执行的次数,即与语句中的频度有关(下面有详细介绍)

(这是学习算法的核心,也是无法绕开的一个问题。)


与算法执行时间相关因素:


  1. 问题中数据存储的数据结构
  2. 采用的数学模型
  3. 设计的策略
  4. 问题的规模
  5. 实现算法的设计语言
  6. 编译算法产生的机器代码的质量
  7. 计算机执行指令的速度


算法时间衡量方法:


  1. 事后分析法:指的是将算法用程序实现后,直接执行,看执行时间。缺点很明显:不同算法下时间浮动大,不够准确,工作效率低,也与我们做的算法分析的目的违背的(因此很少用,除非已经到了无可奈何的情况下)
  2. 事前分析估算法:一个特定的算法“运行工作量”的大小,只依赖与问题的规模(一般用n表示)。算法的时间效率是问题规模的函数,随着问题的规模n的增长,算法执行,时间的增长率和函数f(n)的增长相同:

网络异常,图片无法展示
|

T(n)就是我们常说的时间复杂度,O是数量级的符。


算法执行时间与原操作执行次数之和成正比


频度:其实就是该语句执行的重复的次数。例如:

for(j =1 ;j<=n;j=j+1){
  for(k=1;k<n;k=k+1){
        x=x+1;
    }
}
k=k+1 x=x+1 频度为n^2
k<n 频度为n(n+1)
j=j+1 k=1 频度为n
j=1 为1
j<=n 频度为n+1
    综上所述:时间复杂度3n^2+4n+2
复制代码


虽然上面会有一点点难以理解,但是实际上采用的是 从算法中选取一种对于说研究的问题来说是基本的原操作,以该基本操作在算法中重复执行的次数作为算法运行时间的算法的衡量准则。假设遇到下面多重层次循环结构,按照上面方法就很麻烦了

for(i=1;i<n;i++){
    for(j=1;j<n;j++){
        for(k=1;k<n;k++){
            //输出语句
    }
  }
}
时间复杂度 为 n^3 
复制代码


一般来说我们是直接忽略低阶常数项,直接保留高阶


算法的数量级


为了方便算法之间比较,算法时间复杂度均表示为:

  1. O(1) 为常数级
  2. O(logn)对数级
  3. O(n) 线性级
  4. O(c^n) 指数级
  5. O (n!) 阶乘级

时间复杂度是越来越高的,随着n的增长,通过观察曲线的变化,因此尽量不要选择指数级和阶乘级的算法。

网络异常,图片无法展示
|


算法时间复杂度的最好情况和最坏情况


有时候对于数据的输入也会影响算法,就像一些排序算法,数据的位置也会影响算法的时间复杂度,所以一般来说算法时间复杂度的衡量标准都是指 算法的平均复杂度。

目录
相关文章
|
4天前
|
机器学习/深度学习 数据采集 搜索推荐
机器学习在智能推荐系统中的个性化算法研究
机器学习在智能推荐系统中的个性化算法研究
|
5天前
|
存储 算法 Go
算法学习:数组 vs 链表
算法学习:数组 vs 链表
12 0
|
5天前
|
算法 搜索推荐 JavaScript
算法学习:快速排序
算法学习:快速排序
10 1
|
7天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
2天前
|
机器学习/深度学习 算法 搜索推荐
【机器学习】Apriori算法在关联规则学习中的应用
【机器学习】Apriori算法在关联规则学习中的应用
14 0
|
2天前
|
机器学习/深度学习 算法 数据挖掘
【机器学习】Voting集成学习算法:分类任务中的新利器
【机器学习】Voting集成学习算法:分类任务中的新利器
9 0
|
5天前
|
机器学习/深度学习 存储 算法
算法学习:递归
算法学习:递归
13 0
|
5天前
|
算法 JavaScript 前端开发
算法学习:二分查找
算法学习:二分查找
14 0
|
2天前
|
机器学习/深度学习 算法 数据可视化
m基于PSO-LSTM粒子群优化长短记忆网络的电力负荷数据预测算法matlab仿真
在MATLAB 2022a中,应用PSO优化的LSTM模型提升了电力负荷预测效果。优化前预测波动大,优化后预测更稳定。PSO借鉴群体智能,寻找LSTM超参数(如学习率、隐藏层大小)的最优组合,以最小化误差。LSTM通过门控机制处理序列数据。代码显示了模型训练、预测及误差可视化过程。经过优化,模型性能得到改善。
18 6
|
2天前
|
算法 调度
基于变异混合蛙跳算法的车间调度最优化matlab仿真,可以任意调整工件数和机器数,输出甘特图
**摘要:** 实现变异混合蛙跳算法的MATLAB2022a版车间调度优化程序,支持动态调整工件和机器数,输出甘特图。核心算法结合SFLA与变异策略,解决Job-Shop Scheduling Problem,最小化总完成时间。SFLA模拟蛙群行为,分组进行局部搜索和全局信息交换。变异策略增强全局探索,避免局部最优。程序初始化随机解,按规则更新,经多次迭代和信息交换后终止。