算法导论 学习笔记 第九章 中值和顺序统计

来源:互联网 发布:ubuntu mysql 数据库 编辑:程序博客网 时间:2024/06/07 14:05

本章其实只讲了一个问题,那就是如何从一个数组当中用线性时间内找出第i个小的元素。

最小值和最大值

这个就比较简单了,直接挨个比,运行时间就是线性的,而且这就是最好的办法。
如何同时找出最小值和最大值咧?
这个其实也简单,那就记录两个数据呗。运行时间是找单个的两倍。但是这个就不是最好的办法了。有一个比这个更好的方法。上面的办法是每一个元素需要比较两次,而下面的方法是每两个元素需要比较三次。比上一个好一点那就是我们不去一个一个比较,而是一对一对的比较,然后把小的跟最小值比较,大的跟最大值比较。厉害吧。

期望线性时间内的选择问题(这个翻译总感觉不通顺)平均情况嘛

Θ(n2)

就是我们平时的选择,不可能总是要求我们找出最小值和最大值。但是尽管不是找出最小值和最大值,平均情况下我们依然可以在线性时间内完成。

用的核心思想是分治法。最坏的情况下运行时间是
Θ(n2)

上伪代码

RANDOMIZED-SELECT(A,p,r,i)

if p = r    then return A[p]q ← RANDOMIZED-PARTITION(A,p,r)k ← q - p + 1if i = k    then return A[q]elseif i < k    then return RANDOMIZED-SELECT(A,p,q-1,i)else return RANDOMIZED-SELECT(A,q+1,r,i-k)

最坏的情况下以线性时间运行

上面的算法在最坏的情况下的运行时间是Θ(n2),原因就是我们在最不幸运的时候每次划分
然后出现一边没有元素,一边n-1个元素的情况。这里就是用一种方法来保证不会出现这种情况。怎么来了咧
看书吧。。。。

阅读全文
0 0
原创粉丝点击