跳到内容
相关文章

相关文章

算法分析|设置1(渐近分析)
  • 难度等级:基本
  • 最后更新:09年11月20日

为什么绩效分析?
有许多重要的事情应该是如此,如用户友好,模块化,安全,可维护性等。为什么担心性能?
答案很简单,只有具备性能,我们才能拥有上述所有东西。因此,绩效就像货币,我们可以通过它购买上述所有东西。学习性能的另一个原因是-速度是有趣的!
总结,性能==缩放。想象一下,可以加载1000页的文本编辑器,但可以拼写检查每分钟1页或图像编辑器需要1小时才能旋转图像90度左或......你得到它。如果软件功能无法应对用户需要执行的任务规模 - 它与死亡一样好。


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

这样做的一种天真的方式是 - 实现算法并在计算机上运行两个程序,以获取不同的输入,并查看哪一个需要更少的时间。这种方法有很多问题用于分析算法。
1)对于某些输入可能有可能,第一算法比第二个算法更好。对于某些输入,第二个输入更好。
2)对于某些输入可能有可能在一台机器上执行更好的算法,并且在其他机器上对其他一些输入进行更好的工作。

渐近分析是在分析算法中处理上述问题的大想法。在渐近分析中,我们在输入大小(我们不测量实际运行时间)中评估算法的性能。我们计算,算法采取的时间(或空间)如何随输入大小而增加。
例如,让我们考虑在排序阵列中的搜索问题(搜索给定项目)。搜索的一种方法是线性搜索(增长顺序是线性的),另一种方式是二进制搜索(增长顺序是对数)。要了解渐近分析如何解决上述分析算法中所提到的问题,让我们说我们在快速计算机上运行线性搜索一种和二进制搜索在一个缓慢的计算机上B.我们为两台计算机选择了常量值,以便它告诉我们给定计算机以秒为单位执行搜索需要多长时间。让我们说常量一种是0.2和常数B.是1000,这意味着A比b强大5000倍。对于输入数组大小n的小值,快速计算机可能花费更少的时间。但是,在输入数组大小达到一定值后,即使二进制搜索在速度较慢的机器上运行,它也肯定会比线性搜索花费更少的时间。原因是二叉搜索相对于输入大小的增长顺序是对数的,而线性搜索的增长顺序是线性的。因此,在输入大小达到一定值后,机器相关常数可以被忽略。
以下是此示例的一些运行时间:
线性搜索在A上以秒为单位的运行时间: 0.2 * n
二进制搜索在b上以秒为单位的运行时间:1000 * log(n)

------------------------------------------------ | n | |上运行时间,运行时间在B  | ------------------------------------------------- | 10秒| | 2 ~ 1 h  | ------------------------------------------------- | 100 | 20秒| ~ 1.8 h  | ------------------------------------------------- | 10 ^ 6 h | | ~ 55.5 ~ 5.5 h |------------------------------------------------- | 10 ^ 9 | | ~ 8.3 h ~ 6.3年  | -------------------------------------------------

渐进分析总是有效的吗?
渐近分析并不完美,但这是用于分析算法的最佳方法。例如,假设有两个分类算法,即在机器上分别使用1000nLogn和2nLogn时间。这两种算法都是渐近相同的(增长顺序是NLogn)。因此,随着渐近分析,我们无法判断哪一个更好,因为我们忽略了渐近分析中的常数。
此外,在渐近分析中,我们总是讨论大于常量的输入大小。有可能这些大的输入永远不会给你的软件,而一个渐近缓慢的算法总是在你的特定情况下表现得更好。因此,您最终可能会选择一种算法,它对于您的软件来说渐进地慢一些,但却更快一些。



下一个 -算法|集2的分析(最坏、平均和最佳情况)

参考:
麻省理工学院的视频讲座1关于算法的简介

如果你发现任何不正确的地方,或者你想分享关于上面讨论的话题的更多信息,请写评论。

注意读者!现在不要停止学习。掌握所有重要的DSA概念DSA自定进度课程以学生友好188bet2021欧洲杯的价格,成为工业准备。

我的个人笔记 arrow_drop_up.
推荐的文章
页面: