算法分析| 集1(渐近分析)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法分析| 集1(渐近分析)相关的知识,希望对你有一定的参考价值。

为什么分析算法性能?
  应该照顾好许多重要的事情,如用户友好,模块化,安全性,可维护性等。为什么要担心性能?
  对此的答案很简单,只有我们有表现,才能有上述所有的东西。

  比如我们如果表现像货币,我们可以买到所有上述的东西。研究表演的另一个原因是 - 速度很有趣!


给出两个任务的算法,我们如何找出哪一个更好?

  通常对于我们来说,一个天真(“地道”)的方法是实现这两种算法,在计算机上运行两个程序以获得不同的输入,并查看哪一个花费更少的时间。这种算法分析方法存在很多问题。
1)对于某些输入,第一种算法可能比第二种算法性能更好,然而对于另外一些输入,第二种算法可能比第一种算法性能更好。
2)对于一些输入,第一种算法在一台机器上表现更好,而另一种输入则在其他机器上第二种算法运行得更好。

  渐近分析是解决上述问题的重要思想。在渐近分析中,我们根据输入大小来评估算法的性能(我们不测量实际的运行时间)。我们计算,算法的时间(或空间)如何随输入大小而增加。
  例如,让我们考虑排序数组中的搜索问题(搜索给定项目)。搜索的一种方法是线性搜索(增长顺序是线性的),而另一种方法是二进制搜索(增长顺序是对数)。要了解渐近分析如何解决上述分析算法中的问题,现在假设我们在慢速计算机上运行线性搜索和在较快速是计算机上运行二进制搜索。对于输入数组大小为n的小值,快速计算机可能需要更少的时间。但是,在输入数组大小的某些值之后,即使二进制搜索在慢速计算机上运行,??二进制搜索很明显地会比线性搜索花费更少的时间。原因是二进制搜索在输入大小对数方面的增长顺序,而线性搜索的增长顺序是线性的。因此,在输入值的某些值之后,总是可以忽略与机器相关的常量。

渐近分析总是有作用吗?
  渐近分析并不完美,但这是分析算法的最佳方法。例如,有两种排序算法分别在机器上分别取1000nLogn和2nLogn时间。这两种算法都是渐近相同的(增长顺序是nLogn)。所以,随着渐近分析,我们不能判断哪一个更好,因为我们忽略渐近分析中的常数。
  另外,在渐近分析中,我们总是谈论大于常量的输入规模。这些大的输入可能是永远不会用于你的软件和一个渐近慢的算法,它总是对你的具体情况更好。因此,您可能会选择一种算法,渐近渐近,但对于你的软件来说速度更快。

  首次翻译文章,虽然google可以翻译出一部分,但是感觉Google翻译的不地道,很多地方翻译的意思不对。原文链接:http://www.geeksforgeeks.org/analysis-of-algorithms-set-1-asymptotic-analysis/

以上是关于算法分析| 集1(渐近分析)的主要内容,如果未能解决你的问题,请参考以下文章

算法分析| 第4集(循环分析)

《算法设计与分析》期末不挂科

算法分析初步

算法分析中常用的几种渐进符号

算法分析| 小o和小ω符号

算法分析 - 基础