精华内容
下载资源
问答
  • 大家先思考一个问题:当你面对一道编程题或者需要实现某个功能...同一个问题,好的算法2秒就搞定,而效率低的算法半天运行不出来甚至直接死机。 那怎样的代码才算是效率高的代码呢? 首先,效率高≠运行时间短。算法

    大家先思考一个问题:当你面对一道编程题或者需要实现某个功能时,你需要设计解决问题的算法,然后编制代码,最后运行成功。但是你有没有想过你设计的算法,效率高还是低?你可能会觉得,管这个干什么,能实现就不错了。作为初学者,我们的确没有太大必要关心算法的效率,但作为工作者或者老手,我们就必须要设计效率高一点的代码了,因为低效率的代码会造成资源的浪费,影响整个项目的运行效率。同一个问题,好的算法2秒就搞定,而效率低的算法半天运行不出来甚至直接死机。

    那怎样的代码才算是效率高的代码呢?

    首先,效率高≠运行时间短。算法的运行时间取决于算法本身的策略、问题的规模(比如求100以内的素数还是1000以内的素数),所采用的编程语言,计算机的硬件配置等因素。为了便于估算一个算法的效率,先驱们引入了两个概念——时间复杂度与空间复杂度

    时间复杂度

    先来看定义:“一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作 T(n) = O(f(n)) 它表示随问题规模n的增大,算法的执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度。 ”

    由定义可知,O就是时间复杂度,它是一个关于问题规模n的一个函数,而这个函数又与算法中的基本操作有关,那啥是基本操作呢?反正肯定不是我们口中的“坐下,基本操作。”这里基本操作是指算法中最有代表性,执行次数最多的操作。比如一个n阶矩阵相乘,问题规模就是n,基本操作则是“乘”这个操作。再比如用冒泡排序给10个数排序,问题规模就是10,基本操作是“交换”。
    举个简单的例子:假设有一个算法是根据正方形的面积大小输出多少次Hello World,正方形的边长为n:

    for(int i = 1; i <= n; i++)
    {
    	for(int j = 1; j <= n; j++)
    	{
    		printf("Hello World");
    	}
    }
    

    这是一个二重循环,内层外层循环次数都是n,因此,这个算法的问题规模为n,基本操作为打印“Hello World”。可以推出f(n) = n^2。所以这个算法的时间复杂度为 n^2。
    总结一下,求时间复杂度,先要明确算法的问题规模n,也就是这个算法的工作量是多大,再找到算法中执行次数最多的操作,确定这两者之间的函数关系,这个关系就是O。
    需要注意的是,同一个算法,也会由于数据的不同导致时间复杂度的不统一。比如在冒泡排序中,如果需要排序的一组数已经是按想要的顺序排好了的,那这个时候时间复杂度为0,因为“交换”操作一次也没有执行。或者这组数是按倒序排列而我们需要升序排列,这个时候复杂度又变成最大。因此,算法的复杂度又分为为最佳情况和最坏情况。一般情况下,是选择最坏情况作为参考。

    空间复杂度

    类似于时间复杂度,空间复杂度作为算法所需要存储空间的量度,记作:
    S(n) = O(f(n))
    n表示问题规模。同样,如果所占的空间依赖于特定的输入,也是需要分最佳情况和最坏情况,除特别指明外,均按最坏情况分析。

    展开全文
  • 算法效率衡量

    千次阅读 2017-11-18 07:58:26
    执行时间反应算法效率假设对于同一问题,我们给出了两种解决算法,在两种算法的实现中,我们对程序执行的时间进行了测算,发现两段程序执行的时间相差悬殊,由此我们可以得出结论:实现算法程序的执行时间可以反应出...

    执行时间反应算法效率

    假设对于同一问题,我们给出了两种解决算法,在两种算法的实现中,我们对程序执行的时间进行了测算,发现两段程序执行的时间相差悬殊,由此我们可以得出结论:实现算法程序的执行时间可以反应出算法的效率,即算法的优劣。
    单靠时间值绝对可信吗?

    假设我们将第二次尝试的算法程序运行在一台配置古老性能低下的计算机中,情况会如何?很可能运行的时间并不会比在我们的电脑中运行算法一快多少。

    单纯依靠运行的时间来比较算法的优劣并不一定是客观准确的!

    程序的运行离不开计算机环境(包括硬件和操作系统),这些客观原因会影响程序运行的速度并反应在程序的执行时间上。那么如何才能客观的评判一个算法的优劣呢?
    时间复杂度与大O记法

    我们假定计算机执行算法每一个基本操作的时间是固定的一个时间单位,那么有多少个基本操作就代表会花费多少时间单位。算然对于不同的机器环境而言,确切的单位时间是不同的,但是对于算法进行多少个基本操作(即花费多少时间单位)在规模数量级上却是相同的,由此可以忽略机器环境的影响而客观的反应算法的时间效率。

    对于算法的时间效率,我们可以用“大O记法”来表示。

    “大O记法”:对于单调的整数函数f,如果存在一个整数函数g和实常数c>0,使得对于充分大的n总有f(n)<=c*g(n),就说函数g是f的一个渐近函数(忽略常数),记为f(n)=O(g(n))。也就是说,在趋向无穷的极限意义下,函数f的增长速度受到函数g的约束,亦即函数f与函数g的特征相似。

    时间复杂度:假设存在函数g,使得算法A处理规模为n的问题示例所用时间为T(n)=O(g(n)),则称O(g(n))为算法A的渐近时间复杂度,简称时间复杂度,记为T(n)

    如何理解“大O记法”

    对于算法进行特别具体的细致分析虽然很好,但在实践中的实际价值有限。对于算法的时间性质和空间性质,最重要的是其数量级和趋势,这些是分析算法效率的主要部分。而计量算法基本操作数量的规模函数中那些常量因子可以忽略不计。例如,可以认为3n2和100n2属于同一个量级,如果两个算法处理同样规模实例的代价分别为这两个函数,就认为它们的效率“差不多”,都为n2级。

    最坏时间复杂度

    分析算法时,存在几种可能的考虑:

    算法完成工作最少需要多少基本操作,即最优时间复杂度
    算法完成工作最多需要多少基本操作,即最坏时间复杂度
    算法完成工作平均需要多少基本操作,即平均时间复杂度
    

    对于最优时间复杂度,其价值不大,因为它没有提供什么有用信息,其反映的只是最乐观最理想的情况,没有参考价值。

    对于最坏时间复杂度,提供了一种保证,表明算法在此种程度的基本操作中一定能完成工作。

    对于平均时间复杂度,是对算法的一个全面评价,因此它完整全面的反映了这个算法的性质。但另一方面,这种衡量并没有保证,不是每个计算都能在这个基本操作内完成。而且,对于平均情况的计算,也会因为应用算法的实例分布可能并不均匀而难以计算。

    因此,我们主要关注算法的最坏情况,亦即最坏时间复杂度。

    时间复杂度的几条基本计算规则

    基本操作,即只有常数项,认为其时间复杂度为O(1)
    顺序结构,时间复杂度按加法进行计算
    循环结构,时间复杂度按乘法进行计算
    分支结构,时间复杂度取最大值
    判断一个算法的效率时,往往只需要关注操作数量的最高次项,其它次要项和常数项可以忽略
    在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度
    
    展开全文
  • 衡量查找算法效率的主要标准是( )。 正确答案: C 你的答案: C (正确) 元素数 所需的存储量 均匀查找长度 算法难易程度 添加笔记 求解答(2) 收藏 纠错

    衡量查找算法效率的主要标准是( )。

    正确答案: C   你的答案: C (正确)

    元素个数
    所需的存储量
    均匀查找长度
    算法难易程度



    展开全文
  • 算法效率衡量

    千次阅读 2018-01-21 14:30:32
    算法效率衡量 先来看一道题: 如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合? 执行时间反应算法效率 对于同一问题,我们给出了两种解决算法,在两种算法的实现中,...
    算法效率衡量

    先来看一道题:
    如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合?

    执行时间反应算法效率
    对于同一问题,我们给出了两种解决算法,在两种算法的实现中,我们对程序执行的时间进行了测算,发现两段程序执行的时间相差悬殊(214.583347秒相比于0.182897秒),由此我们可以得出结论:实现算法程序的执行时间可以反应出算法的效率,即算法的优劣。
    单靠时间值绝对可信吗?
    假设我们将第二次尝试的算法程序运行在一台配置古老性能低下的计算机中,情况会如何?很可能运行的时间并不会比在我们的电脑中运行算法一的214.583347秒快多少。
    单纯依靠运行的时间来比较算法的优劣并不一定是客观准确的!
    程序的运行离不开计算机环境(包括硬件和操作系统),这些客观原因会影响程序运行的速度并反应在程序的执行时间上。那么如何才能客观的评判一个算法的优劣呢?



    时间复杂度与“大O记法”
    我们假定计算机执行算法每一个基本操作的时间是固定的一个时间单位,那么有多少个基本操作就代表会花费多少时间单位。算然对于不同的机器环境而言,确切的单位时间是不同的,但是对于算法进行多少个基本操作(即花费多少时间单位)在规模数量级上却是相同的,由此可以忽略机器环境的影响而客观的反应算法的时间效率。
    对于算法的时间效率,我们可以用“大O记法”来表示。
    “大O记法”:对于单调的整数函数f,如果存在一个整数函数g和实常数c>0,使得对于充分大的n总有f(n)<=c*g(n),就说函数g是f的一个渐近函数(忽略常数),记为f(n)=O(g(n))。也就是说,在趋向无穷的极限意义下,函数f的增长速度受到函数g的约束,亦即函数f与函数g的特征相似。
    时间复杂度:假设存在函数g,使得算法A处理规模为n的问题示例所用时间为T(n)=O(g(n)),则称O(g(n))为算法A的渐近时间复杂度,简称时间复杂度,记为T(n)
    如何理解“大O记法”
    对于算法进行特别具体的细致分析虽然很好,但在实践中的实际价值有限。对于算法的时间性质和空间性质,最重要的是其数量级和趋势,这些是分析算法效率的主要部分。而计量算法基本操作数量的规模函数中那些常量因子可以忽略不计。例如,可以认为3n2和100n2属于同一个量级,如果两个算法处理同样规模实例的代价分别为这两个函数,就认为它们的效率“差不多”,都为n2级。
    最坏时间复杂度
    分析算法时,存在几种可能的考虑:
    • 算法完成工作最少需要多少基本操作,即最优时间复杂度
    • 算法完成工作最多需要多少基本操作,即最坏时间复杂度
    • 算法完成工作平均需要多少基本操作,即平均时间复杂度
    对于最优时间复杂度,其价值不大,因为它没有提供什么有用信息,其反映的只是最乐观最理想的情况,没有参考价值。
    对于最坏时间复杂度,提供了一种保证,表明算法在此种程度的基本操作中一定能完成工作。
    对于平均时间复杂度,是对算法的一个全面评价,因此它完整全面的反映了这个算法的性质。但另一方面,这种衡量并没有保证,不是每个计算都能在这个基本操作内完成。而且,对于平均情况的计算,也会因为应用算法的实例分布可能并不均匀而难以计算。
    因此,我们主要关注算法的最坏情况,亦即最坏时间复杂度。
    时间复杂度的几条基本计算规则
    1. 基本操作,即只有常数项,认为其时间复杂度为O(1)
    2. 顺序结构,时间复杂度按加法进行计算
    3. 循环结构,时间复杂度按乘法进行计算
    4. 分支结构,时间复杂度取最大值
    5. 判断一个算法的效率时,往往只需要关注操作数量的最高次项,其它次要项和常数项可以忽略
    6. 在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度
    展开全文
  • 算法效率衡量标准(时间复杂度)

    千次阅读 2019-08-14 11:20:27
    时间复杂度简介: 相信大多数人判断一个算法的好坏就是比较算法的执行时间,即经过多长的时间可以运算出结果。...所以可以看出仅仅根据执行时间来衡量算法的优劣不一定是正确的。 算法的衡量...
  • 算法效率分析基础

    千次阅读 2018-08-14 19:04:28
    一般而言分析算法效率的方式有两种,即:时间效率和空间效率。时间效率也称为时间复杂度;空间效率也称为空间复杂度。在计算机技术发展的几十年中,空间资源变得不是非常重要了,因此在一般的算法分析中,讨论的主要...
  • 时间复杂度和空间复杂度是衡量算法重要指标,对于排序算法这特定算法,这篇文章整理了一些常见的基础性的指标,后续将以此为基础进行进一步的解释。
  • 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储...
  • 算法效率的度量

    2018-12-06 20:07:12
    这篇博客我们来讨论一下怎么来度量一个算法效率,在讨论之前,我们先要提出一个问题,什么是算法? 答:算法是未解决某一特定类型的问题的有限运算序列,它是输入转化为输出的计算步骤 首先要明白算法的5个基本特性,算法...
  • 算法算法衡量

    千次阅读 2016-10-19 18:50:12
    二、一个算法必须满足以下五个重要特征:1、有穷性:对于任意一组合法输入值,在执行又穷步骤之后一定能结束,即:算法中的每个步骤都能在有限时间内完成。2、确定性:在每种情况下所应执行的操作,在算法中都有确切...
  • 插入排序算法介绍 算法逻辑 伪代码 复杂度
  • 算法

    万次阅读 2018-02-08 00:13:09
    1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。...一个算法的优劣可以用空间复杂度与时间复杂度来衡量
  •   CUDA算法效率总的来说,由存取效率和计算效率两类决定,一个好的CUDA算法必定会让两类效率都达到最优化,而其中任一类效率成为瓶颈,都会让算法的性能大打折扣。 存取效率   存取效率即GPU和显存之间的...
  • 衡量算法的标准

    千次阅读 2013-04-02 00:57:51
    1. 时间复杂度 算法核心部分大概要执行的次数. 而非执行时间. 为什么不能是执行时间. 是因为1个算法在不同的机器和不同的环境中执行时间可能有巨大的差别. 而什么是核心部分大概要执行的时间? 
  • 基于滑动窗口的性能指标衡量算法

    千次阅读 2018-10-06 16:32:08
    前言 在复杂的分布式系统中,存在着各种性能指标,比如系统请求数,请求响应时间等等。这些指标在一定程度上可以反映出系统运行的快慢程度。但是这里我们如何做到...当我们说系统出现“变慢”现象的时候,这...
  • 算法重要性与乐趣

    千次阅读 2017-10-17 10:48:05
    算法算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略...一个算法的优劣可以用空间复杂度与时间复杂度来衡量。特征一个算法应该具有以下五
  • 如何评价一个算法的好坏

    千次阅读 2019-04-27 21:38:39
    首先,这个算法必须是正确的 其次,好的算法应该是友好的,便于人们理解和交流,并且是机器可...定义:在计算机科学中,算法的时间复杂度是一个函数,他定量描述了该算法的运行时间.一个算法执行所耗费的时间,从理论上...
  • 如何估算算法效率

    千次阅读 2012-04-21 10:12:51
    作为程序员,我们可以凭直觉得出一个算法效率高低。但是在算法研究中,我们需要较为准确的数学概念来描述算法效率。 这里介绍一点相关的数学知识,非常非常的简单。 仅考虑相对速度 首先,当进行算法...
  • 在前面我们实现了选择排序与冒泡排序的具体实现,现在我们从数学的角度分析下算法效率问题:  首先我们把两种排序算法的概念重温遍: 选择排序:在每轮中,找出最小的元素放在他最终的位置。挺起来有些别扭,...
  • GBDT算法的特征重要度计算

    万次阅读 2016-12-27 21:22:59
    基于树的集成算法还有一个很好的特性,就是模型训练结束后可以输出模型所使用的特征的相对重要度,便于我们选择特征,理解哪些因素是对预测有关键影响,这在某些领域(如生物信息学、神经系统科学等)特别重要。...
  • 公司招人时需要做需求说明书,以当前公司为例子,Andorid小组需要...需要一个衡量人能力的标准,这个标准不仅适用于招聘,同样也适用于考核、职等评定等,我叫这种标准为技能树。   这里所说的技能树,不仅包含技...
  • 算法时间复杂度分析()

    千次阅读 2019-07-03 22:50:59
    同样,在计算机中我们衡量一算法的执行效率的时候也会考量3方面:“快、省、稳”。 具体点来讲就是我们在实现某算法的时候,最终目的就是要求计算机(CPU)在最短的时间内,用最少的内存稳定的输出正确的结果...
  • 它是一个衡量算法优劣的重要指标,按照所需资源的又细分为时间复杂度和空间复杂度。 时间复杂度:运行算法所需的时间随着数据量变化关系,记做T(n),n为算法的规模。 空间复杂度:一个算...
  • 数据结构分别为逻辑结构、(存储)物理结构和数据的运算三部分。 为什么要学数据结构? 首先,因为数据结构作为计算机专业的专业基础课程,是计算机考研的必考科目之,如果打算报考计算机专业的研究生,你...
  • 开发高效算法

    2018-07-17 14:32:34
    2. 使用大O符号来衡量算法效率 3. 分析算法的时间复杂度 3.1 二分查找算法 3.2 常用的 递推关系 3.3 比较常用的增长函数 4. 总结 1. 引言 算法设计是为了解决某个问题开发一个数学 流程。算法分析是预测...
  • 而要成为名合格的机器学习算法工程师(以下简称算法工程师)更是难上加难,因为在掌握工程师的通用技能以外,还需要掌握一张不算小的机器学习算法知识网络。下面我们就将成为名合格的算法工程师所需的技能进行...
  • 种面向高维数据的集成聚类算法

    万次阅读 2015-08-01 21:23:24
    聚类集成已经成为机器学习的研究热点,它对原始数据集的多个聚类结果进行学习和集成,得到一个能较好地反映数据集内在结构的数据划分。很多学者的研究证明聚类集成能有效地提高聚类结果的准确性、鲁棒性和稳定性。...
  • O系统性能之衡量性能的几指标 马齿苋 发表评论阅读评论6,403 次查看 前言几基本的概念单个IO的大小(IO Chunk Size)IOPS(IO per Second)传输速度(Transfer Rate)/吞吐率(Throughput)IO响应时间(IO...
  • 衡量防火墙的几名词

    千次阅读 2004-10-28 20:48:00
    i. 防火墙有几端口?1. 2端口:与路由器串联,出,两...吞吐量,指防火墙的每秒通信量,主要由防火墙内网卡,及程序算法效率决定,尤其是程序算法,会使防火墙系统进行大量运算,通信量大打折扣。因此,大多
  • 算法算法分析基础

    千次阅读 2019-01-05 16:49:40
    算法和算法分析基本概念算法的特性算法和程序算法与数据结构算法设计的要求评价算法的标准:算法效率衡量方法和准则:如何估算算法的时间复杂度总结:推导大O阶方法平均时间复杂度和最坏时间复杂度时间复杂度比较...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,225
精华内容 14,890
关键字:

衡量一个算法效率的重要