第5章 减治法

合集下载

减治法——精选推荐

减治法——精选推荐

减治法第5章减治法(Decrease and Conquer)减治法的基本思想规模为n的原问题的解与较⼩规模(通常是n/2)的⼦问题的解之间具有关系:(1)原问题的解只存在于其中⼀个较⼩规模的⼦问题中;(2)原问题的解与其中⼀个较⼩规模的解之间存在某种对应关系。

由于原问题的解与较⼩规模的⼦问题的解之间存在这种关系,所以,只需求解其中⼀个较⼩规模的⼦问题就可以得到原问题的解。

2减治法的基本思想⼀旦建⽴了这种关系,就可以从顶⾄下(递归),也可以从底⾄上(⾮递归)的来运⽤Example, n!A top down (recursive) solutionA bottom up (iterative) solution3减治法的类型减治法有三种变种:1)减去⼀个常量2)减去⼀个常数因⼦3)减去的规模是可变的gcd(m, n)4减(⼀)治技术a problem of size nsubproblemof size n-1a solution to thesubprobleme.g., n!a solution tothe original problem5减(半) 治技术a problem of size nsubproblemof size n/2a solution to thesubprobleme.g., Binary searcha solution tothe original problem67典型的分治法subproblem 2 of size n /2subproblem 1of size n /2a solution tosubproblem 1 a solution tothe original problema solution to subproblem 2a problem of size ne.g., mergesort减治与分治的区别考虑以下指数问题: 计算a n减⼀法Bottom-up: iterative (brute Force) Top-down:recursive 分治法:减常因⼦法:a n= a*a*a*a*...*aa n= a n-1* a if n > 1= a if n = 1a n= a ?n/2 ?* a ?n/2?if n > 1= a if n = 1a n = (a n/2 ) 2if n is even and positive= (a(n-1)/2 ) 2 * a if n is odd and > 1 = a if n = 1O (log2n) O (n log2n)89111)2/(0)(>=+=n n n T n T 所以,通常来说,应⽤减治法处理问题的效率是很⾼的,⼀般是O (log 2n)数量级。

第 五 章 减治法

第 五 章 减治法
仅仅通过一次重量的比较,就可以判断伪币是否存在。
算 分 析 与 设 计
西南科技大学
金块问题
有一个老板有一袋金块。每个月将有两 名雇员会因其优异的表现分别被奖励一 个金块。按规矩,排名第一的雇员将得 到袋中最重的金块,排名最后的雇员将 得到袋中最轻的金块。如果每个月都有 新的金块周期性的加入袋中,则每个月 都必须找出最轻和最重的金块。假设有 一台比较重量的仪器,我们希望用最少 的比较次数找出最轻和最重的金块。
算 分 析 与 设 计
西南科技大学
直接插入排序实现方法
减一技术下,该方法遵循的思路是:假设对较 小数组 A[0..n-2]排序问题已经解决了,得到一 个大小为n-1的有序数组。然后将要排序的第n 个元素,插入到数组的适合位置上,得到大小 为n的有序数组 A[0..n-1]。伪代码如下: void InsertionSort(a[]) {for(i=1;i<n-1;i++) //从第二个记录起进行插入 for (j=i-1; j>=0;j--) if a[j+1]-(a[j]) < 0 Swap(a[j+1], a[j]); }
算 分 析 与 设 计
西南科技大学
俄式乘法☺ 俄式乘法☺
算法思想:两个A和B数相乘,把数A每 次除以2,直到为0为止,另一个数B则不 断加倍,若第数A未除尽时,则数B应加 上自己。 7×8的计算步骤: 7 8 3 16+ 8 1 32+ 16 + 8
算 分 析 与 设 计
西南科技大学
约瑟夫斯问题( 约瑟夫斯问题(一)
算 分 析 与 设 计
西南科技大学
减常数因子减治法
减常数因子减治法的一个 典型算法就是折半查找 (Bin_Search)。它搜索 一个排序好的数组,将查 找目标与数组的中间位置 的元素相比,比它大则递 归查找数组的左边,反之 亦然。这个每次迭代都将 问题减小为原来的1/2。 折半查找每次都消去一个 常数因子2,因此其时间 效率为O(logn)。

第7章 减治法(《算法设计与分析(第3版)》C++版 王红梅 清华大学出版社)

第7章 减治法(《算法设计与分析(第3版)》C++版 王红梅 清华大学出版社)

比较对象,若 k 与中间元素相等,则查找成功;若 k 小于中间元素,则在中间元
算 法 设

素的左半区继续查找;若 k 大于中间记录,则在中间元素的右半区继续查找。不
与 分

断重复上述过程,直到查找成功,或查找区间为空,查找失败。
( 第
版 )
k
清 华


[ r1 … … … rmid-1 ] rmid [ rmid+1 … … … rn ] (mid=(1+n)/2)
Page 4
3
7.1.2 一个简单的例子——俄式乘法
【问题】俄式乘法(russian multiplication)用来计算两个正整数 n 和 m 的乘积
,运算规则:如果 n 是偶数,计算 n/2×2m;如果 n 是奇数,计算(n-1)/2×2m+
m;当 n 等于 1 时,返回 m 的值。


俄式乘法的优点?
与 分 析
2. 测试查找区间[low,high]是否存在,若不存在,则查找失败,返回 0;
( 第
3. 取中间点 mid = (low+high)/2; 比较 k 与 rmid,有以下三种情况:
版 )
3.1 若 k < rmid,则 high = mid - 1;查找在左半区进行,转步骤2;
清 华
3.2 若 k > rmid,则 low = mid + 1;查找在右半区进行,转步骤2;
Page 12
7.2.2 选择问题
【想法】假定轴值的最终位置是 s,则: (1)若 k=s,则 rs 就是第 k 小元素; (2)若 k<s,则第 k 小元素一定在序列 r1 ~ rs-1 中; (3)若 k>s,则第 k 小元素一定在序列 rs+1 ~ rn 中。

XXXX年11月20日深圳聘任制公务员行政执法2

XXXX年11月20日深圳聘任制公务员行政执法2

2010年11月20日深圳聘任制公务员行政执法单项选择题1、以下关于行政许可实施主体的标书中,正确的有〔〕。

A、可由法律、法规授权的具有治理公共事务职能的组织在法定授权范围内以自己的名义实施B、只能由具有行政许可权的行政机关以自己的名义实施C、能够托付一般公民和社会团体实施D、受托付的行政机关能够转托付解析:此题答案为A。

此题考查行政许可法知识。

?行政许可法?第二十三条规定“法律、法规授权的具有治理公共事务职能的组织,在法定授权范围内,以自己的名义实施行政许可。

被授权的组织适用本法有关行政机关的规定。

〞,另外依据第二十四条的规定,行政机关能够托付其他行政机关实施行政许可,受托付行政机关在托付范围内,以托付行政机关名义实施行政许可;不得再托付其他组织或者个人实施行政许可。

由此可知A为正确答案。

2、某县人民法院以受贿罪判处陈某有期徒刑7年,陈某不服提出上诉,市中级人民法院经审理认为原判事实不清、证据缺乏,发回原审人民法院重新审判,原审人民法院经审理退回县人民检察院补充侦查。

县人民检察院经补充侦查认定陈某构成犯罪证据缺乏,遂作出不起诉决定。

陈某提起国家赔偿请求,本案的赔偿义务时机应为〔〕。

A、县人民检察院和县人民法院B、县人民法院和市中级人民法院C、市中级人民法院D、县人民法院解析:此题答案为D。

此题考查国家赔偿法知识。

?国家赔偿法?第二十一条第四款规定“再审改判无罪的,作出原生效判决的人民法院为赔偿义务机关。

二审改判无罪,以及二审发回重审后作无罪处理的,作出一审有罪判决的人民法院为赔偿义务机关。

〞由此可知D为正确答案。

3、国务院或者经国务院授权的省、自治区、直辖市人民政府能够决定一个行政机关行使有关行政机关的行政处分权,但〔〕的行政处分权只能由公安机关行使。

A、限制人身自由B、较大数额的罚款C、撤消企业营业执照D、责令停产停业解析:此题答案为A。

此题考查行政处分法知识。

?行政处分法?第十六条规定“国务院或者经国务院授权的省、自治区、直辖市人民政府能够决定一个行政机关行使有关行政机关的行政处分权,但限制人身自由的行政处分权只能由公安机关行使。

算法设计与分析智慧树知到答案章节测试2023年山东交通学院

算法设计与分析智慧树知到答案章节测试2023年山东交通学院

第一章测试1.解决一个问题通常有多种方法。

若说一个算法“有效”是指( )A:这个算法能在人的反应时间内将问题解决B:(这个算法能在一定的时间和空间资源限制内将问题解决)和(这个算法比其他已知算法都更快地将问题解决)C:这个算法能在一定的时间和空间资源限制内将问题解决D:这个算法比其他已知算法都更快地将问题解决答案:B2.农夫带着狼、羊、白菜从河的左岸到河的右岸,农夫每次只能带一样东西过河,而且,没有农夫看管,狼会吃羊,羊会吃白菜。

请问农夫能不能过去?()A:不一定B:不能过去C:能过去答案:C3.下述()不是是算法的描述方式。

A:自然语言B:程序设计语言C:E-R图D:伪代码答案:C4.有一个国家只有6元和7元两种纸币,如果你是央行行长,你会设置()为自动取款机的取款最低限额。

A:40B:42C:29D:30答案:D5.算法是一系列解决问题的明确指令。

()A:对B:错答案:A6.程序=数据结构+算法()A:错B:对答案:B7.同一个问题可以用不同的算法解决,同一个算法也可以解决不同的问题。

()A:错答案:B8.算法中的每一条指令不需有确切的含义,对于相同的输入不一定得到相同的输出。

( )A:错B:对答案:A9.可以用同样的方法证明算法的正确性与错误性 ( )A:对B:错答案:B10.求解2个数的最大公约数至少有3种方法。

( )A:错B:对答案:A11.没有好的算法,就编不出好的程序。

()A:对B:错答案:A12.算法与程序没有关系。

( )A:错B:对答案:A13.我将来不进行软件开发,所以学习算法没什么用。

( )A:对B:错答案:B14.gcd(m,n)=gcd(n,m m od n)并不是对每一对正整数(m,n)都成立。

( )A:错B:对答案:A15.既然程序设计语言可以描述算法,所以算法就是程序。

( )A:错B:对答案:A第二章测试1.并不是所有的算法,规模更大的输入需要更长的运行时间。

( )A:对答案:B2.算法效率分析框架主要关心一个算法的基本操作次数的增长次数,并把它作为算法效率的主要指标。

智慧树知道网课《算法分析与设计(山东联盟)》课后章节测试满分答案

智慧树知道网课《算法分析与设计(山东联盟)》课后章节测试满分答案

第一章测试1【判断题】(10分)一个问题的同一实例可以有不同的表示形式A.错B.对2【判断题】(10分)同一数学模型使用不同的数据结构会有不同的算法,有效性有很大差别。

A.错B.对3【判断题】(10分)问题的两个要素是输入和实例。

A.对B.错4【单选题】(10分)算法与程序的区别是()A.有穷性B.确定性C.输出D.输入5【单选题】(10分)解决问题的基本步骤是()。

(1)算法设计(2)算法实现(3)数学建模(4)算法分析(5)正确性证明A.(3)(1)(5)(4)(2)B.(3)(4)(1)(5)(2)C.(1)(2)(3)(4)(5)D.(3)(1)(4)(5)(2)6【单选题】(10分)下面说法关于算法与问题的说法的是()。

A.算法是一种计算方法,对问题的每个实例计算都能得到正确答案。

B.证明算法不正确,需要证明对任意实例算法都不能正确处理。

C.如果一个算法能应用于问题的任意实例,并保证得到正确解答,称这个算法解答了该问题。

D.同一问题可能有几种不同的算法,解题思路和解题速度也会显著不同。

7【多选题】(10分)下面关于程序和算法的说法正确的是()。

A.算法的每一步骤必须要有确切的含义,必须是清楚的、无二义的。

B.程序总是在有穷步的运算后终止。

C.程序是算法用某种程序设计语言的具体实现。

D.算法是一个过程,计算机每次求解是针对问题的一个实例求解。

8【多选题】(10分)最大独立集问题和()问题等价。

A.最大团B.稳定匹配问题C.区间调度问题D.最小顶点覆盖9【多选题】(10分)给定两张喜欢列表,稳定匹配问题的输出是()。

A.完美匹配B.最大匹配C.稳定匹配D.没有不稳定配对10【单选题】(10分)问题变换的目的有()。

(1)复杂变简单(2)未知变已知(3)隐式变显式(4)难解变易解(5)以上都是。

A.(5)B.(1)C.(2)D.(3)E.(4)11【单选题】(10分)按照霍纳法则,计算p(x)=a n x n+a n-1x n-1+…+a1x1+a0的数量级为____。

【2022年】江苏省扬州市公务员省考公共基础知识真题(含答案)

【2022年】江苏省扬州市公务员省考公共基础知识真题(含答案)

【2022年】江苏省扬州市公务员省考公共基础知识真题(含答案)学校:________ 班级:________ 姓名:________ 考号:________一、多选题(10题)1. 关于罚款的表述正确的是()。

A.罚款是给违反治安管理行为人处以支付一定金钱义务的处罚B.罚款的作用在于通过使违反治安管理行为人在经济上受到损失.起到对其的惩戒和教育作用C.罚款是治安管理处罚中最常见的制裁方法D.罚款的处罚一般由县级以上公安机关决定,但是对于五百元以下的罚款,可以由公安派出所决定2.第21题政治上层建筑包括()。

3.《地方病防治专项三年攻坚行动方案(2018—2020年)》提出的总目标是:助力国家脱贫攻坚,到2020年底,持续消除碘缺乏危害,保持基本消除()危害,有效控制饮水型氟砷中毒、饮茶型地氟病和水源性高碘危害,有效控制和消除血吸虫病危害,防治目标与脱贫攻坚任务同步完成。

A.艾滋病B.燃煤污染型氟砷中毒C.大骨节病D.克山病4.必须清醒地看到,我国经济规模很大,但依然大而不强,我国经济增速很快,但依然快而不优。

主要依靠()等要素投入推动经济增长和规模扩张的()型发展方式是不可持续的。

A.资源B.粗放C.资本5.“飞花两岸照船红,百里榆堤半日风。

卧看满天云不动,不知云与我俱东。

”这首诗蕴含的哲理有()。

A.静止是运动的特殊状态B.运动是绝对的,静止是相对的C.运动是静止的特殊状态D.运动是相对的,静止是绝对的6.王奉与李海发生口角,王奉将李海打伤。

刘山见状,上前劝架,王奉失手将劝架的刘山打中要害,伤害致死。

刘山死后,刘家发生财产继承。

在本案中,属于行为的是()。

A.王奉对于李海的被伤害B.王奉对于刘山的死亡C.刘山的死亡对于刘家的财产继承D.刘山的死亡对于李海的被伤害7.在走新型工业化道路的过程中,要正确处理工业化与信息化的关系。

对此,下列理解正确的是()。

8. 下列属于行政强制措施的有()。

A.查封、扣押财物B.驱散非法集会人员C.冻结存款、汇款D.加收滞纳金9.法律在执行社会公共事务上的作用具体表现在()。

算法设计与分析 王红梅 第二版 第5章_ 减治法

算法设计与分析 王红梅 第二版 第5章_ 减治法
分别求中位数 10<13,结果在[10, 13]之间 长度为1,较小者为所求
舍弃13之前元素,{13,15} 舍弃15之后元素,{10,15}
{13,15} 舍弃13之后元素,{13} {13} {10,15} 舍弃10之前元素,{15} {15}
2015-5-2
第5章 减治法
Page 11
减治法的设计思想
算法5.1:两个序列中位数SearchMid 输入:两个长度为n的有序序列A和B 输出:序列A和B的中位数 1. 循环直到序列A和序列B均只有一个元素 1.1 a = 序列A的中位数; 1.2 b = 序列B的中位数; 1.3 比较a和b,执行下面三种情况之一: 1.3.1 若a=b,则返回a,算法结束; 1.3.2 若 a<b ,则在序列 A 中舍弃 a 之前的元素,在序列 B 中舍弃b之后的元素,转步骤1; 1.3.3 若a>b,则在序列A中舍弃a之后的元素,在序列B中 舍弃b之前的元素,转步骤1; 2. 序列A和序列B均只有一个元素,返回较小者;
2015-5-2
Reduce and Conquer Method
4
减治法的设计思想
减治法将问题划分为若干子问题,并且规模为n的 原问题的解与较小规模(通常是 n/2)的子问题的解之 间具有某种确定的关系:
(1)原问题的解只存在于其中一个较小规模的子问题中; (2)原问题的解与其中一个较小规模的解之间有某种对应关系。
二叉排序树的结点结构为: struct BiNode { int data; //结点的值,假设查找集合的元素为整型 BiNode *lchild, *rchild; //指向左、右子树的指针 };
算法5.2——二叉排序树的查找 BiNode * SearchBST(BiNode *root, int k) { if (root= =NULL) return NULL; else if (root->data==k) return root; else if (k<root->data) return SearchBST(root->lchild, k); else return SearchBST(root->rchild, k); }
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

考虑快速排序中的划分过程,一般情况下,设待划分 的序列为ri ~ rj,选定一个轴值将序列ri ~ rj进行划分,使 得比轴值小的元素都位于轴值的左侧,比轴值大的元素都 位于轴值的右侧,假定轴值的最终位置是s,则: (1)若k=s,则rs就是第k小元素; (2)若k<s,则第k小元素一定在序列ri ~ rs-1中; (3)若k>s,则第k小元素一定在序列rs+1 ~ rj中;
时间复杂性是O(log2n)。
算法5.4——筛选法调整堆
void SiftHeap(int r[ ], int k, int n) { i=k; j=2*i; //置i为要筛的结点,j为i的左孩子 while (j<=n) //筛选还没有进行到叶子 { if (j<n && r[j]<r[j+1]) j++; //比较i的左右孩子,j为较大者 if (r[i]>r[j]) //根结点已经大于左右孩子中的较大者 break; else { r[i]←→r[j]; //将根结点与结点j交换 i=j; j=2*i; //被筛结点位于原来结点j的位置 } } }
20 10
18 7
13
35 26 47
47 35 26 20 18
(a) 大根堆及其对应的序列
(b) 小根堆及其对应的序列
堆排序的基本思想是:
1. 将待排序的记录序列构造成一个堆,选出最大者即堆顶记录, (通常将堆顶记录和堆中最后一个记录交换)。 2. 将剩余的记录再调整成堆,找出次大的记录。 3. 以此类推,直到堆中只有一个记录为止。 堆顶和堆中最后 一个记录交换
6
3 1
2 4 5 7
9 10
8
11
在表中查找任一记录的过程,即是判定树中从根结点到 该记录结点的路径,和给定值的比较次数等于该记录结点在 树中的层数。具有n个结点的判定数的深度为 log2 n 1
5.2.2 二叉查找树
由二叉查找树的定义,在二叉查找树root中查找给定值k 的过程是: ⑴ 若root是空树,则查找失败; ⑵ 若k=根结点的值,则查找成功; ⑶ 否则,若k<根结点的值,则在root的左子树上查找; ⑷ 否则,在root的右子树上查找; 上述过程一直持续到k被找到或者待查找的子树为空, 如果待查找的子树为空,则查找失败。 二叉排序树的查找效率就在于只需要查找两个子树之一。
[ ri … rk … rs-1 ] rs [ rs+1 … … rj ] 均≤rs 轴值 均≥rs [ ri … … rs-1 ] rs [ rs+1 …rk … rj ] 均≤rs 轴值 均≥rs
(a) 若k<s,则rk在左半区
(b) 若k>s,则rk在右半区
选择问题的例子:
以5为轴值划分序列
63 55 42 10 45 58 70 90 10 83
55
42
45 58 63
70 83 90
67
67
(a) 按63,90,55,58,70,42,10,45,83,67 的顺序构造的二叉排序树
(b) 按55,42,10,70,63,58,83,67,90,45 的顺序构造的二叉排序树
二叉查找树
n
a
n 1 n 1
O (nlog2n)
减治法只对一个子问题求解,并且不需要进行解的 合并。应用减治法得到的算法通常具有如下递推式:
0 T (n) T (n / 2) 1
n 1 n 1
通常,应用减治法处理问题的效率是很高的, 一般是O(log2n)数量级。
二、查找问题中的减治法
7 14 18 21 23 29 31 35 38 42 46 49 52
low=1
18>14
mid=3
mid=7 31>14 high=6
high=13
high=2
mid=1
7<14
low=2
mid=2
14=14
算法5.1——折半查找
1. low=1;high=n; //设置初始查找区间 2. 测试查找区间[low,high]是否存在,若不存在,则查找 失败;否则,转3 3. 取中间点mid=(low+high)/2; 比较k与r[mid],有以下三种情况: 3.1 若k<r[mid],则high=mid-1;查找在左半区进行,转2; 3.2 若k>r[mid],则low=mid+1;查找在右半区进行,转2; 3.3 若k=r[mid],则查找成功,返回记录在表中位置mid;
第5章
减治法
1. 减治法的基本思想 2. 减治法在各种问题中的应用
一、减治法的设计思想
规模为n的原问题分解为若干个较小规模(通常是n/2)的 子问题,原问题的解只存在于其中一个较小规模的子问题中。 因此,采用减治法,只需求解其中一个较小规模的子问题就 可以得到原问题的解。
减治法的设计思想
原问题 的规模是n
98 40
81 55 81 73 55 73 81 64 12 36 36 12 27 98 49 40 49 98
在二叉查找树中查找关键字值为35,95的过程:
50 30 20 40 80 90 85 20 35 30 40 50 80 90
35
32
85
88Biblioteka 8832二叉排序树的结点结构为:
struct BiNode
{ int data; //结点的值,假设查找集合的元素为整型
BiNode *lchild, *rchild; //指向左、右子树的指针
最好情况:每次划分的轴值恰好是序列的中值,则可以保 证处理的区间比上一次减半,由于在一次划分后,只需处 理一个子序列,所以,比较次数的递推式是:
T (n) T (n 2) n O(n)
最坏情况:每次划分的轴值恰好是序列中的最大值或最 小值,则处理区间只能比上一次减少1个,所以,比较次 数的递推式是:
r1 r2 … … ri
无序区 为一个堆
ri+1 ≤… … ≤rn-1 ≤ rn
有序区 已经位于最终位置
堆调整问题:将一个无序序列调整为堆
(1)筛选法调整堆
关键问题:完全二叉树中,根结点的左右子树均是堆,
如何调整根结点,使整个完全二叉树成为一个堆?
28
35 32 18 12 20 32 28 35 35
判定树——描述折半查找的判定过程。
长度为n的判定树的构造方法为:
(1)当n=0时,判定树为空;
(2)当n>0时,判定树的根结点是有序表中序号
为mid=(n+1)/2的记录,根结点的左子树是与有序
表r[1] ~ r[mid-1]相对应的判定树,根结点的右子树
是与r[mid+1] ~ r[n]相对应的判定树。
堆排序
例: 排序之前的关键字序列为{28,25,16,36,18,32}
28
25 16 25 36 18 16 36 32 18 16 25 28 18 16 32 28 32
36
18 32
28 36
25
例如: 排序之前的关键字序列为
{40,55,49,73,12,27,98,81,64,36}
20 18
12
32
20 18 12
28
(a) 28与35交换
(b) 28与32交换
(c) 将28筛到叶子
假设当前要筛选结点的编号为k,堆中最后一个结点的编 号为n,并且结点k的左右子树均是堆(即r[k+1] ~ r[n]满足堆 的条件),则筛选算法用伪代码可描述为:
算法5.3——筛选法调整堆
1. 设置i和j,分别指向当前要筛选的结点和要筛选结点的左孩子; 2. 若结点i已是叶子,则筛选完毕;否则,比较要筛选结点的左右 孩子结点,并将j指向关键码较大的结点; 3. 将要筛选结点i的关键码与结点j的关键码进行比较,有以下两种 情况: 3.1 如果结点i的关键码大,则完全二叉树已经是堆; 3.2 否则将r[i]与r[j]交换;令i=j,转步骤2继续进行筛选;
在二叉排序树上查找关键码等于给定值的结点的过程,
恰好走了一条从根结点到该结点的路径,和给定值的比较
次数等于给定值的结点在二叉排序树中的层数,比较次数 最少为1次(即整个二叉排序树的根结点就是待查结点), 最多不超过树的深度。具有n个结点的二叉树的深度至少 是 log2 n 1 ,至多是n。所以,二叉排序树的查找性能 在O(log2n)和O(n)之间。
5 3 8 1 4 6 9 2 7
2 3 4 1 5 6 9 8 7 2 3 4 1 · · ·· · 1 2 4 3 · · ·· · · ·4 3 · · 3 4 · · · · · · · · · ·
4<5,只在左侧查找
以2为轴值划分序列 4>2,只在右侧查找 以4为轴值划分序列 4=4,轴值即为第4小元素
ri r2i ri r2i (小根/顶堆) 或 (大根/顶堆) ri r2i 1 ri r2i 1
例如:
{12, 36, 27, 65, 40, 34, 98, 81, 73, 55, 49} 是小根堆 {12, 36, 27, 65, 40, 14, 98, 81, 73, 55, 49} 不是堆
T ( n) T ( n -1) O( n)- O( n 2 )
平均情况:假设每次划分的轴值是划分序列中的一个随机 位置的元素,则处理区间按照一种随机的方式减少,可以 证明,算法的平均时间是O(n) 。
三、排序问题中的减治法
5.3.1 堆排序
回顾:堆
堆的定义:
堆是满足下列性质的数列{r1, r2, …,rn}:
5.2.1 折半查找 5.2.2 二叉查找树 5.3.2 选择问题
相关文档
最新文档