精华内容
下载资源
问答
  • 算法效率分析基础

    千次阅读 2018-08-14 19:04:28
    一般而言分析算法效率的方式有两种,即:时间效率和空间效率。时间效率也称为时间复杂度;空间效率也称为空间复杂度。在计算机技术发展的几十年中,空间资源变得不是非常重要了,因此在一般的算法分析中,讨论的主要...

    一般而言分析算法效率的方式有两种,即:时间效率和空间效率。时间效率也称为时间复杂度;空间效率也称为空间复杂度。在计算机技术发展的几十年中,空间资源变得不是非常重要了,因此在一般的算法分析中,讨论的主要是时间复杂度,当然空间复杂度的分析也是如此。

    在算法分析中,我们不使用时间的标准单位(例如:秒,毫秒等)来衡量算法的快慢,而是使用基本操作的次数来衡量时间复杂度。并且,我们在分析时间复杂度的时候仅关注执行次数的增长次数及其常数倍。

    对于大规模的输入,增长次数是非常重要的,下面表中第一列给出输入数据的规模,后面的每列是不同时间复杂度对应的执行次数。可以看出logn是最快的,n!是最慢的。

    由换底公式可知:log₂N和logN他们之间是常数倍的关系。因此在分析时常会忽略掉底数写成logN。一般在实践中,我们算法的时间复杂度都是在nlogn之下的,例如快速排序算法,它的时间复杂度就是nlogn。而一个需要指数级别操作的算法仅仅只能用于小规模的计算。

    有些时候时间复杂度不仅仅取决于输入数据的规模,还取决于输入数据的一些特定的细节(例如:快速排序算法的最快情况仅需要nlogn,而最坏情况下需要n²。这种差异就取决于原来的序列是随机的还是较为有序的)因此,我们还需要最坏,平均,最优这三种时间复杂度来刻画一个算法的实际情况。所以当一个算法的最优时间复杂度都不能满足要求的时候,那么该算法就可以立即被抛弃。最坏时间复杂度刻画的最坏的情况并不是经常出现的,因此在分析的时候,往往采用的是平均时间复杂度来刻画一个实际问题。

    在求解时间复杂度的时候往往需要一些数学公式来帮助我们。

    这些公式在分析算法的时间复杂度时非常有用。最好能够记住他们。

    有三种符号表示的作为分析时间复杂度的方式,分别是O,Ω,θ。简单来说,它们的含义是这样的

    O(n)表示增长次数小于等于n的算法;

    Ω(n)表示增长次数大于等于n的算法;

    θ(n)表示增长次数等于n的算法;

    如果一个算法是由两部分组成的,那么他的时间复杂度应该由下面的定理给出:

    该定理说明了一个算法整体效率是由具有较大增长次数那部分决定的(效率差的那部分)。

    有时候分析算法的时间复杂度需要比较两个函数的极限情况,根据高等数学的知识,我们知道有高阶无穷小,同阶无穷小,以及低阶无穷小。它们对应如下的增长次数:

    在上述这样的极限的时候,有时候需要使用两个重要极限以及洛必达法则。当然还有上面的史特林公式。

    洛必达法则

    当然,在实际情况下如果输入规模较小的话,那么不同算法之间的时间复杂度几乎对执行没有什么影响,当n的规模大的时候必须认真考虑算法的时间复杂度。下表给出了基本的效率类型。

    这里有道很有意思的题目,暂时留在这里,题目来自《算法设计与分析基础》。

    非递归算法的通用效率分析方案:

    1. 决定使用哪些量作为输入的数据规模;

    2. 找出算法的基本操作(一般都是在最内层的循环中,并且这个操作每次都要被执行);

    3. 检查基本操作的次数是否只依赖于输入数据的规模,而与其他东西无关。(若与其他事物有关,那么则应分析出最坏,最优,平均这三种复杂度);

    4. 建立基本操作执行次数的求和表达式;

    5. 利用求和运算的公式和法则来建立一个操作次数的闭合公式,或者至少确定它的增长次数。

    在分析的过程中可能会用到一些求和公式:

    递归算法的数学分析,由于递归是直观的,我们必须找出递归过程中的初始条件和递推关系。根据初始条件和递推关系求出通项公式。对通项公式分析可以得出算法执行的次数,当然和循环不同的是递归过程中会产生额外的空间开销和时间开销。这就是简单带来的坏处吧!递归算法的分析步骤如下:

    1. 决定使用哪些量作为输入的数据规模;

    2. 找出算法的基本操作;

    3. 检查基本操作的次数是否只依赖于输入数据的规模,而与其他东西无关。(若与其他事物有关,那么则应分析出最坏,最优,平均这三种复杂度);

    4. 建立一个递推关系式,并且求出初始条件,这样就明确了基本操作执行的次数;

    5. 由递推关系求出基本操作的关系式,或者至少确定它的增长次数;

    大多是递归算法的递推公式是由类型与f(n)= f(x) + C;或者是f(n)= f(x)*C;这种类型的递推公式它在等号右边只会出现一个f(x),这种类型的大都可以用迭代的方式求出其通项公式。但是像斐波那契数列这种递推公式,F(N) = F(N-1)+F(N-2)(这种递推公式被归类为常系数齐次二阶线性递推式)。这种形式的递推公式可以看做是一个二阶常系数线性差分方程来对待。通过求其特解和通解,然后求出全解。(全解 = 特解+通解)关于解差分方程,我是在《信号与系统》中学习的,具体的解法和高等数学中的微分方程的解法是差不多的。

    用斐波那契数列来说明求解的大致过程,解完之后发现这个问题确实在高中时没法解决,无法求出通项公式。

    这样我们就得到了斐波那契数列的通项公式。使用递归求解斐波那契数列总是做了很多重复计算:F(N) = F(N-1)+F(N-2)因为算F(N-1)需要算F(N-2)。所以对于数值运算,通常最好不要使用递归。

    算法的经验分析

    即使我们掌握了上面的这些分析技术,但是在实际中,某些算法还是无法分析的。数学方式并不总是有效的。经验分析是对一些样本输入进行时间或者是操作次数的统计,做出他们的平均值,可以看做是平均效率。也可以使用语言本身提供的系统函数来计算程序执行的时间。

    展开全文
  • 算法学习之算法效率分析

    千次阅读 2020-06-17 15:52:03
    文章目录算法效率分析基础输入规模的度量运行时间的度量单位增长次数算法的最优、最差和平均效率分析框架概要渐进符号和基本效率类型符号О符号Ω符号Θ利用极限比较增长次数基本的效率类型关于渐进时间效率:非递归...

    算法效率分析基础

    输入规模的度量

    几乎所有的算法,对于规模更大的输入都需要运行更长的时间。例如,需要更多时间来对更长的数组排序,更大的矩阵相乘也需要花费更多时间,等等。所以,使用一个以算法输入规模式n为参数的函数,来研究算法效率是非常合乎逻辑的。

    运行时间的度量单位

    • 统计算法每一步操作的执行次数——不可行。

    • 统计算法中最重要的操作—基本操作的执行次数。

      • 排序的基本操作:比较
      • 矩阵乘法的基本操作:乘法
      • 多项式求值的基本操作:乘法
    • 执行次数C(n)是输入规模n的函数,算法运行时间T(n)是执行次数的函数:T(n) ≈ copC(n)
      其中: cop为特定计算机上一个基本操作的执行时间,是常量。

      增长次数

      为什么对于大规模的输入要强调执行次数的增长次数呢?这是因为小规模输入在运行时间上差别不足以将高效的算法和低效的算法法区分开来

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

    • 一个算法的最差效率是指当输入规模为n时,算法的最坏情况下的效率。这时,相对于其他规模为n的输入,该算法的运行时间最长。
    • 一个算法的最优效率是指当输入规模为n时,算法在最优情况下的效率。这时,与其它规模为n的输入相比,该算法运行得最快。
    • 然而,无论是最差效率分析还是最优效率分析都不能提供一种必要的信息:在“典型”或者“随机”输入的情况下, 一个算法会具有什么样的行为。这正是平均效率试图提供给我们信息。
    • 还有一种类型的效率称为摊销效率。它并不适用于算法的单次运行,而是应用于算法对同样数据结构所执行的一系列操作。

    分析框架概要

    • 算法的时间效率和空间效率都用输入规模的函数进行度量。
    • 我们用算法基本操作的执行次数来度量算时间效率。通过计算算法消耗的额外存储单元的数量来度量空间效率。
    • 在输入规模相同的情况下,有些算法的效率会的显著差异。对于这样的算法,我们需要区分最差效率,平均效率和最优效率。
    • 本框架主要关心,当算法的输入规模趋向于无限大的时候,其运行时间(消耗的额外空间)函数的增长次数。

    渐进符号和基本效率类型

    在这里插入图片描述

    符号О

    定义1 我们把函数t(n)包含在O(g(n)) 中,记作t(n) ∈ O(g(n)) ;它的成立条件是:对于所有足够大的n, t(n) 的上界由g(n)的常数倍数所确定,也就是说,存在大于0的常数c和非负的整数n0,使得:
    在这里插入图片描述

    符号Ω

    定义2 我们把函数t(n)包含在Ω(g(n))中,记作t(n)∈Ω(g(n)),它的成立条件是:对于所有足够大的n, t(n)的下界由g(n)的常数倍所确定,也就是说,存在大于0的常数c和非负的整数n0,使得:

    在这里插入图片描述

    符号Θ

    定义 3我们把函数t(n)包含在Θ(g(n)) 中,记作t(n) ∈ Θ(g(n)) ;它的成立条件是:对于所有足够大的n, t(n) 的上界、下界都由g(n)的常数倍数所确定,也就是说,存在大于0的常数c1,c2和和非负的整数n0,使得:

    在这里插入图片描述

    利用极限比较增长次数

    虽然符号O, Ω和Θ的正式定义对于证明它们的抽象性质是不可缺少的,但我们很小直接用它们来比较两个特定函数的增长次数。有一种较为简便的比较方法,它是基于对所计论的两个函数的比率求极限。有3种极限情况会发生:

    在这里插入图片描述

    基本的效率类型

    在这里插入图片描述

    关于渐进时间效率:

    • 对规模较小的问题,决定算法工作效率的可能是算法的简单性而不是算法执行的时间

    • 当比较两个算法的效率时,若两个算法是同阶的,必须进一步考察阶的常数因子才能辨别优劣。

    非递归算法的数学分析

    考虑一下从n个元素的列表中查找元素最大值的问题.简单起见,我们假设列表是用数组实现的。下面给出一个解决问题的标准算法的伪代码。

    算法  MaxElement(A[0..n-1])
             //求给定数组中最大元素的值
            //输入:实数数组A[0..n-1]
            //输出:A中最大元素的值
            maxval←A[0]
            for i←1 to n-1 do
                  if A[i]>maxval
                      maxval←A[i]
             return maxval
    

    确定基本操作:是赋值运算还是比较运算?
    把C(n)记作比较运算的执行次数,并试图寻找一个公式将它表达为规模n的函数。:
    在这里插入图片描述

    分析非递归算法效率的通用方案

    1. 决定用哪个(哪些)参数作为输入规模的度量
    2. 找出算法的基本操作(作为一规律,它总是位于算法的最内层循环中)。
    3. 检查基本操作的执行次数是否只依赖输入规模。如果它还依赖一些其他的特性,则最差效率、平均效率以及最优效率(如果必要)需要分别研究。
    4. 建立一个算法基本操作执行次数的求和表达式。
    5. 利用求和运算的标公式和法则来建立一个操作次数的闭合公式,或者至少确定它的增长次数。

    考虑一下元素惟一性问题:验证给定数组中的元素是否全部惟一。

    下面这个简单直接的算法可以解决该问题。

    算法  UniqueElements(A[0..n-1])
    //验证给定数组中的无素是否全部惟一
    //输入:数组A[0..n-1]
    //输出:如果A中的元素全部惟一,返回“true”
    //            否则,返回“false”.
     for i←0 to n-2 do
           for j←i+1 to n-1 do
                if A[i]=A[j] return false
    Return true
    

    在这里插入图片描述
    这个结果是完全可以预测的:在最坏的情况下,对于n个元素的所有n(n-1)/2对两两组合,该算法都要比较一遍。

    计算两个n阶方阵乘积的例子

    算法伪代码:
    MaxtrixMultiplication(A[0..n-1,0..n-1],B[0..n-1,0..n-1])
        for i=0 to n-1 do
           for j=0 to n-1 do 
              C[i,j]=0.0
              for k=0 to n-1 do
               C[i,j]=C[i,j]+A[i,k]*B[k,j]
        return C
    

    分析:

    • 输入规模的度量:n
    • 基本操作:乘法
    • 执行次数表达式

    M(n)= 在这里插入图片描述

    • 运行时间:T(n)≈CmM(n)∈Θ(n3)
      其中Cm为执行一次乘法在某计算机上所需要的时间
    • 若考虑加法,则
      T(n)≈CmM(n)+CaA(n)∈Θ(n3)
    • 其中Ca为执行一次加法在某计算机上所需要的时间,A(n)为加法的执行次数。

    递归算法的数学分析

    对于任意非负整数n,计算阶乘函数F(n)=n!的值。因为
    当n≥1时,n!=1·…·(n-1)·n=(n-1)!·n

          并且根据定义,0!=1,我们可以使用下面的递归算法       计算F(n)=F(n-1)·n
     算法  F(n)
          //递归计算n!
          //输入:非负整数n
          //输出:n!的值
             if n=0 return 1
             else return F(n-1)*n
           我们用n本身来指出算法的输入规模(而不是它的二进制表示的比特数)。该算法的基本操作是乘法,我们把它的执行次数记作M(n)。因为函数F(n)的计算是根据下面公式:
               当n>0时,F(n)=F(n-1)*n
    

    所以,计算这个公式时,用到的乘法数量M(n)需要满足这个等式:
    当n>0时,M(n)=M(n-1)+1

    ​ 的确,计算F(n-1)需要用M(n-1)次乘法,还有一次乘法用来把该结果乘法n。为了确定一个惟一解,我们还需要一初始条件来告诉我们该序列的起始值。为了得到这个起始值,我们可以观察该算法停止递归调归调用时的条件:if n=0 return 1 所以,我们所遵循的初始条件是:
    ​ M(0)=0

    这样,我们成功地建立了关于该算法的乘法次数M(n)的递推关系和初始条件:
    当n>0时,M(n)=M(n-1)+1
    M(0)=0
    最终结果为 M(n)=M(n-1)+1=…=M(n-i)+i=…=M(n-n)+n=n

    递归的思路

    • 实际上, 递归思路是把一个不能或不好直接求解的“大问题”转化成一个或几个“小问题”来解决,再把这些“小问题”进一步分解成更小的“小问题”来解决,如此分解,直至每个“小问题”都可以直接解决(此时分解到递归出口)。
    • 但递归分解不是随意的分解,递归分解要保证“大问题”与“小问题”相似,即求解过程与环境都相似。并且有一个分解的终点。从而使问题可解。

    分析递归算法效率的通用方案

    1. 决定用哪个(哪些)参数作为输入规模的度量。
    2. 找出算法的基本操作。
    3. 检查一下,对于相同规模的不同输入,基本操作的执行次数是否不同。如果不同,则必须对最差效率、平效率以及最优效率作单独研究。
    4. 对于算法基本操作的执行次数,建立一个递推关系以及相应的初始条件。
    5. 解这个递推式,或者至少确定它有解的增长次数。

    汉诺塔(Tower of Hanoi)问题

    在这里插入图片描述

    盘子移动时必须遵守以下规则:

    • 每次只能移动一个盘子;
    • 盘子可以插在A,B和C中任一塔座;
    • 不能将一个较大的盘子放在较小的盘子上。

    分析:

    输入规模:盘子的数量
    记M(n) 为移动盘子的次数,则递归关系式
    M(n)=M(n-1)+1+M(n-1)
    M(1)=1
    解该递归关系可得
        M(n)=2n-1

    这是个指数级的算法,是算法不好吗?
    对这个问题而言,它是一个高效的算法.

    斐波那契数列

    斐波那契数列—0,1,1,2,3,5,8,13,21,34,…
    这个数列可以用一个简单的递推式和两个初始条件来定义:
    当n>1时,F(n)=F(n-1)+F(n-2)
    F(0)=0,F(1)=1

    算法 F(n)
    //根据定义,递归计算第n个斐波那契数
    //输入:一个非负整数n
    //输出:第n个斐波那契数
        if n≤1 return n
        else return F(n-1)+F(n-2)
    

    该算法的基本操作很明显是加法,我们把A(n)定义为这个算法在计算F(n)的过程中所做的加法次数。因而,计算F(n-1)和F(n-2)所需要的加法次数分别是A(n-1)和A(n-2),而该算法还需要做一次加法来计算它们的和。因此,对于A(n)我们有下面的递推式:
    当n>1时,A(n)=A(n-1)+A(n-2)+1
    从递推式中,我们可以预计到该算法的效率不高。的确,它包含两个递归调用,而这两个调用的规模仅比n略小一点。通过观察该算法的递归调用树,我们也能发现该算法效率低下的原因。相同的函数值被一遍一遍地重复计算,这很明显是一种效率低下的做法。

    在这里插入图片描述

    通过简单地对斐波那契数列的连续元素进行迭代计算,我们得到了一个快得多的算法,就像下面的这个算一样:

    算法  Fib(n)
    //根据定义,迭代计算第n个斐波那契数
    //输入:一个非负整数n
    //输出:第n个斐波那契数
      F[0]0;F[1]1
      for i←2 to n do 
            F[i]←F[i-1]+F[i-2]
      return F(n)
    

    很明显,这个算法要做n-1次加法运算。所以,它和n一样都是线性函数,“仅在”作为n的二进制位数的函数时,才表现为指出级函数。注意,没有必要特意使用一个数组在存储斐波那契数列的前面元素:为了完成该任务,只需要存储两个元素就足够了。

    展开全文
  • 算法效率分析

    千次阅读 2012-09-12 23:23:27
    1.非递归算法效率分析 l 确定算法的输入规模(如数组的长度,矩阵的阶) l 找算法的基本操作(一般位于最内层循环) l 确定基本操作的执行次数是否只与输入规模有关,若还与输入的其他特性,则要分别计算...

    1.非递归算法的效率分析

    l 确定算法的输入规模(如数组的长度,矩阵的阶)

    l 找算法的基本操作(一般位于最内层循环)

    l 确定基本操作的执行次数是否只与输入规模有关,若还与输入的其他特性,则要分别计算算法的最优、最差、平均效率

    l 建立基本操作次数的求和公式

    l 解求和公式,算复杂度

    2.递归算法的效率分析

    l 前三步和非递归一样

    l 找到基本操作的递推关系式。

    l 解这个关系式

    3.解递推关系式的两种方法

    l 第一种(反向替换法)

    M(n)=2M(n-1)+1 (n>1)  M(1)=1

    M(n)=2(2M(n-2)+1)+1=2^2M(n-2)+2+1

    =2^3M(n-3)+2^2+2+1

    .....

    =2^(n-1)M(1)+2^(n-1)-1=2^n-1

    l 第二种(主定理)

    主定理:

    若有递推式:T(n)=aT(n/b)+f(n)

    根据主定理可以确定T(n)的增长次数



    展开全文
  • 算法效率分析   算法效率分析的目的是,看算法是都可以执行,并在同一个问题存在多个算法的时候,可以从空间和时间性能上进行比较,以便从中挑选出较优的算法。   衡量算法效率的方法主要有两类:事后统计...
    算法效率分析
      算法效率分析的目的是,看算法是都可以执行,并在同一个问题存在多个算法的时候,可以从空间和时间性能上进行比较,以便从中挑选出较优的算法。
      衡量算法效率的方法主要有两类:事后统计法和事前分析估算法。
      事后统计法:事后统计法需要先将算法实现,然后测算其时间和空间的开销。这种方式的缺陷很明显,首先,这种方法必须将算法转变为可执行的代码,其次,时间开销和空间开销往往以来与计算机的软件和硬件配置,这种方式测试出来的时空复杂度不具备普适性,很容易掩盖算法本身的优劣。
      事前分析估算法:这种方式是通过计算算法的渐进复杂度来衡量算法的效率。这里我们需要进行一些假设:我们需要假定我们拥有一台计算机,算法已经实现且没有错误,我们假定执行一条基本语句或者一个基本运算需要花费一个单位时间,我们从算法选取一种对于所研究的问题来说是基本操作的源操作,例如循环,等,以该基本操作重复执行的次数作为算法的时间度量。
      一般我们通常采用的都是事前估计法,来测试算法的时间复杂度和空间复杂度,事前估计法一般采用的是数学上的定义。
    展开全文
  • 参考 第二章 算法效率分析基础 2.1 分析框架 输入规模,运行时间,增长次数,最优最差平均效率 2.2 基本符号和效率类型 一张图,注意一般的效率类型都是什么情况 2.3 非递归算法的...
  • 算法时间效率分析

    千次阅读 2020-01-30 04:12:02
    对于现代计算机,内存已经比较足够,对算法效率影响最大的是时间复杂度。 在时间复杂度的分析中,抛开具体机器,我们主要研究的是运行的语句数量。 运行的语句数量取决于需要处理的元素个数和算法的循环结构。 ...
  • KMP算法效率分析

    千次阅读 2016-10-20 12:55:12
    上一节,我们研究了KMP算法的实现原理,这节,我们从分析的角度看看KMP算法的时间复杂度,通过分析证明,我们代码对算法的实现,是能保证线性复杂度的
  • 可达性分析算法

    千次阅读 2019-10-02 20:25:22
    可达性分析算法是用来判断对象是否存活的方法,与之相同的算法还有引用计数法。 Java、C#使用的是可达性分析算法,在一些脚本语言中会使用引用计数法,例如:Python,Squirrel。 引用计数法: 原理:有一个地方...
  • 算法效率的衡量

    千次阅读 2017-11-18 07:58:26
    执行时间反应算法效率假设对于同一问题,我们给出了两种解决算法,在两种算法的实现中,我们对程序执行的时间进行了测算,发现两段程序执行的时间相差悬殊,由此我们可以得出结论:实现算法程序的执行时间可以反应出...
  • 算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间...
  • 算法分析指的是:对算法在运行时间和存储空间这两种资源的利用效率进行研究。 即时间效率和空间效率。   时间效率算法运行有多快; 空间效率算法运行时需要多少额外的存储空间。 (时间效率也叫时间复杂度...
  • 数据结构算法和算法效率评价

    千次阅读 2017-11-24 14:25:20
    一、算法的基本概念 算法(Algorithm):是针对特定问题的问题求解步骤的一种描述。它是指令的有限序列;算法具有如下五个重要特征: 1.1、有穷性:有穷步骤,有穷计算时间; 1.2、确定性:每一条指令必须有确切的...
  • 算法效率的度量方法

    千次阅读 2017-11-27 14:56:34
    主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。缺陷: 1、必须依据算法事先编制好测试程序,通常需要花费大量时间和精力,完了发觉测试的...
  • 算法效率分析基础1. 分析框架算法的时间效率和空间效率都用输入规模的函数进行度量。我们用算法基本操作的执行次数来度量算法的时间效率;通过计算算法消耗的额外存储单元的数量来度量空间效率。(不过通常优先考虑...
  • 算法效率与复杂度

    千次阅读 2018-05-29 20:57:13
    1,what is 算法 算法的五大特性 输入: 算法具有0个或多个输入 输出: 算法至少有1个或多个输出 有穷性: 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成 确定性:算法中...
  • 本节主要熟悉数据结构与算法中一般概念,然后熟悉算法效率分析的大O记法,知识结构如下图所示:什么是算法?1)算法的定义算法(Algorithm),指的是对特定问题求解步骤的一种描述。 在数学上,它是运算步骤的有限序
  • 分析算法的结果意味着预测算法需要的资源。虽然有时我们主要关心像内存、通信带宽或计算机硬件这类资源,但是通常我们想度量的是计算时间。一般来说,通过分析求解某个问题的几种候选算法,我们可以选出一种最有效的...
  • Blob 分析算法

    千次阅读 2016-12-22 21:49:13
    原文:Blob分析算法 http://cvchina.net/thread-403-1-1.html Blob分析(Blob Analysis)是对图像中相同像素的连通域进行分析,该连通域称为Blob。Blob分析可为机器视觉应用提供图像中的斑点的数量、位置、形状和...
  • 递归算法效率分析(时间复杂度,空间复杂度)
  • 算法分析

    千次阅读 2019-12-17 18:01:36
    这篇文章目的是分析算法的复杂度问题,关于算法的定义、特性等等问题在这里不作讲解。 如何度量算法效率 我们知道,算法是解决复杂问题的思路,条条大路通罗马,对于一个复杂的问题,能够解决的算法也有很多种,对于...
  • 各种查找算法效率比较

    千次阅读 2015-03-24 21:24:17
    给定一个已经排好序的N个整数的序列(数据从1到N),在该序列中查找指定的整数,并观察不同算法的运行...(3)分析最坏情况下,三种查找算法的复杂度; (4)测量并比较三种算法在N=100,500,1000,2000,4000,6000
  • 数据结构和算法是一名程序开发人员的必备基本功,不是一朝一夕就能练成绝世高手的。冰冻三尺非一日之寒,需要我们平时不断的主动去学习积累。 引入 先来看一道题: 如果 a+b+c=1000,且 a^2 + b ^2 = c^2(a,b,c 为...
  • web链接分析算法

    千次阅读 2017-03-27 11:06:04
    由此可见,SALSA算法融合了PageRank和HITS算法的基本思想,从实际效果来说,很多实验数据表明,SALSA的搜索效果也都优于前两个算法,是目前效果最好的链接分析算法之一。  从整体计算流程来说,可以将SALSA...
  • 在前面我们实现了选择排序与冒泡排序的具体实现,现在我们从数学的角度分析算法效率问题:  首先我们把两种排序算法的概念重温一遍: 选择排序:在每一轮中,找出最小的元素放在他最终的位置。挺起来有些别扭,...
  • 链接分析算法PageRank和HITS

    千次阅读 2017-09-16 08:54:54
    链接分析算法PageRank和HITS PageRankPageRank是Google创始人提出的链接分析算法计算模型,可以说成就了Google公司。 PageRank考察网页时,不仅考虑到入链数量(指向本网页的其它网页数量),还参考了网页质量,两者...
  • 链接分析算法之:SALSA算法

    万次阅读 2012-09-25 17:04:43
    SALSA算法的初衷希望能够结合...由此可见,SALSA算法融合了PageRank和HITS算法的基本思想,从实际效果来说,很多实验数据表明,SALSA的搜索效果也都优于前两个算法,是目前效果最好的链接分析算法之一。  从整体
  •   CUDA算法效率总的来说,由存取效率和计算效率两类决定,一个好的CUDA算法必定会让两类效率都达到最优化,而其中任一类效率成为瓶颈,都会让算法的性能大打折扣。 存取效率   存取效率即GPU和显存之间的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 386,596
精华内容 154,638
关键字:

分析算法的效率