第3章 分治法


时间复杂性分析: O(1) n 1 T (n) log3) T(n)=O(n 3 T ( n / 2 ) O ( n ) n 1 空间复杂性分析:S(n)=O(logn)
3.1 概述 – 引子(大整数的乘法)
如将大整数分成更多段,用更复杂的方式将其组合 起来,将有可能得到更优的算法。 最终的,这个思想导致了快速傅利叶变换 (Fast Fourier Transform, FFT) 的产生。该方法也可看作是 一个复杂的分治算法,对于大整数乘法,它也能在 O(nlogn) 时间内解决。
斗众如斗寡,形名是也。
旌旗曰形; 金鼓曰名 。
3.1 概述 – 分治策略
基于分治法解决问题:
首先将问题分解为k个子问题(最好规模相同)并分别 求解。如子问题规模仍不够小,则再划分为k个子问题。 如此递归进行,直到问题规模足够小易求解为止。 = n T(n)
n/2
T(n/4) T(n/4)
二分查找的伪代码(非递归):
BINARY-SEARCH-NOREC(A, n, x) while low <= high mid = (low + high) / 2 if x == A[mid] then return mid else if x > A[mid] then low = mid+1 else then high = mid-1 return -1
1 2 3 4 5 6 7 8 2 1 4 3 6 5 8 7 3 4 1 2 7 8 5 6 4 3 2 1 8 7 6 5 5 6 7 8 1 2 3 4 6 5 8 7 2 1 4 3 7 8 5 6 3 4 1 2 8 7 6 5 4 3 2 1
3.3 循环日程表 – 分治策略
如何分,即如何合理地进行问题的分解?
3.1 概述 – 引子(大整数的乘法)
问题陈述:
两个n位的大整数的乘法运算。
求解方法:
小学采用的方法:
一次性地乘:O(n2)
采用分治策略求解(二分):
每个迭代分解为4次相乘:O(n2) 每个迭代分解为3次相乘:O(nlog3) = O(n1.585)
X = Y =
a c
then return mid
else if x > A[mid] then return BINARY-SEARCH-REC(A, mid+1, high, x) else then return BINARY-SEARCH-REC(A, low, mid-1, x)
3.2 二分查找 – 伪代码
终止:
结束时low>high,待处理数组为空,表示x不在A中。每步的 部分数组中也不可能有x,因此x不存在于原数组,返回-1。
3.2 二分查找 – 算法分析
时间复杂性:
非递归:循环次数最大为logn,因此T(n)=O(logn)。
递归:
n 1 O(1) T (n) T (n / 2) O(1) n 1
输入为有序的序列。 取中间元素与待查找元素x进行比较,如果x等于中间 元素,则算法终止; 如x小于中间元素,则在序列的左半部继续查找。否则, 在序列的右半部继续查找。
重复利用了元素间的次序关系。
3.2 二分查找 – 伪代码
二分查找的伪代码(递归):
BINARY-SEARCH-REC(A, low, high, x) if low > high then return -1 mid = (low + high) / 2 if x == A[mid]
3.2 二分查找 – 求解步骤
二分查找的求解:
步骤1:确定合适的数据结构。设置数组s[n]来存放n个已 排好序的元素;变量low和high表示查找范围在数组中下 界和上界;middle表示查找范围的中间位置;x为特定元 素; 步骤2:初始化。令low=0;high=n-1; 步骤3:求中间位置。即middle=(low+high)/2; 步骤4:判定算法是否结束。判定low小于等于high是否 成立,如果成立,转步骤5。否则,算法结束; 步骤5:判断待查找元素与中间元素是否相等。如 x==s[mid],算法结束。如x>s[mid],令low=mid+1。 否则令high=mid-1,转步骤3。
一分为二
如何治,即如何进行问题的求解?
进行合并
问题的关键:
发现循环赛日程表制定过程中存在的规律性。
3.3 循环日程表 – 求解n=21
n=21个选手的比赛日程表的制定:
天数 编号 1 2 1 2 1
3.3 循环日程表 – 求解n=22
n=22个选手的比赛日程表的制定:
每个选手一天只能比赛一次; 循环赛一共需要进行n-1天。
需要注意的是:
由于n=2k,显然n为偶数。
3.3 循环日程表 – 分治策略
采用分治策略求解的分析:
将所有的选手分为两半,n个选手的比赛日程表就可通过 为n/2个选手设计的比赛日程表来决定。递归进行分割, 直到只剩下2个选手时,比赛日程表的制定就变得很简单。
3.2 二分查找 – 求解示例
如在如下序列中查找元素x=12:
0 6 1 12 2 15 3 18 4 22 5 6 7 35 8 46 9 58 10 60 25 28
(1)
low=0
middle=5
high=10
0 6
1 12
2 15
3 18
4 22
5
6
7 35
8 46
9 58
10 60
25 28
子问题的合并
天数 编号 1 2 3 4 5 6 7 8 1 2 1 4 3 6 5 8 7 2 3 4 1 2 7 8 5 6 3 4 3 2 1 8 7 6 5
3.3 循环日程表 – 求解n=23
n=23个选手的比赛日程表:
天数 编号 1 2 3 4 5 6 7 8 1 2 1 4 3 6 5 8 7 2 3 4 1 2 7 8 5 6 3 4 3 2 1 8 7 6 5 4 5 6 7 8 1 2 3 4 5 6 5 8 7 2 1 4 3 6 7 8 5 6 3 4 1 2 7 8 7 6 5 4 3 2 1
保持:
每次循环前,x存在于A[low..high]中。对于A[mid]<x, A[low..mid]均小于x,x只可能存在于A[mid+1..high]中; 对于A[mid]>x, A[mid..high]均大于x,x只可能存在于 A[low, mid-1]中;对于A[mid]==x,直接返回x对应下标。
子问题的比赛日程表
天数 编号 1 2 3 4 1 2 1 4 3
22个选手的比赛日程表
天数 编号 1 2 3 4 1 2 1 4 3 2 3 4 1 2 3 4 3 2 1
3.3 循环日程表 – 求解n=23
n=23个选手的比赛日程表的制定:
子问题的比赛日程表
天数 编号 1 2 3 4 5 6 7 8 1 2 1 4 3 6 5 8 7
第3章 分治法
聂艳明 信息工程学院
第3章 分治法
3.1 3.2 3.3 3.4 3.5 3.6 概述 二分查找 循环日程表 棋盘覆盖问题 合并排序 快速排序
本章的要点和难点
要点:
分治法的基本思想、基本要素与求解步骤; 分治法的应用。
难点:
分治法的最优子结构性质。
最好是使子问题的规模大致相同。
3.1 概述 – 分治法的复杂性分析
分治法求解问题的时间复杂性分析:
将规模为n的问题DIVIDE成k个规模为n/m的子问题去 解。设分解阈值n0=1,且CONQUER解规模为1的问题 耗费1个单位时间。再设将原问题分解为k个子问题及用 COMBINE将k个子问题的解合并为原问题的解需用f(n) 个单位时间。则有: ì O(1) n= 1
分治法的基本步骤:
DIVIDE-AND-CONQUER(P)
if(|P| <= n0) //问题规模足够小,n0为规模阈值 then CONQURE(P); //解决小问题 subs = DIVIDE(P) //分解为子问题,subs为子问题集 for i = 1 to subs.length() r[i]=DIVIDE-AND-CONQUER(subs[i]); //递归求解子问题 return COMBINE(r); //将各子问题的解合并为原问题的解
T(n)=O(n2)

空间复杂性分析:S(n)=O(logn)
3.1 概述 – 引子(大整数的乘法)
分治法(二分):
每个迭代分解为3次相乘: XY = ac 2n + ((a-b)(d-c)+ac+bd) 2n/2 + bd XY = ac 2n + ((a+b)(d+c)-ac-bd) 2n/2 + bd 或
基于后向导入或递归树可知:T(n)=O(logn) 。
空间复杂性:
非递归:O(1)。 递归:O(logn)。
3.3 循环日程表 – 问题描述
问题描述:
设有n=2k个运动员要进行羽毛球循环赛,现要设计一个 满足以下要求的比赛日程表:
每个选手必须与其它n-1个选手各赛一次;
(2)
Hale Waihona Puke low=0middle=2 high=4
3.2 二分查找 – 求解示例
如在如下序列中查找元素x=12:
0 6 1 12 2 15 3 18 4 22 5 6 7 35 8 46 9 58 10 60 25 28
(3)
low=0 high=1 middle=0
合集下载

高中信息技术算法与程序设计教案粤教版选修

高中信息技术算法与程序设计教案粤教版选修

高中信息技术算法与程序设计教案粤教版选修一、第一章:算法与程序设计概述1. 教学目标了解算法的概念、特性以及算法与程序的关系。

掌握算法描述的方法,如伪代码和流程图。

理解程序设计的基本概念,如编程语言、编译器和解释器。

2. 教学内容算法定义及特性算法描述方法:伪代码和流程图程序设计基本概念3. 教学方法采用案例分析法,以具体的编程语言为例,让学生理解算法与程序设计的关系。

采用任务驱动法,让学生通过实际编写代码,体验算法实现的过程。

4. 教学步骤介绍算法的概念和特性,结合实例进行分析。

讲解伪代码和流程图的表示方法,引导学生学会使用这两种工具描述算法。

讲解程序设计的基本概念,如编程语言、编译器和解释器。

5. 课后作业结合本章内容,让学生编写一个简单的程序,实现一个基本的算法。

二、第二章:顺序结构程序设计1. 教学目标掌握顺序结构程序设计的基本语法和技巧。

理解顺序结构程序设计的原则,能够编写清晰、高效的程序。

2. 教学内容顺序结构程序设计的基本语法顺序结构程序设计的原则3. 教学方法采用案例分析法,通过分析具体的程序案例,让学生理解顺序结构程序设计的方法。

采用任务驱动法,让学生通过实际编写代码,掌握顺序结构程序设计技巧。

4. 教学步骤讲解顺序结构程序设计的基本语法,如变量声明、数据类型、输出语句等。

讲解顺序结构程序设计的原则,如代码清晰、可读性强、模块化等。

5. 课后作业结合本章内容,让学生编写一个简单的顺序结构程序,实现特定的功能。

三、第三章:分支结构程序设计1. 教学目标掌握分支结构程序设计的基本语法和技巧。

理解分支结构程序设计的原则,能够编写清晰、高效的程序。

2. 教学内容分支结构程序设计的基本语法分支结构程序设计的原则3. 教学方法采用案例分析法,通过分析具体的程序案例,让学生理解分支结构程序设计的方法。

采用任务驱动法,让学生通过实际编写代码,掌握分支结构程序设计技巧。

4. 教学步骤讲解分支结构程序设计的基本语法,如条件语句、循环语句等。

分治法

分治法
分 治 法
顾铁成
1
引例:称硬币
如果给你一个装有16枚硬币的袋子,其中有一
枚是假的,并且其重与真硬币不同。你能不能 用最少的比较次数,找出这个假币?

为了帮助你完成这个任务,将提供一台可用来 比较两组硬币重量的仪器,利用这台仪器,可
以知道两组硬币的重量是否相同。
2
引例:称硬币
常规的解决方法是先将这些硬币分成两
15
当 k = 1 时,各种可能的残缺棋盘
16
三格板的四个不同方向
17
【输入】
第一行输入棋盘 的总行数,第二 行输入残缺棋盘 的格子坐标。
【样例输入】 4
4 1
【样例输出】 2 2 3 3 2 1 1 3 4 4 1 5
【输出】
覆盖的矩阵图。
0 4 5 5
18
问题分析
很明显,当K=0时,是不需要三格板的,而当
24
【样例输入】 5 3 23 8 91 56 4 【样例输出】 1
25
问题分析
对于一组混乱无序的数来说,要找到第k
小的元素,通常要经过两个步骤才能实 现:
第一步:将所有的数进行排序; 第二步:确定第k个位置上的数。
26
问题分析
传统的排序算法(插入排序、选择排序
、冒泡排序等)大家都已经很熟悉了, 但已学过的排序方法无论从速度上பைடு நூலகம்还 是从稳定性方面,都不是最佳的。


将7作为一个参照数;
将这个数组中比7大的数放在7的左边; 比7大的数放在7的右边;

这样,我们就可以得到第一次数组的调整:
[ 4 2 6 6 1 ] 7 [ 10 22 9 8 ]
29

计算机算法设计与分析【王晓东-电子工业出版社-2版】-第3章

计算机算法设计与分析【王晓东-电子工业出版社-2版】-第3章
A 50 10 B 10 40 C 40 30 D 30 5
总共有五中完全加括号的方式
( A((BC)D)) ( A(B(CD))) (( AB)(CD))
((( AB)C)D) (( A(BC))D)
16000, 10500, 36000, 87500, 34500
上海金融学院信息管理系
T(n)
=n
n/2
n/2
n/2
n/2
T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4
上海金融学院信息管理系
5
算法总体思想
如果能够保存已解决的子问题的答案,而在需 要时再找出已求得的答案,就可以避免大量重 复计算,从而得到多项式时间算法。
第3章 动态规划
1
学习要点:
理解动态规划算法的概念。 掌握动态规划算法的基本要素 (1)最优子结构性质 (2)重叠子问题性质 掌握设计动态规划算法的步骤。 (1)找出最优解的性质,并刻划其结构特征。 (2)递归地定义最优值。 (3)以自底向上的方式计算出最优值。 (4)根据计算最优值时得到的信息,构造最优解。
上海金融学院信息管理系
9
矩阵连乘问题
给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1, 2…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次 序计算矩阵连乘积需要的数乘次数最少。
穷举法:列举出所有可能的计算次序,并计算出每一种计 算次序相应需要的数乘次数,从中找出一种数乘次数最少的 计算次序。
上海金融学院信息管理系
2
• 通过应用范例学习动态规划算法设计策略。 • (1)矩阵连乘问题; • (2)最长公共子序列; • (3)最大子段和 • (4)凸多边形最优三角剖分; • (5)多边形游戏; • (6)图像压缩; • (7)电路布线; • (8)流水作业调度; • (9)背包问题; • (10)最优二叉搜索树。

分治法经典案例

分治法经典案例

分治法经典案例
嘿,大家知道吗,这分治法可真是太厉害啦!就拿排序来说吧,比如一堆杂乱无章的数字,哎呀呀,那简直是一团乱麻!这时候分治法就出马啦。

想象一下,你要整理一个超级乱的房间,你会怎么做?当然是把房间分成几个区域,一个区域一个区域地整理呀,分治法就类似这个道理。

比如说归并排序,它就是把这堆数字不断地分成两半,再把两半合起来,就像你把房间先分成左边和右边,分别整理好后再合到一起。

再说说在图像识别里的应用。

假如你面前有一张超级复杂的图片,里面有各种形状、各种颜色的东西,哇,这要怎么搞清楚啊!但用了分治法,就像是把这张图片切成小块,一块一块地去识别、理解。

就好像你认识一个新朋友,你会先看他的脸,再看他的衣服,一步一步慢慢了解,对吧?
还有啊,在解决复杂的计算问题时,分治法也能大显身手。

好比你要算一道超级复杂的数学题,直接去算可能会让你头大,但是通过分治法,把问题分成小份,逐个击破。

就像你打游戏,一个大 boss 你一下打不过,那就一点一点地削弱它呀!
分治法不就是这样神奇而好用的东西吗?它能把超级复杂、看似不可能完成的任务,变得有条有理,能够被我们一步一步地解决掉。

所以说呀,分
治法真的是我们的好帮手,难道不是吗?它就像一把神奇的钥匙,能打开那些看似紧闭的难题大门,让我们在解决问题的道路上一路畅通无阻!这就是分治法的厉害之处,大家可千万别小瞧它哟!。

分治算法

分治算法

65 97
13 76
38 49 65 97
13 27 76
13 27 38 49 65 76 97
黑盒划分典型问题—合并排序
合并排序算法改进
从分治过程入手,容易消除mergeSort算法中的递归 调用
49 38 65 97 76 13 27
38 49
65 97
13 76
27
38 49 65 97
题的解,自底向上逐步求出原来问题的解。
T(n)
=
n
递归的概念
由分治法产生的子问题往往是原问题的较小模式,这 就为使用递归技术提供了方便。在这种情况下,反复 应用分治手段,可以使子问题与原问题类型一致而其 规模却不断缩小,最终使子问题缩小到很容易直接求 出其解。这自然导致递归过程的产生。
直接或间接地调用自身的算法称为递归算法。用函数 自身给出定义的函数称为递归函数。
黑盒划分典型问题—合并排序
【例5】合并排序
任务描述:任意给定一包含n个整数的集合,把n个整数按升序排列。 输入:每测试用例包括两行,第一行输入整数个数,第二行输入n个整 数,数与数之间用空格隔开。最后一行包含-1,表示输入结束。 输出:每组测试数据的结果输出占一行,输出按升序排列的n个整数。 样例输入:
13 27 76
13 27 38 49 65 76 97
黑盒划分典型问题—合并排序
黑盒划分典型问题—合并排序
合并排序算法改进
从分治过程入手,容易消除mergeSort算法中的递归调用 自然合并排序
49 38 65 97 76 13 27
49
38 65 97
76
13 27
38 49 65 97
黑盒划分典型问题—逆序对问题

分冶法

分冶法

f ( n) n 1 ( n ), d 1
d
T (n) 2T (n / 2) ( n 1)
a b 2, d 1, a b
d
d
T ( n) ( n lg n)
解递推方程得精确解: T (n) n log2 n n 1
10:39
13/42
减一技术
原问题(规模 n) (1) 子问题(n-1) (n-1)解 (n) 解 扩展解
无解
折 半 查 找
原问题解
插 入 排 序
10:39
22/42
插入排序(Insertion Sort)
任务:对 n 个元素作插入排序(规模 n) 减一策略 ——自顶向下:规模减小 ① 规模减小:规模减一,即 n-1 ② 求解:解 n-1规模子问题 ③ 扩展解:n-1规模解扩展为 n规模解 扩展方法的不同,有不同的插入排序 减一过程递归进行,直到 规模 = 1或0 为止 实现方法 —— 自底向上:规模增大 为便于实现,规模从 0 或 1 增加到 n
1, n 2 T ( n) k 2T ( n / 2) 1, n 2
10:39
7/42
分治法的一般时间效率分析 规模 n , 每次分为 a 个子问题,子问题规模相等 n/b 为简化分析, 不妨设 n = bk, k = 1, 2, 3, ...
通用分治递推式
c , n t 常量时间(基本操作次数) T ( n) aT ( n / b) f ( n), n t , a 1, b 2, c 0 f (n) : 分解时间 + 合并时间
平均 Tavg (n) 2n ln n 1.38n log2 n (n log2 n) 效率

分治法-PPT精选

2019/10/24
以比较为基础的有序检索问题最坏情况的时间下界
定理2.3 设A(1:n)含有 n(n≥1)个不同的元素,排序为A(1)< A(2) < …< A(n)。又设用以比较为基础的算法去判断是 否 xA(:1n) ,则这样的任何算法在最坏情况下所需的最小 比较次数FIND(n)有:
最坏情况下的成功检索的计算时间为 Θ(logn)
2019/10/24
3)平均情况下的成功检索的计算时间分析
利用外部结点和内部结点到根距离和之间的关系进行推导: 记,
由根到所有内结点的距离之和称为内部路径长度,记为I; 由根到所有外部结点的距离之和称为外部路径长度,记为E。
则有,E=I+2n
return(COMBINE(DANDC(p,m),
(SMALL(p,q)不为真时);
endif
DANDC(m+1,q)))

COMBINE(x,y):子结果的合并 函数,将区间[p,m]和[m+1,q]上
的子问题的解合并成上级区间
end DANDC
[p,q]上的“较完整”的解。当
p=1,q=n时,就得到整个问题的
解(递I1 归、过I3上程的)求解可再次采用分治方法划分后求
2019/10/24
2. 二分检索算法
算法2.3 二分检索 procedure BINSRCH(A,n,x,j)
integer low,high,mid,j,n; low←1; high←n; while low≤high do
mid ← (lowhigh)/2
方法1:比较硬币1和2的重量,有一个轻则找到; 否则比较硬币3和4,依次比较下去,直到找到。最 多8次比较。 方法2:利用分治法。16个硬币分为两组,每组8个, 比较重量,伪币在轻的一组。将轻的一组再分为两 组,每组4个……继续划分下去,依次每组2个,每 组1个,此时找到。

算法设计与分析王红梅第1章绪论


2021/6/12
}
15
清华大学出版社
算法设计与分析
⑷ 伪代码——算法语言
伪代码(Pseudocode):介于自然语言和 程序设计语言之间的方法,它采用某一程序 设计语言的基本语法,操作指令可以结合自 然语言来设计。
优点:表达能力强,抽象性强,容易理解
使用方法:7 ± 2
2021/6/12
16
清华大学出版社
欧几里德算法
1. r = m % n; 2. 循环直到 r 等于0
2.1 m = n; 2.2 n = r; 2.3 r = m % n; 3. 输出 n ;
2021/6/12
算法设计与分析
17
清华大学出版社
算法设计与分析
1.1.4 算法设计的一般过程
1.理解问题
2.预测所有可能的输入
3. 在精确解和近似解间做选择
算法设计与分析
1.1 算法的基本概念
1.1.1 为什么要学习算法 1.1.2 算法及其重要特性 1.1.3 算法的描述方法 1.1.4 算法设计的一般过程 1.1.5 重要的问题类型
2021/6/12
5
清华大学出版社
算法设计与分析
1.1.1 为什么要学习算法
理由1:算法——程序的灵魂
➢ 问题的求解过程:
14
清华大学出版社
算法设计与分析
#include <iostream.h>
int CommonFactor(int m, int n)

{ int r=m % n;

while (r!=0)

{ m=n;

n=r;

r=m % n; }

计算思维06-3.3 算法思想简介讲课提纲_20

第3章 算法思维3.3 算法思想简介20世纪中期以后,随着计算机的出现、发展,算法广泛地运用于种类问题的求解,成为计算机科学的灵魂,涌现出精彩纷呈的算法。

3.3.1 蛮力法蛮力法也称穷举法,其基本思想是采用一定的策略,将待解决问题的所有可能列出来,找出问题的解。

《算经》中的“百钱百鸡问题”:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何?该问题的解决方案是:设公鸡为x 只,母鸡为y 只,小鸡为z 只;则x 的取值范围为0到20,y 的取值范围为0到33,z 的取值范围为0到100,当然z 应该为3的倍数;这样总共有21×34×34,即24276种组合方案,其中满足条件x +y +z =100,并且5x +3y +z /3=100的组合就是问题的解。

[百钱百鸡VB 伪代码] p 1tep 3d (5x+3y+z/3=100)Then 采用的关键技术是描述,算法设计时应避免重复试探,时间复杂度较高,效率较低,分而治之N },其 中某段的和定义为1 设序列A 中有素,其最大段和为maxsum ;序列A 的开始位置为left ,结束位置为right 序列A left 和A rigth ,序列A left 的最大子段和为leftsu 相同,即用递归进一步分解子序列A left 和A left 中,其值为leftsum ;也有可能处在子序For x=0 To 20 Step 1 For y=0 To 33 Ste For z=0 To 100 S If (x+y+z=100)An Print x;y;z End If Next x Next y Next x蛮力法但现在的计算机有超强的计算能力,仍是直接解决问题的一种常用思路。

3.3.2 分治法分治法的基本思想是将一个难以直接解决的大问题划分成一些规模较小的子问题,,其求解过程通常由划分、求解子问题和合并3个阶段组成,如图3-8所示。

分治法


{ tmpa[k]=a[i]; i++; k++; }
while (j<=high)
//将第2子表余下部分复制到tmpa
{ tmpa[k]=a[j]; j++; k++; }
for (k=0,i=low;i<=high;k++,i++) //将tmpa复制回a中
a[i]=tmpa[k];
free(tmpa);
QuickSort(a,s,i-1); //对左子序列递归排序
QuickSort(a,i+1,t); //对右子序列递归排序
}
}
【算法分析】快速排序的时间主要耗费在划分操作上,对长度为n的
区间进行划分,共需n-1次关键字的比较,时间复杂度为O(n)。
对n个记录进行快速排序的过程构成一棵递归树,在这样的递归树中, 每一层至多对n个记录进行划分,所花时间为O(n)。
divide-and-conquer(P)
{ if |P|≤n0 return adhoc(P);
将P分解为较小的子问题 P1,P2,…,Pk;
for(i=1;i<=k;i++)
//循环处理k次
yi=divide-and-conquer(Pi); return merge(y1,y2,…,yk); }
2,5,1,7,10, 6,9,4,3,8 顶
2,5,1,7,10
6,9,4,3,8
分解
2,5,1 7,10 6,9,4 3,8
2,5 1 7 10 6,9 4 3 8
合并
25
7,10 6 9
底 3,8
2,5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档