选择特殊符号

选择搜索类型

热门搜索

首页 > 百科 > 建设工程百科

算法效率

算法效率是指算法执行的时间,算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量。

算法效率基本信息

算法效率提高算法效率的方法

对数据的逻辑结构进行选择,是构造数学模型一大关键,而算法又是用来解决数学模型的。要使算法效率高,首先必须选好数据的逻辑结构。选择逻辑结构的目的是提高信息的利用效果。在解决问题的过程中,选择合理的逻辑结构是相当重要的环节。

算法效率选择合理的存储结构

数据的存储结构,分为顺序存储结构和链式存储结构。顺序存储结构的特点是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系;链式存储结构则是借助指示元素存储地址的指针表示数据元素之间的逻辑关系。因为两种存储结构的不同,导致这两种存储结构在具体使用时也分别存在着优点和缺点。 这里有一个较简单的例子:我们需要记录一个n×n的矩阵,矩阵中包含的非0元素为m个。 此时,我们若采用顺序存储结构,就会使用一个n×n的二维数组,将所有数据元素全部记录下来;若采用链式存储结构,则需要使用一个包含m个结点的链表,记录所有非0的m个数据元素。由这样两种不同的记录方式,我们可以通过对数据的不同操作来分析它们的优点和缺点。

1. 随机访问矩阵中任意元素。由于顺序结构在物理位置上是相邻的,所以可以很容易地获得任意元素的存储地址,其复杂度为O(1);对于链式结构,由于不具备物理位置相邻的特点,所以首先必须对整个链表进行一次遍历,寻找需进行访问的元素的存储地址,其复杂度为O(m)。此时使用顺序结构显然效率更高。

2. 对所有数据进行遍历。两种存储结构对于这种操作的复杂度是显而易见的,顺序结构的复杂度为O(n2),链式结构为O(m)。由于在一般情况下m要远小于n2,所以此时链式结构的效率要高上许多。除上述两种操作外,对于其它的操作,这两种结构都不存在很明显的优点和缺点,如对链表进行删除或插入操作,在顺序结构中可表示为改变相应位置的数据元素。 既然两种存储结构对于不同的操作,其效率存在较大的差异,那么我们在确定存储结构时,必须仔细分析算法中操作的需要,合理地选择一种能够“扬长避短”的存储结构。

存储结构的选择包括以下两种。

一、合理采用顺序存储结构。我们在平常做题时,大多都是使用顺序存储结构对数据进行存储。究其原因,一方面是出于顺序结构操作方便的考虑,另一方面是在程序实现的过程中,使用顺序结构相对于链式结构更便于对程序进行调试和查找错误。因此,大多数人习惯上认为,能够使用顺序结构进行存储的问题,最“好”采用顺序存储结构。其实,这个所谓的“好”只是一个相对的标准,是建立在以下两个前提条件之下的:

1. 链式结构存储的结点与顺序结构存储的结点数目相差不大。这种情况下,由于存储的结点数目比较接近,使用链式结构完全不能体现出记录结点少的优点,并且可能会由于指针操作较慢而降低算法的效率。更有甚者,由于指针自身占用的空间较大,且结点数目较多,因而算法对空间的要求可能根本无法得到满足。

2. 并非算法效率的瓶颈所在。由于不是算法最费时间的地方,这里是否进行改进,显然是不会对整个算法构成太大影响的,若使用链式结构反而会显得操作过于繁琐。

二、必要时采用链式存储结构。

由于链式结构中指针操作确实较繁琐,并且速度也较慢,调试也不方便,因而大家一般都不太愿意用链式的存储结构。但是,这只是一般的观点,当链式结构确实对算法有很大改进时,我们还是不得不进行考虑的。

然而,如果我们采用的是链式存储结构,那么我们需要多少数据,就只会遍历多少数据,这样不仅充分发挥了链式存储结构的优点,而且由于不需单独对某一个数据进行提取,每次都是对所有数据进行判断,从而避免了链式结构的最大缺点。我们使用链式存储结构,虽然没有降低问题的时间复杂度(链式存储结构在最坏情况下的存储量与顺序存储结构的存储量几乎相同),但由于体现了前文所述选择存储结构时扬长避短的原则,因而算法的效率也大为提高。我们选择链式的存储结构,虽然操作上可能稍复杂一些,但由于改进了算法的瓶颈,算法的效率自然也今非昔比。由此可见,必要时选择链式结构这一方法,其效果是不容忽视的。

算法效率使用直接初始化

与直接初始化对应的是复制初始化,什么是直接初始化?什么又是复制初始化?举个简单的例子,

ClassTestct1;ClassTestct2(ct1);//直接初始化ClassTestct3=ct1;//复制初始化

那么直接初始化与复制初始化又有什么不同呢?直接初始化是直接以一个对象来构造另一个对象,如用ct1来构造ct2,复制初始化是先构造一个对象,再把另一个对象值复制给这个对象,如先构造一个对象ct3,再把ct1中的成员变量的值复制给ct3,从这里,可以看出直接初始化的效率更高一点,而且使用直接初始化还是一个好处,就是对于不能进行复制操作的对象,如流对象,是不能使用赋值初始化的,只能进行直接初始化。可能我说得不太清楚,那么下面就引用一下经典吧!

以下是Primer是的原话:

“当用于类类型对象时,初始化的复制形式和直接形式有所不同:直接初始化直接调用与实参匹配的构造函数,复制初始化总是调用复制构造函数。复制初始化首先使用指定构造函数创建一个临时对象,然后用复制构造函数将那个临时对象复制到正在创建的对象”,还有一段这样说,“通常直接初始化和复制初始化仅在低级别优化上存在差异,然而,对于不支持复制的类型,或者使用非explicit构造函数的时候,它们有本质区别:

ifstreamfile1("filename")://ok:directinitializationifstreamfile2="filename";//error:copyconstructorisprivate

算法效率尽量减少值传递,多用引用来传递参数。

如果参数是int等语言自定义的类型可能能性能的影响还不是很大,但是如果参数是一个类的对象,那么其效率问题就不言而喻了。例如一个判断两个字符串是否相等的函数,其声明如下:

boolCompare(strings1,strings2)boolCompare(string*s1,string*s2)boolCompare(string&s1,string&s2)boolCompare(conststring&s1,conststring&s2)

其中若使用第一个函数(值传递),则在参数传递和函数返回时,需要调用string的构造函数和析构函数两次(即共多调用了四个函数),而其他的三个函数(指针传递和引用传递)则不需要调用这四个函数。因为指针和引用都不会创建新的对象。如果一个构造一个对象和析构一个对象的开销是庞大的,这就是会效率造成一定的影响。

然而在很多人的眼中,指针是一个恶梦,使用指针就意味着错误,那么就使用引用吧!它与使用普通值传递一样方便直观,同时具有指针传递的高效和能力。因为引用是一个变量的别名,对其操作等同于对实际对象操作,所以当你确定在你的函数是不会或不需要变量参数的值时,就大胆地在声明的前面加上一个const吧,就如最后的一个函数声明一样。

同时加上一个const还有一个好处,就是可以对常量进行引用,若不加上const修饰符,引用是不能引用常量的。

算法效率减少除法运算的使用

无论是整数还是浮点数运算,除法都是一件运算速度很慢的指令,在计算机中实现除法是比较复杂的。所以要减少除法运算的次数,下面介绍一些简单方法来提高效率:

1、通过数学的方法,把除法变为乘法运算,如if(a > b/c),如果a、b、c都是正数,则可写成if(a*c > b)

2、让编译器有优化的余地,如里你要做的运算是int型的n/8的话,写成(unsigned)n/8有利于编译器的优化。而要让编译器有优化的余地,则除数必须为常数,而这也可以用const修饰一个变量来达到目的。

算法效率避免使用多重继承

在C 中,支持多继承,即一个子类可以有多个父类。书上都会告诉我们,多重继承的复杂性和使用的困难,并告诫我们不要轻易使用多重继承。其实多重继承并不仅仅使程序和代码变得更加复杂,还会影响程序的运行效率。

这是因为在C 中每个对象都有一个this指针指向对象本身,而C 中类对成员变量的使用是通过this的地址加偏移量来计算的,而在多重继承的情况下,这个计算会变量更加复杂,从而降低程序的运行效率。而为了解决二义性,而使用虚基类的多重继承对效率的影响更为严重,因为其继承关系更加复杂和成员变量所属的父类关系更加复杂。

算法效率将小粒度函数声明为内联函数

调用函数是需要保护现场,为局部变量分配内存,函数结束后还要恢复现场等开销,而内联函数则是把它的代码直接写到调用函数处,所以不需要这些开销,但会使程序的源代码长度变大。

所以若是小粒度的函数,如下面的Max函数,由于不需要调用普通函数的开销,所以可以提高程序的效率。

intMax(inta,intb)
{
returna>b"J-main-content-end-dom">

查看详情

算法效率造价信息

  • 市场价
  • 信息价
  • 询价

SDK算法接入软件

  • 算法仓库的功能包括算法管理、调度管理和算法评价等.通过统一发布的标准接口 支持以SDK对接调用的方式接入任意厂家的任意分析算法.
  • L.JOY
  • 13%
  • 南京埃尔乔亿自控设备有限公司
  • 2022-12-07
查看价格

算法建库质量评价软件

  • 算法评价是算法仓库作为平台的一个评分功能 建库质量评价.
  • L.JOY
  • 13%
  • 南京埃尔乔亿自控设备有限公司
  • 2022-12-07
查看价格

算法比对质量评价软件

  • 算法评价是算法仓库作为平台的一个评分功能 比对质量评价.
  • L.JOY
  • 13%
  • 南京埃尔乔亿自控设备有限公司
  • 2022-12-07
查看价格

燃烧效率分析仪

  • 型号:km400;系列:烟气分析仪;说明:可测O2/CO/温度/压力,大屏幕液晶显示;
  • 凯恩
  • 13%
  • 重庆德源胜仪器有限公司
  • 2022-12-07
查看价格

燃烧效率分析仪

  • 型号:km250;系列:烟气分析仪;说明:可测O2/CO/温度;
  • 凯恩
  • 13%
  • 重庆德源胜仪器有限公司
  • 2022-12-07
查看价格

AI算法训练

  • AI算法训练
  • 25天
  • 3
  • 中高档
  • 含税费 | 含运费
  • 2021-07-16
查看价格

AI算法训练

  • AI算法训练
  • 60天
  • 3
  • 中高档
  • 含税费 | 含运费
  • 2021-03-31
查看价格

客流算法授权

  • 客流分析算法授权
  • 109路
  • 2
  • 华为、科达、泰科
  • 高档
  • 不含税费 | 含运费
  • 2021-05-31
查看价格

人脸算法授权

  • 人脸算法,按照接入路数收费,前端抓拍机数量
  • 1000路
  • 1
  • 高档
  • 含税费 | 含运费
  • 2019-10-30
查看价格

500万高空抛物摄像机-算法

  • 高空抛物算法
  • 42路
  • 1
  • 华为
  • 中档
  • 含税费 | 含运费
  • 2021-12-02
查看价格

算法效率简介

算法效率定义

算法效率是指算法执行的时间,算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量。在现在的计算机硬件环境中,比较少需要考虑这个问题了,特别是pc机的编程,内存空间越来越大,所以被考虑得也越来越少,不过一个好的程序员,都应该对自己的程序有要求,每一个for比别人少一次判断1000个for就能够少掉很多的运行时间。所以能够理解,能够大概的去运用"效率度量"还是有很大意义的。

算法效率度量方法

度量一个程序的执行时间通常有两种方法:(一)事后统计的方法(二)事前分析估算的方法。

事后统计的方法不利于较大范围内的算法比较(异地,异时,异境)。

事前分析估算的方法与许多因素有关,包括算法本身选用的策略、问题的规模、书写程序的语言、编译产生的机器代码质量和机器执行指令的速度等。为便于比较算法本身的优劣,应排除其它影响算法效率的因素。从算法中选取一种对于所研究的问题来说是基本操作的原操作,以该基本操作重复执行的次数作为算法的时间量。(原操作在所有该问题的算法中都相同)

度量一个程序运行时间的方式通过时间复杂度和空间复杂度来表征。

上式表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度。

上式表示空间复杂度。空间复杂度可以作为算法所需存储空间的量度。若额外空间相对于输入数据量来说是常数,则称此算法为原地工作。原地工作意思是一个算法需要少量的辅助空间,且其大小不随问题规模的大小而改变。如果所占空间量依赖于特定的输入,则除特别指明外,均按最坏情况来分析 。

算法效率算法的最优、最差和平均效率

最差效率:指当输入规模为n时,算法的最坏情况下的效率。

最优效率:指当输入规模为n时,算法在最优情况下的效率。

平均效率:指当输入规模为n时,算法的平均效率。

大量实践经验告诉我们,我们评价一个算法是应该重点考虑最差效率这一点。

查看详情

算法效率常见问题

查看详情

算法效率文献

基于权重与匹配效率的防火墙规则集优化算法 基于权重与匹配效率的防火墙规则集优化算法

基于权重与匹配效率的防火墙规则集优化算法

格式:pdf

大小:441KB

页数: 未知

研究并分析防火墙规则集的优化方法,给出规则与网络数据包的的匹配频率、匹配热度和规则权重的关系公式;设计并编写基于权重与基于匹配效率的规则集优化算法程序;最后通过对相应的实验数据的分析比较,得出两种算法均可较大幅度的降低防火墙规则集与网络数据包的匹配次数,从而优化防火墙性能的结论。

凝汽式汽轮机低压缸相对内效率的改进算法 凝汽式汽轮机低压缸相对内效率的改进算法

凝汽式汽轮机低压缸相对内效率的改进算法

格式:pdf

大小:441KB

页数: 6页

根据汽轮机低压缸相对内效率与其影响因素之间的映射关系,提出了一种基于免疫原理的多层径向基函数(RBF)神经网络数学模型来计算汽轮机的低压缸相对内效率,并以某电厂300MW汽轮机低压缸为例,对其相对内效率进行了实际计算分析.结果表明:该模型收敛速度快、计算精度高,并有较好的泛化能力.该神经网络数学模型为汽轮机相对内效率的在线性能监测提供了一种可行的方法.

防碰撞算法Q值算法及其改进算法

DFSA算法可采用各种方法预测待识别的标签数量,然后动态调整最优帧长,与FSA相比,系统效率有明显改善,接近36.8%。但是,当标签数量较多(特别是标签数量大于500)时,采用由预测标签数量设置最优帧长的方案会使系统效率急剧下降。因此,在标签数量较多的情况下,为了使系统效率得到提高,EPCClass1Gen2标准中采用了Q值算法,该算法可以实时自适应地调整帧长 。

Q值算法

在Q值算法中,阅读器首先发送Query命令,该命令中含有一个参数Q(取值范围0~15),接收到命令的标签可在[0,2Q-1]范围内(称为帧长)随机选择时隙,并将选择的值存入标签的时隙计数器中,只有计数器为0的标签才能响应,其余标签保持沉默状态。当标签接收到阅读器发送的QueryRep命令时,将其时隙计数器减1,若减为0,则给阅读器发送一个应答信号。标签被成功识别后,退出这轮盘存。当有两个以上标签的计数器都为0时,它们会同时对阅读器进行应答,造成碰撞。阅读器检测到碰撞后,发出指令将产生碰撞的标签时隙计数器设为最大值(2Q-1),继续留在这一轮盘存周期中,系统继续盘存直到所有标签都被查询过,然后阅读器发送重置命令,使碰撞过的标签生成新的随机数 。

根据上一轮识别的情况,阅读器发送Query-Adjust命令来调整Q的值,当标签接收到Query-Adjust命令时,先更新Q值,然后在[0,2Q-1]范围内选择随机值。EPCClass1Gen2标准中提供了一种参考算法来确定Q值的范围.其中:Qfp为浮点数,其初值一般设为4.0,对Qfp四舍五入取整后得到的值即为Q;C为调整步长,其典型取值范围是0.1

该算法在参数C的辅助下对Q值进行动态调整,但是C太大会造成Q值变化过于频繁,导致帧长调整过于频繁,C太小又不能快速地实现最优帧长的选择。因此,研究者们对Q值的调整进行了各种优化 。

基于最大吞吐量调整Q值的算法

文献提出一种基于最大吞吐量对Q值进行调整的算法,其中定义了以下变量:Nt为已识别的标签个数;N为识别标签所需的总时隙数;NC为冲突时隙的个数;nu为上一轮未识别的标签个数;e为冲突时隙中的平均标签个数;PC为冲突时隙所占的比例 。

这些参数之间的关系为PC=NC/N,e=nu/Nc,吞吐量=Nt/N。由于Aloha类算法的最大吞吐量为0.368(e-1)[5],该算法以此作为调整Q值的依据。当系统吞吐量达到或接近0.368时,阅读器仅需调用2Q-1次QueryRep命令,而不需要在接下来的盘存周期中调整Q值。当吞吐量小于0.368时,根据未识别的标签个数nu来调整Q值 .

基于分组的位隙Aloha算法

文献提出一种基于分组的位隙Aloha算法,该算法采用位隙Aloha算法中的128位预定序列,代表128个位隙。若某个标签选择了第i个位隙,则将第i位置1,其余各位都置0。当标签数量为15时,位隙Aloha算法可获得最大吞吐率88.38%,但随着标签数量的增加,算法性能急剧下降 。

因此,基于分组的位隙Aloha算法通过对标签进行分组来提高算法的性能。该算法在查询命令中设置了一个位隙计数器的参数Q(Q为整数,且0≤Q≤15),当标签收到阅读器发送的查询命令后,在[0,2Q-1]范围内生成一个随机数,即代表选择了相应的位隙,只有选择了0的标签才会立即响应。同时,该算法根据冲突位隙数动态地对Q值进行调整:当冲突位隙数小于11时,Q减1且最小为0;当冲突位隙数在11~20之间时,Q保持不变;当冲突位隙数大于20时,Q加1且最大不超过15 。

综上所述,基于Aloha的防碰撞算法原理简单、容易实现,对新到达的标签具有较好的适应性,尤其对于标签持续到达的情况有较好的解决方案,但该类算法存在几个明显的缺点:①响应时间不确定,即同一批标签在不同时刻进行识别所需要消耗的时间相差很大;②个别标签可能永远无法被识别;③Aloha算法达到最佳吞吐率的条件是其帧长等于标签数量,当需要识别的标签数量较多或选择的帧长与实际待识别标签数量不符时,系统性能将明显下降。而基于树的算法则很好地解决了这些问题 。

查看详情

旋转门算法算法变形

旋转门算法除了平行四边形算法之外,还能用三角形算法来表示。

查看详情

级效率效率与级效率

效率与所取截面有关。取压缩机进口截面和出口截面来计算效率,则为压缩机的效率。如果不包括进出气管在内,取压缩机中第一级进口截面和末级出口截面计算效率,则为压缩机级组的效率。如果取压缩机的一个级的进口截面和出口截面计算效率,则为级的效率。 2100433B

查看详情

相关推荐

立即注册
免费服务热线: 400-888-9639