数据结构与算法经典问题解析-Java语言描述(第一章绪论)

2020年2月22日
本章知识点总结:
1.什么是数据结构?
一旦变量中有数据,就需要一种操纵这些数据的机制来求解问题。 数据结构(data structure)就是计算机中存储和组织数据的一种特定方式,它将使得数据 处理更加有效。一个数据结构就是一种组织和存储数据的特定形式。常用的数据结构包 括数组、文件、链表、找、队列、树和图等。
根据元素的组织方式,数据结构可以分为两种类型:

  1. 线性数据结构:可以按线性次序访问元素,但它并不强制将所有元素连续地存储 在一起(例如,链表)。例如,链表、栈和队列。
  2. 非线性数据结构:这种数据结构的元素是以非线性次序来存储和访问的。例如, 树和图。

2.什么是算法?为什么需要算法分析?算法分析的目的?
算法就是用一条接一条的指令来解决给定的问题。
算法分析能够帮助我们确定在时间和空间开销方面哪一种算法是有效的。
算法分析的目标是根据运行时间及其他的一些因素(如内存,开发者的工作量等)来比较算法(或解决方案)的优劣。

3.什么是增长率?
所谓增长率就是随着输入规模的增加,算法运行时间增加的速度,它是输入规模的函数。假设你去商店买一辆小车和一辆自行车,这时你遇到了你的朋友,当他问你买什么东西时,通常你会这么回答他,我来买小车。这是因为比起自行车的花费,小车的花 费要大得多得多(自行车的花费被小车的花费忽略掉了)。
总花费=小车的花费+自行车的花费
总花费约等号≈小车的花费(近似值)
对于上述例子,我们可以把总成本写成小车花费和自行车花费的函数。对于一个给 定的函数,我们忽略了相对微不足道的低阶因变量(当输人规模n很大时。

4.常用的增长率以及之间的增长快慢关系。
常用增长率:
在这里插入图片描述
常用增长率的增长快慢关系:
在这里插入图片描述

5.三种渐进表示法
1.大O表示法
在这里插入图片描述2…Ω表示法
在这里插入图片描述
在这里插入图片描述
3.Θ表示法
在这里插入图片描述
6.渐进表示法的性质
在这里插入图片描述
7.常用对数和累加公式
在这里插入图片描述
8.分治法主定理公式
在这里插入图片描述
运用该定理的问题:
在这里插入图片描述
9.问题规模减小和递归求解主定理
在这里插入图片描述
10.问题规模减小和递归求解主定理的变型
在这里插入图片描述11.平摊分析
平摊分析是指确定一系列操作的平均运行时间。平摊分析不同于平均情况分析,因 为它不对输入数据值的分布做任何假设,而平均情况分析假设输人数据并不是最糟糕的 情况(例如,有些排序算法能很好地处理“平均”情况下的输人序列,但对于个别输人序 列算法的性能极差)。也就是说,平摊分析是一种对一系列操作而不是对单个操作的最坏情况分析。
在标准最坏情况分析提供了过度悲观的上限的情况下,平摊分析的目的是为了更好 地理解某些算法的运行时间。平摊分析通常适用于一系列操作,并且这一系列操作中的 绝大部分操作的时间开销小,只有少数操作开销大。如果能够说明开销大的操作特别少, 那么可以把它们归咎为开销小的操作,然后仅求开销小操作系列的上限即可。
在平摊分析中,通常的方法是为操作序列中的每个操作赋予一个人为的开销,使得 整个操作序列总的人为开销受限于操作序列的实际总开销。这种人为开销称为操作的平摊开销。因此,在分析执行时间时,平摊开销是一种理解总运行时间的正确方法。但注 意某些特定的操作仍然会花费很长的运行时间,所以平摊分析不是对操作序列中任意单 个操作的运行时间上限的分析。
当操作序列中的一个操作对后一个操作的时间开销有影响时:
*某个特别操作的时间开销可能很大。
*但该操作可能将数据结构导向另一个状态,使之后的儿个操作时间开销很小。
例子:从一个数组中找到第A个最小的元素。对于这个问题可以用排序算法来解决。 在对给定数组进行排序后,只需要直接返回有序数组中第A个位置的元素。执行排序(假设使用基于比较的排序算法)操作的时间开销是O(nlogn)。如果执行n次这样的查找,那 么每次查找的平均时间开销是O(nlogn/n)=〇(logn)。这清楚地说明,一次排序可以降低后续操作的复杂性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章