精华内容
下载资源
问答
  • 算法分析

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

    这篇文章目的是分析算法的复杂度问题,关于算法的定义、特性等等问题在这里不作讲解。

    如何度量算法效率

    我们知道,算法是解决复杂问题的思路,条条大路通罗马,对于一个复杂的问题,能够解决的算法也有很多种,对于有多种解决方案的情况,我们当然是想选择一种快速、有效的算法了。那么我们该如何知晓一个算法的效率呢?

    1、事后统计法

    该方法通过设计好的测试程序和数据,然后在计算机中运行,接着对运行时间进行比较,耗时少的效率高。

    但很显然,这种方式有很大缺陷,首先,算法的测试数据需要花时间设计,因为不同的测试数据往往会直接影响运行时间,然后是计算机的硬件也会影响运行时间。这就造成了度量结果的不稳定。

    2、事前分析法

    由此,事前分析法诞生了,该方法无需运行程序,就能够分析出一个算法的效率。

    经过大量分析,前辈们总结出一个算法在计算机上运行时所消耗的时间取决于以下因素:

    1. 算法采用的策略、方法
    2. 编译产生的代码质量
    3. 问题的输入规模
    4. 机器执行指定的速度

    我们抛开第四点,因为第四点是由计算机硬件决定的,我们无法左右。对于一个算法的效率,它的决定因素就是算法的好坏和问题的输入规模。

    通过例子来感受一下:

    void main(){
    	int i,sum = 0,n = 100;
    	for(i = 1;i <= n;i++){
    		sum += i;
    	}
    	printf("%d",sum);
    }
    

    这段代码相信大家都不陌生,这是一个求1到100之间数字和的程序,我们可以来分析一下程序执行的步骤。

    首先,程序执行第一行代码,int i,sum = 0,n = 100;只执行了一次,然后是for循环,循环条件i = 1;i <= n;i++和循环体sum += i;分别执行了n+1次和n次,最后是输出语句printf("%d",sum);,只执行一次。

    执行次数分析出来之后,我们将每句代码的执行次数相加,即:1 + (n + 1) + n + 1 = 2n + 3,这段程序所有代码的执行次数为2n+3次,我们继续看一段程序:

    void main(){
    	int sum = 0,n = 100;
    	sum = (1 + n) * n / 2;
    	printf("%d",sum);
    }
    

    这是刚才求和程序的改进版本,首项加尾项的和乘以项数除以2,即可求出1到100的和,我们来算算这个程序的执行次数。会发现,这段程序中总共三行代码,都只执行了一次,那么总共的执行次数就为3。

    对于事前分析法,我们无需关心实现的语言种类,运行的计算机硬件,忽略循环索引的递增、循环终止条件、变量声明和输出语句等等操作,即可得到一个比较客观的算法效率。

    两个程序对于同一个问题的输入规模是n(输入规模指的是输入量的多少),对于第一个程序,忽略这些因素之后,它的效率为n,第二个程序,它的效率为1。通过比较执行效率不难发现,两个算法的效率相差的不是一点。

    函数的渐进增长

    当然了,算法的效率度量远没有这么简单,我们通过分析来总结一下该如何去计算一个算法的效率。

    首先,我们假设有两个算法,这两个算法的输入规模都为n,而算法1要做2n+3次操作,算法2要做3n+1次操作,你能从操作次数上就判断出哪个算法更高效吗?这其实是办不到的,我们分析一下:

    次数 2n+3 2n 3n+1 3n
    n =1 5 2 4 3
    n = 2 7 4 7 6
    n = 10 23 20 31 30
    n = 100 203 200 301 300

    通过分析发现,当n = 1时,算法1不如算法2,而当n = 2时,算法1和算法2效率相同,按照这个规律,随着n逐渐增大,算法1的效率会逐渐高于算法2。

    此时给出这样的定义,当输入规模n在无限制的情况下,只要超过了一个数值N,这个函数就总是大于另一个函数,我们称函数是渐进增长的。从表格数据中,我们还可以发现,对于常数项,比如2n+3和2n在n的变化下,其函数值并不受影响,所以在计算算法效率的时候可以忽略常数项。

    我们再假设有两个输入规模都为n的算法,算法1要做4n + 8次操作,算法2要做2n2+1次操作,继续分析:

    次数 4n+8 n 2n2+1 n2
    n = 1 12 1 3 1
    n = 2 16 2 9 4
    n = 10 48 10 201 100
    n = 1000 4008 1000 2000001 1000000

    当n = 1时,算法1不如算法2,而当n = 10时,算法1的效率高于算法2,此后,随着n的逐渐增大,算法1的优势越来越明显,我们还能发现,这里除了去掉常数项外,还去掉了与n相乘的常熟,比较n与n2,结论相同。由此可以得出结论,算法效率与最高次项的常数也没有关系。

    我们继续假设有三个输入规模都为n的算法,算法1要做2n2次操作,而算法2要做3n+1次操作,算法3要做2n2+3n+1次操作,继续分析:

    次数 2n2 3n+1 2n2+3n+1
    n = 1 2 4 6
    n = 2 8 7 15
    n = 10 200 31 231
    n = 100 20000 301 20301
    n = 1000 2000000 3001 2003001

    分析发现,随着n的逐渐增大,算法1和算法2的差距逐渐拉大,当n无穷大时,算法1和算法2的效率基本相同,所以得出结论,算法效率与函数中的常数项和其它次要项没有关系,我们只需关注最高次项。

    时间复杂度

    扯了这么多,就是为了引出算法的时间复杂度,在前面的分析中我们得出结论,一个算法,随着输入规模n的增大,它会越来越优于(或者差于)另一算法,这其实就是事前分析法的依据,通过算法时间复杂度来估算算法时间效。那么什么是算法的时间复杂度呢?

    定义:

    在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级,算法的时间复杂度,也就是算法的时间度量,记作:T(n) = O(f(n))。它表示随着问题规模n的增大, 算法执行时间的增长率与f(n)的增长率相同,称作算法的渐进时间复杂度,简称时间复杂度。其中f(n)是问题规模的某个函数。

    这样用大写字母O来体现时间复杂度的方法,我们称之为大O记法。

    如何分析算法的时间复杂度

    如何分析出一个算法的时间复杂度,也叫推导大O阶,其实可以根据上面分析得出的结论:

    1. 用常数1取代程序中的所有加法常数
    2. 只保留最高阶项
    3. 如果最高阶存在且不为1,则去掉与最高阶相乘的常数

    由此得到的结果即为算法的时间复杂度,下面讲解一下比较常见的大O阶:

    1、常数阶

    看下面的程序:

    void main(){
    	int sum = 0,n = 100;
    	sum = (1 + n) * n / 2;
    	printf("%d",sum);
    }
    

    执行次数为3,此时根据结论,用常数1代替所有加法常数,没有最高阶项,所以该算法的时间复杂度为O(1)。

    2、线性阶

    看下面的程序:

    void main(){
    	int i,sum = 0,n = 100;
    	for(i = 1;i <= n;i++){
    		sum += i;
    	}
    	printf("%d",sum);
    }
    

    执行次数为1 + (n + 1) + n + 1 = 2n + 3,根据结论,用常数1代替加法常数,3替换为1;保留最高阶项2n,去除与最高阶项相乘的常数,所以该算法的时间复杂度为O(n)。

    其实在计算的时候,我们无需这样算出每一句代码的执行次数,对于赋值、循环条件、输出语句,我们可以直接不考虑,所以可以直接得出该算法的时间复杂度为O(n)。

    3、对数阶

    看下面的程序:

    void main(){
        int count = 1;
        while(count < n){
            count *= 2;
        }
    }
    

    该程序中我们只需得出循环次数即可求出时间复杂度,由于每次count乘以2之后,就距离n更近了一分,也就是说,有多少个2相乘后大于n,才会退出循环。由2x = n得出x = log2n,所以该算法的时间复杂度为O( logn)。

    4、平方阶

    看下面的程序:

    void main(){
        int i,j,n = 100;
        for(i = 0;i < n;i++){
            for(j = 0;j < n;j++){
                printf("%d\t",n);
            }
        }
    }
    

    我们知道,对于内层循环,其时间复杂度为O(n),而外层循环不过是执行n次内层循环,所以该算法的时间复杂度为O(n2)。

    那么下面这个程序的时间复杂度为多少呢?

    void main(){
        int i,j,n = 100;
        for(i = 0;i < n;i++){
            for(j = i;j < n;j++){
                printf("%d\t",n);
            }
        }
    }
    

    这里修改了一下内层循环,让j = i。分析一下,当i = 0时,内层循环执行n次;当i = 1时,内层循环执行n - 1次;当i = n - 1时,内层循环执行1次。所以总的执行次数为n + (n - 1) + (n - 2) + …… + 1 = (1/2)n^2 + (1/2)n

    根据推导大O阶的结论,保留最高阶项n2/2,去掉相乘的常数1/2,最终算法的时间复杂度为O(n2)。

    5、其它大O阶

    还有一些常见的大O阶在这里就不做详细讲解了,就简单地提一下:

    nlogn阶 O(nlogn)
    立方阶 O(n3)
    指数阶 O(2n)

    常用的时间复杂度所耗费的时间从小到大依次是:

    O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn)

    算法分析的最坏情况

    在一个算法中,很有可能会出现一些不确定的情况,例如通过循环查找一个数组中的元素,当这个值就是数组的第一个元素时,算法的时间复杂度为O(1),而如果它是最后一个元素,那么时间复杂度为O(n),这也是这个程序中的最坏情况。

    对于所有情况,平均运行时间是最有意义的,然后,一段程序的平均运行时间我们很难通过分析得到,所以一般在没有特殊说明的情况下,求一个算法的时间复杂度都是指求它在最坏情况下的时间复杂度。

    空间复杂度

    随着互联网科技的发展,早先比较贵的存储在如今都较为便宜,所以在某些特定的场景下,可以考虑使用空间来换取时间。

    例如在一个求指定年份是否为闰年的算法中,我们可以事先定义一个有限大的数组,数组下标表示年份,哪一年是闰年,对应的下标元素就为1,此时,如果想判断输入的年份是否为闰年,只需得到该下标的元素值,若为1,则是闰年;若为0,则不是闰年。这样虽然高效,但会加大存储的开销。

    比如排序算法中的基数排序是用空间换取时间的经典算法。

    算法的空间复杂度通过计算算法所需的存储空间实现,空间复杂度的计算公式为:S(n) = O(f(n)),其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数。

    通常情况下,我们更注重算法的时间复杂度,所以,空间复杂度只作为一个了解,不深入讨论。

    展开全文
  • 并行算法分析

    千次阅读 2018-05-13 16:47:45
    并行算法分析 基本指标 并行算法分析 VS 串行算法分析 并行程序设计的复杂性 并行算法的额外开销 性能评价标准 效率 代价 可扩展性 并行算法分析 基本指标 并行算法分析 VS 串行算法分析 串行算法...

    并行算法分析

    基本指标

    并行算法分析 VS 串行算法分析

    1. 串行算法评价:算法时间复杂度表示为输入规模的函数
    2. 并行算法评价:除了输入规模之外,还应考虑处理器数目、**处理器相对运算速
      通信速度**
    3. 评价标准
      • 运行时间
      • 加速比:并行算法比串行算法快多少?

    并行程序设计的复杂性

    1. 足够的并发度(Amdahl定律)
    2. 并发粒度
      独立的计算任务的大小
    3. 局部性
      对临近的数据进行计算
    4. 负载均衡
      处理器的工作量相近
    5. 协调和同步
      谁负责?处理频率?

    并行算法的额外开销

    除了串行算法要做的之外的工作
    1. 进程间通信:最大开销,大部分并行算法都需要
    2. 进程空闲:负载不均、同步操作、不能并行 化的部分
    3. 额外计算

    • 最优串行算法难以并行化,将很差的串行算法并行化,并行算法计算量>最优串行算法

    • 最优串行算法并行化也会产生额外计算:并行快 速傅立叶变换,旋转因子的重复计算

    性能评价标准

    1. 运行时间
      串行算法:TS,算法开始到结束的时间流逝
      并行算法:TP,并行算法开始到最后一个进 程结束所经历时间

    2. 并行算法总额外开销
      To=pTP – TS

    3. 加速比
      S=TS/TP

    效率

    • 理想并行算法,S=p
    • 难实现,不是100%时间都用于有效计算
    • 求和例子,部分时间处理器处于空闲
    • 效率(Efficiency):度量有效计算时间
    • 理想情况=1,正常0~1
    • E=S/p
    • 求和例子
      E= Q(n/logn)/n= Q(1/logn)

    代价

    • cost,并行算法运行时间×处理器数量
    • 所有处理器用来求解问题的时间总和
    • E=TS/cost,p=1时,cost=TS
    • 代价最优,cost-optimal:代价与最优串 行算法运行时间渐进相等——E= Q(1)
    • 代价也称为工作量(work),处理器时 间积(processor-time product)

    可扩展性

    可扩展性是高性能并行机和并行算法追求的主要目标,其主要作用:
    ❑ 度量并行系统性能的方法之一
    ❑ 度量并行体系结构在不同系统规模下的并行
    处理能力
    ❑ 度量并行算法内在的并行性
    ❑ 利用系统规模和问题规模已知的并行系统性 能来预测规模增大后的性能:scale down,
    适合开发、调试,不适合性能预测

    展开全文
  • 算法和算法分析总结

    千次阅读 2017-07-26 22:01:15
    算法和算法分析总结 算法:是对特定问题求解步骤的一种描述,是指令的有限序列,其中每一条指令表示一个或多个操作。 算法的5个特性: (1)有穷性:一个算法总是(对于任何合法的输入值)在执行有穷步之后结束,且...

    算法和算法分析总结

    算法:是对特定问题求解步骤的一种描述,在计算机中表示为指令的有限序列,并且每一条指令表示一个或多个操作。(算法是描述解决问题的方法)

    算法的5个特性

    (1)有穷性:一个算法总是(对于任何合法的输入值)在执行有穷步之后结束,且每一步都可在有穷时间内完成。(有穷性指合理的、可接受的)

    (2)确定性:算法中每一条指令必须有确切的含义,读者理解时不会产生二义性。并且,在任何条件下,

    算法只有唯一的一条执行路径,即对相同的输入只能得到相同的输出。

    (3)可行性:一个算法能行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。

    (4)输入:一个算法有零个或多个的输入,这些输入来自于某个特定的对象的集合。

    (5)输出:一个算法有一个或多个的输出,这些输出是输入有着某些特定关系的量。

    算法设计的要求

    (1)正确性:算法应满足具体问题的需求。

    “正确”大体可分为四个层次:a.程序不含语法错误;b.程序对于几组输入数据能够得出满足规格说明要求的

    结果;c.程序对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足规格说明要求的结果;

    d.程序对于一切合法的输入数据都能产生满足规格说明要求的结果。(通常c层意义的正确性作为衡量一个

    程序是否合格的标准)。

    (2)可读性:算法主要是为了人的阅读与交流,其次才是机器执行。可读性好有助于人对算法的理解。

    (3)健壮性:当输入数据非法时,算法也能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。

    (4)效率与低存储量需求:效率指的是算法执行的时间,执行时间短的算法效率高;存储量需求指算法执行过程中所需要的最大存储空间。

    算法效率的度量方法:

    1、事后统计方法:这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。

    2、事前分析估算方法 :在计算机程序编制前,依据统计方法对算法进行估算。

    注意:如果抛开与计算机硬件、软件有关的因素,一个程序的运行时间,依赖于算法的好坏和问题的输入规模(输入量的多少)。

    函数的渐近增长:给定两个函数f(n)和g(n),如果存在一个整数N,使得对于所有的n>N,f(n)总是比g(n)大,那么,我们说f(n)的增长渐近快于g(n)。

    算法的时间复杂度:

    在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度。其中f(n)是问题规模n的某个函数。

    常见的时间复杂度所消耗时间的大小排列:


    推导大O阶的方法:

    (1)用常数1取代运行时间中所有的加法常数。(2)在修改后的运行次数函数中,只保留最高阶项。

    (3)如果最高阶项存在且不是1,则去除与这个项相乘的常数。

    算法的空间复杂度

    通过计算算法所需的存储空间实现,算法空间复杂度的计算公式记作:S(n)=O(f(n)),其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数。

    注意:通常,我们都是使用“时间复杂度”来指运行时间的需求,使用“空间复杂度”指空间需求。当不用限定词地使用“复杂度”,通常指时间复杂度。

    展开全文
  • 算法分析与优化

    千次阅读 2019-12-29 20:26:56
    算法分析 同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率.算法分析的目的在于选择合适算法和改进算法.一个算法的评价主要从时间复杂度和空间复杂度来考虑. 1、时间复杂度 (1)时间频度 ...

    算法分析

    同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率.算法分析的目的在于选择合适算法和改进算法.一个算法的评价主要从时间复杂度和空间复杂度来考虑.
    1、时间复杂度
    (1)时间频度
    一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度,记为T(n)。
    (2)时间复杂度
    在刚才提到的时间频度中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。但有时想知道它变化时呈现什么规律.为此,引入时间复杂度概念.
    一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。
    在各种不同算法中,若算法中语句执行次数为一个常数,则时间复杂度为O(1),另外,在时间频度不相同时,时间复杂度有可能相同,如T(n)=n2+3n+4与T(n)=4n2+2n+1它们的频度不同,但时间复杂度相同,都为O(n2)。
    按数量级递增排列,常见的时间复杂度有:
    常数阶O(1),对数阶O(log2n),线性阶O(n),
    线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3),……,
    k次方阶O(nk),指数阶O(2n)。随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。
    2、空间复杂度
    与时间复杂度类似,空间复杂度是指算法在计算机内执行时所需存储空间的度量。记作:
    S(n)=O(f(n))
    我们一般所讨论的是除正常占用内存开销外的辅助存储单元规模。

    展开全文
  • 算法分析初步

    千次阅读 2016-05-09 02:19:50
    算法分析 2016年5月9日 1:15 主要包括 对时空复杂度的分析 ,还有算法的实际运行性能及算法可视化。   步骤: 1.量化算法的实际运行性能   选择衡量算法实际性能的量化指标是他的实际运行时间...
  • 【2】JVM-垃圾回收机制算法分析

    万次阅读 2019-12-08 12:07:41
    2、根搜索算法 知识点4:垃圾回收机制策略 1、标记清除算法 (1)应用场景 (2)优缺点 2、复制算法 (1)概念 (2)应用场景 (3)优缺点 3、标记压缩算法 (1)概念 (2)压缩算法简单介绍 (3)优缺点...
  • AKAZE算法分析

    万次阅读 热门讨论 2018-03-16 19:57:53
     局部特征相关算法在过去二十年期间风靡一时,其中代表的有SIFT、SURF算法等(广泛应用于目标检测、识别、匹配定位中),这两种算法是用金字塔策略构建高斯尺度空间(SURF算法采用框滤波来近似高斯函数)。不论SIFT还是...
  • 前言都说数据结构与算法分析是程序员的内功,想要理解计算机世界就不能不懂点数据结构与算法,然而这也备受争议,因为大多数的业务需求都用不上数据结构与算法,又或者说已经有封装好的库可以直接调用,例如Java中的...
  • RMQ算法分析

    万次阅读 2014-08-06 18:48:20
    RMQ算法,是一个快速求区间最值的离线算法,预处理时间复杂度O(n*log(n)),查询O(1),所以是...算法分析:这个算法就是基于DP和位运算符,我们用dp【i】【j】表示从第 i 位开始,到第 i + 2^j 位的最大值或者最小值。
  • 斐波那契数列算法分析

    千次阅读 2018-08-13 12:50:47
    斐波那契数列算法分析 背景: 假定你有一雄一雌一对刚出生的兔子,它们在长到一个月大小时开始交配,在第二月结束时,雌兔子产下另一对兔子,过了一个月后它们也开始繁殖,如此这般持续下去。每只
  • 什么是算法分析

    千次阅读 2018-03-10 14:45:47
    第二:算法分析常见的函数中,线性算法效率最高。第三:当N足够大时,函数的增长率是最重要的。第四:平方算法对输入规模超过几千是不可行的。第五:立方算法对输入规模是几百不可行的。第六:按增长率升序排列的...
  • 算法分析实例

    2015-08-18 22:59:02
    本课是系列课程中的第1部分,具体目标包括:了解数据结构在计算机类人才培养中的重要意义、掌握数据结构的基本概念、掌握数据结构的分类、理解抽象数据类型ADT及其作用,以及初步学会算法分析的“套路”。
  • Python算法分析与设计:最大流算法

    千次阅读 2019-02-01 14:30:03
    Python算法分析与设计:最大流算法 一、实验目的 1、掌握最大流问题的定义,了解流量、容量以及他们之间的关系。 2、掌握通过增广路径求最大流问题的Forder-Fulkerson和Edmond-Karp算法,理解这两个算法之间的异同 3...
  • DWA算法分析

    万次阅读 2019-08-17 13:39:47
    机器人在获得目的地信息后,首先经过全局路径规划规划出一条大致可行的路线,然后调用局部路径规划器根据这条路线及costmap的信息规划出机器人在局部时做出具体行动策略,ROS中主要是使用了DWA算法。在ROS中每当...
  • js实现扫雷-算法分析

    千次阅读 2018-11-21 15:21:59
    本文主要是通过使用Javascript,通过对扫雷游戏中用到的算法分析,一步步实现用到的算法,进而实现扫雷过程,本文没有对实际游戏进行完善,主要是针对于算法分析,帮助小伙伴应对免试或者求职时遇到的算法;
  • 一步步学算法(算法分析)---6(贪心算法)

    千次阅读 多人点赞 2013-09-29 18:45:08
    这个总结的很详细。在学习过程中帮了我很大的忙...参考资料 《算法分析与设计》 王晓东编著 (在排版过程做了些改动。还望见谅) 贪心算法 顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法
  • 这篇小文简单记录了自己的一个小小发现,也就是勒贝格积分和算法分析方法上的一个等同点:其实现在我已经比以前更清楚的看到计算机科学与数学中的相贯通的地方,这也是我看了《算法导论》《具体数学》的部分内容后才...
  • 前面对算法分析的一些常用的 渐进符号 做了简单的描述,这里将使用归并排序算法做为一个实战演练。 这里首先假设读者对归并排序已经有了简单的了解(如果不了解的同学可以自行百度下归并排序的原理)。了解此算法...
  • 排序算法(1)插入排序的算法分析

    千次阅读 2016-07-25 23:11:22
    算法分析 算法伪代码 图示分析 算法复杂度分析 导语 今天,我们介绍的是排序算法经典的一种排序算法,这个算法是插入排序。 相信大家都玩过纸牌。插入排序的工作方式就像许多人排序一手扑克牌。 ...
  • DQN算法分析

    万次阅读 2017-07-31 20:43:30
    分析了DeepMind在2013年和2015 年提出的深度增强算法
  • 本博文主要分析了基于传统计算机视觉的细胞分割算法和基于深度学习的细胞分割算法。... 医学影像分割——细胞分割算法分析与总结 1. 基于传统算法的细胞分割总结 1.1几种常用二值化方法 1.1.1 全局二...
  • 本文主要讲讲简单的递推方程来求解算法的时间复杂度 文章目录1. 递推方程的引入1.1 插入排序时间复杂度求解1.2 二分归并排序时间复杂度求解2 总结 1. 递推方程的引入 汉诺塔问题大家都知道,现在以汉诺塔问题来引入...
  • DCM姿态估计算法分析

    千次阅读 2017-02-15 20:22:16
    DCM姿态估计算法分析飞控算法 以下内容主要是阅读Direction Cosine Matrix IMU: Theory (by William Premerlani and Paul Bizard)写成的内容整理,只是用来自己看的,所以多有省略,详细的请参见原文。 英文原版...
  • 数据结构与算法分析算法分析

    千次阅读 2018-09-21 21:17:54
    1.数学模型  ①4个重要的定义:如果存在正常数c和n使得N&gt;=n时  ,记作  ,记作  当且仅当 且 有   如果 且 有   ②  :f(N)是 T(N)的上界  :f(N)是T(N)的下界 ... ...
  • 横向控制算法分析

    千次阅读 2020-03-13 15:50:51
    跟踪算法介绍与分析
  • 算法分析与设计课程总结

    千次阅读 2017-11-02 23:04:14
    算法分析与设计课程总结 经过8周的学习,我对算法有了更深入的理解。代码水平也有了显著的提高。 我们学习的算法有:递归与分治策略,贪心算法,回溯算法,分支限界算法和动态规划算法。一、递归与分治策略 (一...
  • 【精品计划 附录2】- 算法分析

    万次阅读 多人点赞 2020-05-31 17:06:26
    4. 随机化算法 5. 均摊分析 ThreeSum 1. ThreeSumSlow 2. ThreeSumBinarySearch 3. ThreeSumTwoPointer 倍率实验 数学模型 1. 近似 N3/6-N2/2+N/3 ~ N3/6。使用 ~f(N) 来表示所有随着 N 的增大除以 f(N) 的...
  • 算法分析和数据结构 Python描述版

    千次下载 热门讨论 2012-06-05 01:17:58
    资源原名为:Data Structures and Algorthms Using Python ,是用Python描述数据结构和算法分析,找了好久,终于有Python版的了! 有完整的目录,字体清晰,支持复制和查找。。。 ---------- 资源为英文,下载请谨慎...
  • 算法分析是理论研究,是关于计算机性能和资源利用的研究(尤其关注性能)。 比性能更重要的考虑因素: 正确性、简洁性、可维护性、编程成本、稳定性、功能性、模块化、安全性、可扩展性、用户友好度。 算法的...
  • 附录 A、算法分析 原文:Appendix A Analysis of algorithms 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 部分参考了《Think Python 2e 中译本 第二十一章:算法分析算法分析 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 145,864
精华内容 58,345
关键字:

算法分析