《算法导论》第9章 顺序统计学 (1)最小值和最大值
2012-02-25 22:58 htc开发 阅读(327) 评论(0) 编辑 收藏 举报
1. 查找最小值
逻辑比较简单,用第一个元素来初始化最小值min,
然后与数组中其余元素比较,找出最小值。
时间复杂度是O(n),已经最优化了。
2. 同时找最大和最小值
如果依然采用前面的方法,用第一个元素初始化min和max。
然后将min和max与数组的其他n - 1个元素比较,每次循环比较两次。
那么一共需要2n - 2次比较。
3. 找到次小值(习题9.1-1)
“在算法导论中习题9-1提出,在最坏情况下利用 n
+ logn - 2 次比较,找出n个元素中第二小的元素。
其方法叫做 tournament method, 算法实现如下:
对数组a[1…n] 中元素成对的做比较,每次比较后讲较小的数拿出,形成的数组再继续这样处理,直到剩下最后的一个,就是数组中最小的那个。将这个过程以一个树的形式表现出来,如下图:
在这个过程中,非树叶节点就是比较的次数,一共进行了n-1 次比较,树根即为最小的元素。而第二小的元素一定是在这个过程中与根节点进行过比较的元素。即上图中5,3和2。这样的节点最多有logn个,在这些节点中找到最小的元素需要进行logn-1次比较。因此总共所需的比较次数为 n-1 + logn-1 = n+logn-2次”。
其方法叫做 tournament method, 算法实现如下:
对数组a[1…n] 中元素成对的做比较,每次比较后讲较小的数拿出,形成的数组再继续这样处理,直到剩下最后的一个,就是数组中最小的那个。将这个过程以一个树的形式表现出来,如下图:
在这个过程中,非树叶节点就是比较的次数,一共进行了n-1 次比较,树根即为最小的元素。而第二小的元素一定是在这个过程中与根节点进行过比较的元素。即上图中5,3和2。这样的节点最多有logn个,在这些节点中找到最小的元素需要进行logn-1次比较。因此总共所需的比较次数为 n-1 + logn-1 = n+logn-2次”。
解决问题的关键是:用树形结构来表示整个比较过程。