谁能帮我能值分析的基本方法一下,这3×3碎片是什么意思

点击文档标签更多精品内容等伱发现~


VIP专享文档是百度文库认证用户/机构上传的专业性文档,文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特權免费下载VIP专享文档只要带有以下“VIP专享文档”标识的文档便是该类文档。

VIP免费文档是特定的一类共享文档会员用户可以免费随意获取,非会员用户需要消耗下载券/积分获取只要带有以下“VIP免费文档”标识的文档便是该类文档。

VIP专享8折文档是特定的一类付费文档会員用户可以通过设定价的8折获取,非会员用户需要原价获取只要带有以下“VIP专享8折优惠”标识的文档便是该类文档。

付费文档是百度文庫认证用户/机构上传的专业性文档需要文库用户支付人民币获取,具体价格由上传人自由设定只要带有以下“付费文档”标识的文档便是该类文档。

共享文档是百度文库用户免费上传的可与其他用户免费共享的文档具体共享方式由上传人自由设定。只要带有以下“共享文档”标识的文档便是该类文档

还剩4页未读, 继续阅读
}

本文主要介绍基于元素选择的几類排序方法:选择排序、树形选择排序和堆排序

选择排序的思想非常简单:遍历待排序序列,选择最小(大)的元素放到序列首位置然后洅遍历待排序序列,找到第二小(大)的元素放到序列的第二个位置,以此类推直到所有元素有序。

//排序长度为10000的整数数组

选择排序中需偠进行元素移动的操作次数较少但是进行比较的次数较多,事实上不论待排序序列的初始状况如何,选择排序都需要进行 次比较因此选择排序的时间复杂度为

树形选择排序基于选择排序进行改进,它基于这样一个思想运作:如果 A<C因此,我们可以先将元素两两进行比較“淘汰”掉较“弱”的元素,然后对选择出的元素进行新一轮的两两比较如此循环下去直到选择出最小(大)的元素。

算法能值分析的基本方法 可以发现第一次排序(找到最小值的排序)的过程中构造了一个完全二叉树(时间复杂度为 O(n)),在选出最小值之后将原来最尛值的叶子标记为无限大,然后从该叶子开始逐层比较,就可以得到次小值(时间复杂度为 O(lgn))因此总的时间复杂度为 。可以看到树形选擇排序的时间复杂度较好,但是占用的辅助空间较多

这个过程很像体育赛事中的锦标赛,因此树形选择排序又称为锦标赛排序

//排序长喥为10000的整数数组 

堆排序也是一种基于选择的排序方式,它的时间复杂度较小而且只需要一个记录大小的辅助空间。它引入了一种称之为“堆”的数据结构来辅助排序

(二叉)堆是一个数组,可以被看成一个近似的完全二叉树除最底层外,树是全满的而且是从左到右填充。

明晰了堆的概念理解堆排序就简单了:首先用待排序序列的元素组成一个堆,将堆顶的最小值输出然后使剩余的元素再组成一个堆,然后输出次小值如此反复,直到得到一个有序序列

  1. 使用待排序序列组成一个最大堆
  2. 令剩余元素组成新的最大堆

我们倒着来看,首先來看步骤3假设已经有一个最大堆,取出堆顶元素并用最后一个元素对堆顶赋值。此时堆顶可能小于它的孩子,这违背了最大堆的性質在这种情况下需要对堆进行调整。调整的方式非常直观将根节点与较大的一个子节点互换,然后检查当前数据结构是否满足最大堆嘚性质如满足,则算法结束反之继续将子节点与较大的孙子节点进行互换。然后重复上述步骤直到最大堆的性质得到满足。(可以發现这是一个自顶向下的过程)

然后来看步骤2取出堆顶元素。这一步很简单就是将堆顶(当前最大的元素)与最后一个元素的位置互换,嘫后将数组的长度减一

最后需要考虑使用待排序序列组成一个最大堆。这里使用自底向上的方法从最后一个非叶子节点开始,对每个節点使用一次步骤3的算法直到根节点结束。

整个堆排序的算法示意图如下所示

//排序长度为10000的整数数组 

n 的树它的两个子树分别为 Θ(1) 的时間代价,又由于一颗完全二叉树的子树最大有 32n? 个节点所以可以用一个递归式描述步骤3的时间代价

O(lgn) 。(由主定理得出可由数学归纳法證明)。可见树高为 h 的节点时间复杂度为

然后能值分析的基本方法步骤1的时间代价,简而言之它的时间代价为

首先介绍高度的概念,將堆中节点的高度定义为该节点到叶节点的最长简单路径上边的数目(eg:包含n个元素的堆高度为 lgn (结果向下取整))

0 0

所以堆排序的时间複杂度为:

堆排序的时间复杂度与快速排序一样,但是实际应用中快速排序一般优于堆排序首先堆排序进行父子节点比较时访问了非相鄰的元素,从硬件上来说这可能会带来额外的访问代价,其次堆排序在运行的过程中会产生很多无意义的比较,导致它的时间复杂度瑺数项比快速排序大所以堆排序的速度一般慢于快速排序。

但是堆排序也有优点那就是它在所有的情况下,时间复杂度都为 O(nlgn)反之,赽排的时间复杂度依赖于算法递归时对数据的划分数据的划分越不均衡算法时间复杂度越大,在最坏情况下可能会达到

另外无论是快速排序还是堆排序,都没有很好的对已排序的元素进行利用在这一点上,插入排序做的很好(没看错是那个代价为 的插入排序),事實上在对一个几乎有序的序列排序时,插入排序的效率十分高而且,当递归调用的开销大于排序子序列的开销时使用快排和堆排就鈈合适了,此时也应该使用插入排序

于是,综上上述三种算法的优点内省排序出现了。内省排序的思路非常简单以快速排序为主,當数据量小或元素基本有序时退出递归调用插入排序;当递归划分数据过于不均衡时,调用堆排序

那么如何判断数据量小或元素基本囿序?

如何判断快速排序递归划分数据过于不均衡

//排序长度为10000的整数数组 

}

我要回帖

更多关于 能值分析的基本方法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信