`
沐刃青蛟
  • 浏览: 6990 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

算法的分析

阅读更多

评价一个算法优劣的要素便是算法的性能(包括时间复杂度和空间复杂度)。当我们去比较两个算法时,最传统的方法就是实践,可以采用控制变量法,让两个算法在同一台机器上以相同的数据跑,比较所花费的时间。这样做不但有些麻烦,而且可能发生奇怪的事,比如:对于第一组数据,算法A优于算法B,而对于第二组数据,算法B优于算法A。这就无法比较两个算法的优劣了。

为了解决上面可能出现的问题,渐进分析应运而生。我们通过使用数据的size来评价一个算法的性能。对于一个有n个数的array,线性查找的时间可用n表示,而折半查找可用Logn表示。

当然,渐进分析也并不能比较任何两个算法的优劣,比如:nLogn100nLogn的两个算法,根据渐进分析,它们的性能并无优劣之分。

 

 

当我们分析一个算法时,可以有三种情况

1.Best case

2.Average case

3.Worst case

比如线性查找:

int search(int arr[], int n, int x)

{

    int i;

    for (i=0; i<n; i++)

    {

       if (arr[i] == x)

         return i;

    }

    return -1;

}

 

1.Best case:

X=arr[0],即要找的值位于数组的首位,此时时间复杂度为O(1),这种情况存在偶然性且不具代表性,因此通常不使用。

2.Average case:

我们假定所有的n+1(x为arr中n个值中的一个或者不在arr中)种情况出现的概率相同,那么

T(n)= [1+2+……+n+(n+1)]/(n+1) = O(n).

这种情况代表了一个算法的平均水平,极具代表性,但是,它很难被算出来,所以,有些算法无法用它表示。

3.Worst case:

X不在arr中,时间复杂度O(n),相对来说,这种情况的可能性更大,最重要的一点是,它代表了一个算法最差的情况,最高的时间按复杂度。当我们知道一个算法的最差情况,那么一个算法必将小于等于最差情况,因此这种情况通常被使用。

 

 

渐进分析算法有以下三种标记:

1.ϴ:同时确定上下限时使用



 

 

2.O:只能确定上限时使用



 

3.Ω:只能确定下限时使用



 

 

循环语句的分析:

 

1.O(1)

 

 // c为常量      for (int i = 1; i <= c; i++) {          // O(1)的语句   }

2.O(n)

 

// c为常量      for (int i = 1; i <= n; i += c) {          // O(1)的语句   }    for (int i = n; i > 0; i -= c) {        // O(1)的语句

}

 

3.O(n2)

// c为常量 

for (int i = 1; i <=n; i += c) {       for (int j = 1; j <=n; j += c) {          // O(1)的语句       }   }    for (int i = n; i > 0; i += c) {       for (int j = i+1; j <=n; j += c) {          // O(1)的语句

}

 

4.O(Logn)

 

for (int i = 1; i <=n; i *= c) {       // O(1)的语句   }   for (int i = n; i > 0; i /= c) {       // O(1)的语句   }

 

5.O(LogLogn)

 

// pow为平方函数

for (int i = 2; i <=n; i = pow(i, c)) {        // O(1)的语句   }   // fun 为开平方函数   for (int i = n; i > 0; i = fun(i)) {        // O(1)的语句   }

 

 

递归函数的分析:

 

1.替换法

步骤:

1) 猜测给定算法的时间复杂度

2) 证明猜测的时间复杂度正确

例:T(n)=2T(n/2)+n

1) 猜测T(n)=O(nLogn)

2) 证明:T(n)<=cnLogn成立

T(n) = 2T(n/2)+n

 <=2c*(n/2)*Log(n/2)+n

 =cnLogn-cnLog2+n

 <=cnLogn (当cLog2>1时)

 

2.递归树法

步骤:

1) 根据递归关系画出递归树

2) 合计总的时间代价

 

For example consider the recurrence relation T(n) = T(n/4) + T(n/2) + cn2            cn2         /      \     T(n/4)     T(n/2) If we further break down the expression T(n/4) and T(n/2), we get following recursion tree.                 cn2           /           \             c(n2)/16      c(n2)/4      /      \          /     \  T(n/16)     T(n/8)  T(n/8)    T(n/4) Breaking down further gives us following                 cn2            /            \             c(n2)/16          c(n2)/4       /      \            /      \c(n2)/256   c(n2)/64  c(n2)/64    c(n2)/16 /    \      /    \    /    \       /    \   To know the value of T(n), we need to calculate sum of tree nodes level by level. If we sum the above tree level by level, we get the following seriesT(n)  = c(n^2 + 5(n^2)/16 + 25(n^2)/256) + ....The above series is geometrical progression with ratio 5/16. To get an upper bound, we can sum the infinite series. We get the sum as (n2)/(1 - 5/16) which is O(n2)

 

 

3.主定理法

 

 

 

 

<!--EndFragment-->
  • 大小: 6.9 KB
  • 大小: 102.4 KB
  • 大小: 123.2 KB
  • 大小: 157.9 KB
分享到:
评论

相关推荐

    西南交通大学-算法分析与设计实验8.1和8.2.docx

    西南交通大学-算法分析与设计实验8.1和8.2.docx西南交通大学-算法分析与设计实验8.1和8.2.docx西南交通大学-算法分析与设计实验8.1和8.2.docx西南交通大学-算法分析与设计实验8.1和8.2.docx西南交通大学-算法分析与...

    算法分析算法分析算法分析

    算法分析算法分析算法分析算法分析算法分析

    数据结构与算法分析:Java语言描述 清晰中文+源代码

    《数据结构与算法分析:Java语言描述 第2版 》是国外数据结构与算法分析方面的经典教材 使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计) 随着计算机速度...

    算法分析考试试卷.rar

    算法分析考试试卷.rar 算法分析考试试卷.rar 我整理的很多算法分析考试真题。

    数据结构与算法分析_Java语言描述(第2版)

    数据结构与算法分析_Java语言描述(第2版).韦斯.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除! 本书是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现...

    数据结构与算法分析(Java版)

    《数据结构与算法分析:Java语言描述 第2版 》是国外数据结构与算法分析方面的经典教材 使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计) 随着计算机速度...

    数据结构与算法分析 C++语言描述 第4版

    本书是数据结构和算法分析的经典教材,书中使用主流的程序设计语言C++作为具体的实现语言。书中内容包括表、栈、队列、树、散列表、优先队列、排序、不相交集算法、图论算法、算法分析、算法设计、摊还分析、查找树...

    算法分析与设计教案算法分析与设计教案

    王晓东的算法分析与设计的配套教案王晓东的算法分析与设计的配套教案王晓东的算法分析与设计的配套教案王晓东的算法分析与设计的配套教案

    数据结构与算法分析 C语言描述 英文版

    《数据结构与算法分析:C语言描述》(英文版第2版)是数据结构和算法分析方面的经典教材。第2版更加精炼并强化了《数据结构与算法分析:C语言描述》(英文版第2版)创新的对算法和数据结构的讲授方法。通过C程序的实现,...

    北大算法分析与设计课件_屈婉玲老师

    算法课程是训练计算思维的重要课程;涉及到对 算法课程是训练计算思维的重要课程;涉及到对 问题的抽象,建模,设计好的求解方法,复杂性 ...北大算法分析与设计课件_屈婉玲老师上课课件,包含答案

    数据结构与算法分析.C++语言描述.4th中文版

    数据结构与算法分析:C++语言描述(第四版)是数据结构和算法分析的经典教材,书中使用主流的程序设计语言C++作为具体的实现语言。书中内容包括表、栈、队列、树、散列表、优先队列、排序、不相交集算法、图论算法、...

    数据结构与算法分析

    本书是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计)。 随着计算机速度的不断增加和功能的日益强大,人们对...

    数据结构与算法分析C++描述习题答案

    数据结构与算法分析C++描述习题答案。 Mark Allerl Weiss教授撰写的数据结构与算法分析方面的著作曾被评为20世纪最佳的30部计算机著作之一,已经成为公认的经典之作,被全球数百所大学采用为教材,广受好评。 本书...

    数据结构与算法分析习题答案

    数据结构与算法分析每章练习的答案 数据结构与算法分析每章练习的答案

    吉林大学算法分析习题课答案.zip

    吉林大学算法分析习题课答案.zip

    算法分析与设计pdf

    算法分析与设计内容包含:递归与分治,动态规划,贪心算法

    算法分析与设计考题.docx

    此文档是山东大学2019.06.04算法分析与设计考题,算法考试之前一直苦于没有往年试题来作参考,所以在6月4号考完算法就立刻把题目全部默写下来,供学弟学妹们参考学习

    中南大学算法分析与设计--课件

    中南大学算法分析的课件。看过很多视频,中南大学的算法分析与设计是讲得比较透彻的视频,尽管离通俗易懂还有点差距,但目前来说是最好的了。里面是配套课件,视频加上课件,算法可以学得差不多了!推荐!

Global site tag (gtag.js) - Google Analytics