- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
最小值和最大值以期望线性时间做选择最坏情况线性时间的选择
问题描述 选择问题可以在O(nlgn)时间内解决: 用堆排序或合并排序对输入数据进行排序 再在输出数组中标出第i个元素即可。 还有其他更快的算法。 University of Science and Technology of China University of Science and Technology of China University of Science and Technology of China University of Science and Technology of China 主讲人: 吕敏 Email: { lvmin05@ustc.edu.cn } Spring 2012 ,USTC 算法基础 * * 第七讲 顺序统计学 内容提要: 最小值和最大值 以期望线性时间做选择 最坏情况线性时间的选择 问题描述 在一个由n个元素组成的集合中,第i个顺序统计量是该集合中第i个小的元素。 一个中位数是它所在集合的“中点元素”。 当n为奇数时,中位数是唯一的,i=( n + 1 ) / 2; 当n为偶数时,中位数有两个,即:i=n/2(下中位数)和i=n/2+1(上中位数) 不考虑n的奇偶性,中位数总出现在 处(下中位数)和 处(上中位数)。本书中所用的“中位数”指的是下中位数。 选择问题:从一个由n个不同数值构成的集合中,选择其第i个顺序统计量。 输入:一个包含n个(不同的)数的集合A和一个数i, 1≤ i ≤n 输出:元素 ,它恰大于A中其它i-1个元素。 * * * * 第七讲 顺序统计学 内容提要: 最小值和最大值 以期望线性时间做选择 最坏情况线性时间的选择 最小值和最大值 最小/最大值:进行n-1次比较,时间复杂度为θ(n); 假设集合放在数组A中,且length[A] = n。 * * MINIMUM ( A ) min ← A[1]; for i ← 2 to length[A] do if min A[i] then min ← A[i] return min 总共比较了n - 1次,时间复杂度:O(n) 最小值和最大值 同时找最小值和最大值 1)记录比较过程中遇到的最小值和最大值; 2)成对处理元素,先比较两个输入元素,把较小者与当前最小值比较,较大者与当前最大值比较(每对元素需要3次比较) * * MAX-MINIMUM ( A ) if length[A] is odd then min ← A[1]; max ← min; else min ← MIN( A[1], A[2] ), max ← MAX( A[1], A[2] ); i ++; while i ≤ length[A] min ← MIN( MIN(A[i], A[i+1]), min ) max ← MAX( MAX(A[i], A[i+1]), max ) i ← i+2; end return min, max 最小值和最大值 如何设定当前最小值和最大值的初始值:依赖于n的奇偶性 如果n是奇数,将最小值和最大值都设为第一个元素的值; 如果n是偶数,就对前两个元素做一次比较,以决定最小值和最大值的初始值。 总的比较次数: 如果n是奇数,那么总共做了 次比较 如果n是偶数,总共做了 次比较。 * * 时间复杂度为:O(n) * * 第七讲 顺序统计学 内容提要: 最小值和最大值 以期望线性时间做选择 最坏情况线性时间的选择 以期望线性时间做选择 基本思想:采用分治策略,借鉴快速排序的随机划分法,对输入数组进行递归划分,但是只处理划分的一边。 * * RANDOMIZED-SELECT ( A, p, r, i ) if p = r // 临界问题处理 then return A[p] q ← RANDOMIZED-PARTITION( A, p, r ) //进行划分,返回划分元下标 k ← q – p + 1 if i = k then return A[q]; else if i k then return RANDOMIZED-SELECT ( A, p, q - 1, i ) else
文档评论(0)