摘要: 第九章 中位数和顺序统计学9.2 以期望线性时间做选择上一讲是找出最小值,同时找出最大值最小值,以及找出次小值的问题。随意选择数组中第i小(大)的元素看起来要比找最小值的简单选择问题要复杂一些。但是令人惊奇的是,两种问题的渐近运行时间却是相同的,都是O(n)。算法导论上介绍了一种用来解决选择问题的分治算法,即RANDOMIZED-SELECT算法。本算法以快速排序算法的分割算法为基础,如同在快速排序中一样,此算法的思想也是对输入数组进行递归划分。但与快速排序不同的是,快速排序会递归处理划分的两边,而RANDOMIZED-SELECT只处理划分的某一边。这一差异在算法的分析中就体现出来了:快速排 阅读全文
posted @ 2012-06-07 22:42 止於至善 阅读(1556) 评论(0) 推荐(1) 编辑
摘要: 第九章 中位数和顺序统计学9.1 最小值和最大值在一个有n个元素的集合中,要做多少次比较才能确定其最小元素呢?可以很容易地给出n-1次比较这个上界:依次查看集合中的每个元素,并记录比较过程中的最小元素。同样道理,最大值也可以通过n-1次比较找出来。这个算法比较简单,我就没有写程序实现了。在某些应用中,必须找出n个元素集合中的最大值和最小值。按照上面的思路,可以对目标数组进行两次扫描,便可独立得到最小值和最大值。但这是不是最优的算法呢?事实上,至多3floor(n/2)次比较就足以同时找出最大值和最小值。做法是记录比较过程中遇到的最小值和最大值。并不是将每一个输入元素与当前的最大值和最小值分别进 阅读全文
posted @ 2012-06-07 11:18 止於至善 阅读(1924) 评论(0) 推荐(1) 编辑