L03_如何评估算法的好坏

导读

我们都知道,数据结构和算法本身解决的是“快”和“省”的问题。所以,执行效率是算法一个非常重要的考量指标。那如何来衡量你编写的算法代码的执行效率呢?这里就要用到我们今天要讲的内容:时间、空间复杂度分析。

在这里插入图片描述

1、什么是复杂度分析

复杂度描述的是算法执行时间(或占用空间)与数据规模的增长关系

2、为什么要进行复杂度分析

复杂度分析有不依赖执行环境*、成本低、效率高、易操作、指导性强的特点。

掌握复杂度分析,有利于编写出性能更优的代码,降低系统开发和维护成本。

3、如何进行复杂度分析

3.1、大O表示法

T(n) = O(f(n))

算法的执行时间与每行代码的执行次数成正比,其中T(n)表示算法执行总时间,f(n)表示每行代码执行总次数,而n往往表示数据的规模。

3.2 、复杂度分析法则

单段代码看高频
比如循环。

多段代码取最大
比如一段代码中有单循环和多重循环,那么取多重循环的复杂。度。

嵌套代码求乘积
比如递归、多重循环等。

多个规模求加法
比如方法有两个参数控制两个循环的次数,那么这时就取二者复杂度相加。

4、常用的复杂度级别

4.1、多项式阶

随着数据规模的增长,算法的执行时间和空间占用,按照多项式的比例增长。如:O(1)(常数阶)、O(logn)(对数阶)、O(n)(线性阶)、O(nlogn)(线性对数阶)、O(n2)(平方阶)、O(n3)(立方阶)

4.2、非多项式阶

随着数据规模的增长,算法的执行时间和空间占用暴增。如:O(2^n)(指数阶)、O(n!)(阶乘阶)

5、最好、最坏、平均、均摊时间复杂度

最坏情况时间复杂度

代码在最理想情况下执行的时间复杂度。

最好情况时间复杂度

代码在最坏情况下执行的时间复杂度。

平均时间复杂度

用代码在所有情况下执行的次数的加权平均值表示。

均摊时间复杂度

在代码执行的所有复杂度情况中绝大部分是低级别的复杂度,个别情况是高级别复杂度且发生具有时序关系时,可以将个别高级别复杂度均摊到低级别复杂度上。基本上均摊结果就等于低级别复杂度。

西门子 PLC(可编程逻辑控制器)中的地址 `1800L03.prod_MaterialID` 是一种结构化变量地址,通常用于标识和访问特定的数据。这个地址可以分为几个部分来解析其含义: 1. **`1800L03`**: - 这部分通常表示一个 **数据块(Data Block, DB)的编号** 和 **访问方式**。 - 在西门子 S7 系列 PLC 中,`1800` 是数据块的编号,表示这是一个用户定义的数据块(DB)。例如,`DB1800`。 - `L03` 表示的是访问的层级或子结构。这里的 `L` 可能代表一个局部变量或子结构,而 `03` 是其编号。这种表示方式常见于嵌套结构中,用于访问数据块中的某个特定子结构或数组元素。 2. **`prod_MaterialID`**: - 这是数据块中的一个 **变量名或标签(Tag)**,通常用于存储特定的数据值。 - 在这个例子中,`prod_MaterialID` 很可能是一个变量名,表示与生产相关的材料 ID(Material Identification)。这个变量可能用于存储生产过程中使用的原材料或产品的唯一标识符。 结合西门子 PLC 的编程惯例,`1800L03.prod_MaterialID` 的含义可以理解为: - 从数据块 `DB1800` 中访问编号为 `L03` 的子结构。 - 在该子结构中,进一步访问名为 `prod_MaterialID` 的变量,该变量用于存储材料的唯一标识信息[^1]。 ### 示例代码 如果需要在程序中读取或写入 `prod_MaterialID` 的值,可以使用以下类似的代码(以西门子 TIA Portal 的 SCL 语言为例): ```scl // 假设 prod_MaterialID 是一个整数类型变量 VAR MaterialID: INT; END_VAR // 从 DB1800.L03.prod_MaterialID 读取值 MaterialID := "DB1800".L03.prod_MaterialID; // 向 DB1800.L03.prod_MaterialID 写入新值 "DB1800".L03.prod_MaterialID := 12345; ``` ### 注意事项 - 在实际应用中,需要确保数据块 `DB1800` 和其子结构 `L03` 已经正确定义,并且变量 `prod_MaterialID` 的数据类型与操作一致。 - 访问此类变量时,建议检查 PLC 程序中的数据块定义,以确认变量的结构和用途。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值