024改进分治算法的途径1:减少子问题数
算法设计与分析_武汉理工大学中国大学mooc课后章节答案期末考试题库2023年

算法设计与分析_武汉理工大学中国大学mooc课后章节答案期末考试题库2023年1.在寻找 n 个元素中第 k 小元素问题中,如快速排序算法思想,运用分治算法对 n个元素进行划分,如何选择划分基准?下面()答案解释最合理。
答案:以上皆可行。
但不同方法,算法复杂度上界可能不同2.减少子问题个数,就是减少时间复杂度函数T(n)=aT(n/b)+f(n) 中的()值。
答案:a3.使用分治法求解不需要满足的条件是()。
答案:子问题不能够重复4.改进分治算法的方法有()。
答案:减少子问题的个数_减少合并的时间_改进分治的均衡度5.阅读以下代码:int Fun(int n){ if(n <= 1) return 1; int First = Fun(n-1); intSecond = Fun(n-2); int iSum = First + Second; return iSum;}调用该函数,假设输入参数n值为5,当程序第二次执行语句 iSum = First + Second时,iSum的值为()。
答案:36.分治法的设计思想是将一个难以直接解决的大问题分割成规模较小的子问题,分别解决子问题,最后将子问题的解组合起来形成原问题的解。
这要求原问题和子问题()。
答案:问题规模不同,问题性质相同7.【图片】表示当输入规模为【图片】时的算法效率,以下算法效率最优的是()答案:8.以下哪些是算法的基本特点()。
答案:有穷性_确定性_可行性9.以下关于渐近记号的性质,正确的有()答案:10.下列关于算法的说法中正确的有()。
答案:算法必须在有限步操作之后停止_算法的每一步操作必须是明确的,不能有歧义或含义模糊_算法执行后一定产生确定的结果11.若一个算法的递归方程为【图片】,则其时间复杂度为()答案:12.以下关于记号【图片】的定义,正确的是()答案:存在正常数和使得对所有有:。
分治法解决问题的步骤

分治法解决问题的步骤一、基础概念类题目(1 - 5题)题目1:简述分治法解决问题的基本步骤。
解析:分治法解决问题主要有三个步骤:1. 分解(Divide):将原问题分解为若干个规模较小、相互独立且与原问题形式相同的子问题。
例如,对于排序问题,可将一个大的数组分成两个较小的子数组。
2. 求解(Conquer):递归地求解这些子问题。
如果子问题规模足够小,则直接求解(通常是一些简单的基础情况)。
对于小到只有一个元素的子数组,它本身就是有序的。
3. 合并(Combine):将各个子问题的解合并为原问题的解。
在排序中,将两个已排序的子数组合并成一个大的有序数组。
题目2:在分治法中,分解原问题时需要遵循哪些原则?解析:1. 子问题规模更小:分解后的子问题规模要比原问题小,这样才能逐步简化问题。
例如在归并排序中,不断将数组对半分,子数组的长度不断减小。
2. 子问题相互独立:子问题之间应该尽量没有相互依赖关系。
以矩阵乘法的分治算法为例,划分后的子矩阵乘法之间相互独立进行计算。
3. 子问题与原问题形式相同:方便递归求解。
如二分查找中,每次查找的子区间仍然是一个有序区间,和原始的有序区间查找问题形式相同。
题目3:分治法中的“求解”步骤,如果子问题规模小到什么程度可以直接求解?解析:当子问题规模小到可以用简单的、直接的方法(如常量时间或线性时间复杂度的方法)解决时,就可以直接求解。
例如,在求数组中的最大最小值问题中,当子数组只有一个元素时,这个元素既是最大值也是最小值,可以直接得出结果。
题目4:分治法的“合并”步骤有什么重要性?解析:1. 构建完整解:它将各个子问题的解组合起来形成原问题的解。
例如在归并排序中,单独的两个子数组排序好后,只有通过合并操作才能得到整个数组的有序排列。
2. 保证算法正确性:如果合并步骤不正确,即使子问题求解正确,也无法得到原问题的正确答案。
例如在分治算法计算斐波那契数列时,合并不同子问题的结果来得到正确的斐波那契数是很关键的。
【算法】分治法四步走

【算法】分治法四步⾛ 1. 明确分解策略2. 寻找最⼩问题3. 划分⼦类问题ⅡⅡⅡ你看看,上⾯的原问题与⼦类问题是不是⼀样的结构,相似!最简单的例⼦:树的先序遍历,当前问题:根,⼦类问题:根左右(根节点、左⼦树、右⼦树),访问根节点(因为只有当前节点根节点能够给我们操作,其他的左右⼦树都是起到划分的作⽤)⽐如说,快速排序的当前问题就是将⼀个元素摆到正确位置,汉诺塔的当前问题就是将⼀个最下⾯的圆盘摆到正确位置。
4. 解决当前问题在解决当前问题的时候,我们可能会需要结合之前划分⼦类问题的结果返回值(不⼀定),也可能不需要,作为单机问题去解决。
例如,我们在上⼀步中划分出了左右⼦树,这⼀步中我们可以将根节点与左右⼦树的根节点相连,形成⼀个完整的树。
折半分解ⅡⅡ相当于⼆分算法是串⾏的⼀种迭代算法,⽽分治算法是⼀种并⾏的递归算法。
折半分解是我们在分治法中最常⽤的,所以这⾥提出来特别介绍。
此算法常⽤于递归操作树,划分树的左右⼦树。
1. 明确分解策略:折半分解,左右边界(left, right),分解线mid = left + (right - left) / 22. 寻找最⼩问题:left > right 或者left >= right3. 划分⼦类问题:f(left, mid - 1)和f(mid + 1, right)4. 解决当前问题:root.left = f(left, mid - 1)和root.right = f(mid + 1, right)⼤家可以看看这道题,有序,如果使⽤⼆分算法,我们不能确定⾯对分叉是应该往左⾛,还是往右⾛,所以我们得使⽤分治算法,左右都⾛⼀遍。
四步⾛实例1. 明确分解策略第⼀步,明确怎么把⼤的问题⼀步步分解为最终的⼩问题;并明确这个函数的功能是什么,它要完成什么样的⼀件事。
分解策略:⼤问题 = n * ⼩问题。
如果⼤问题是⼀个数组,那么⼩问题就是数组中的⼀个元素。
算法优化技巧

算法优化技巧在计算机科学中,算法优化是指通过改进算法的设计、实现或应用,以提高算法的效率和性能。
优化算法可以使计算机程序更快、更省内存,从而提高系统的整体性能。
本文将介绍几种常见的算法优化技巧。
一、时间复杂度分析时间复杂度是衡量算法性能的重要指标。
在优化算法之前,我们需要了解算法的时间复杂度,并分析算法中的瓶颈操作。
通过针对瓶颈操作的特点进行优化,可以有效提高算法的运行速度。
二、循环优化循环是程序中常见的结构,而循环次数过多或循环体内部操作复杂会导致程序效率低下。
因此,在循环优化中,我们可以采取以下几种策略:1. 减少循环次数:尽量减少循环执行的次数,可以通过数学推导、剪枝等方式实现。
例如,使用二分查找算法代替线性查找算法,可以大大减少查找次数。
2. 减少循环内部操作:将复杂度较高的操作移出循环体,避免重复计算。
例如,在排序算法中,可以将交换操作放在循环体外进行,避免每次迭代都执行交换操作。
3. 循环展开:将多次重复的循环体代码展开,减少循环判断和循环控制的开销。
三、空间复杂度优化除了时间复杂度优化外,优化算法的空间复杂度也是很重要的。
以下是一些减少内存占用的技巧:1. 使用合适的数据结构:选择合适的数据结构可以减少内存的使用。
例如,当需要查找操作时,可以使用哈希表代替数组,提高查找效率。
2. 资源重用:尽量避免频繁地创建和销毁对象,可以通过对象池、内存池等技术实现资源的重用,减少内存分配和垃圾回收的开销。
四、并行化和并发优化对于一些计算密集型的任务,可以通过并行化和并发优化来提高算法的性能。
以下是一些常用的优化策略:1. 利用多核处理器:将任务划分为多个子任务,并利用多核处理器同时执行这些子任务,提高计算效率。
2. 异步处理:将某些不依赖于前一步结果的操作设计为异步执行,避免等待操作的完成。
五、缓存优化现代计算机的内存层次结构中,访问速度从高到低依次是寄存器、高速缓存、主存、磁盘等。
因此,在算法优化中,合理利用缓存可以提高程序的性能。
算法试题

一、单项选择题(本大题共20题,每题2分,共40分)1.从资源划分,复杂性分为()和()。
A 时间复杂度空间复杂度B 空间复杂度平均复杂度C 最好复杂度最坏复杂度D时间间复杂度平均复杂度2.下面不是证明贪心算法的方法有()。
A 领先B 优化C交换论证 D 界3.分支限界法使用()的搜索方式。
A 深度优先B 活结点优先C 广度优先D 自底向上4.下面不是动态规划的基本方法有()。
A 多重选择B 增加变量C 舍入D 区间变量5.动态规划方法使用()递归方式。
A 自顶向下B 自高到低C 自低到高D 自底向上6.肯定获得解,且一定是准确解的算法是()。
A 蒙特卡罗算法B 拉斯维加斯算法C 舍伍德算法D 数值概率算法7.快速排序的时间复杂度是O(n2),随机快速排序的时间复杂度是()。
A O(n)B O(2n)C O(n2)D O(nlogn)8.改进动态规划的方法有()和加速原理。
A 减少子问题数B 备忘录C 改进划分的对称性D 降低合并的时间复杂度9.含负权的最短路问题一般使用()求解。
A 动态规划B 贪心算法C 分治算法D网络流算法10.NP类问题可以()。
A 多项式时间计算B 指数时间验证C 多项式时间验证11.贪心算法基本要素有()和最优子结构性质。
A 分解合并性质B 独立子问题性质C 贪心选择性质D重叠子问题性质12.动态规划和分治算法的共同点是A最优子结构性质 B 重叠子问题性质 C 加速原理D贪婪准则13.从活结点表中选择下一个扩展结点的不同方式将导致不同的分支限界法,以下除()之外都是最常见的方式。
- 1 - (共4 页)- 2 - (共 4 页)A .队列式分支限界法B .优先队列式分支限界法C .栈式分支限界法D .FIFO 分支限界法14.以下关于判定问题难易处理的叙述中正确的是( )。
A .可以由多项式时间算法求解的问题是难处理的B .需要超过多项式时间算法求解的问题是易处理的C .可以由多项式时间算法求解的问题是易处理的D .需要超过多项式时间算法求解的问题是不能处理的15.设f (N )、g (N )是定义在正数集上的正函数,如果存在正的常数C 和自然数N 0,使得当N ≥N 0时有f (N )≥Cg (N ),则称函数f (N )当N 充分大时有下界g (N ),记作f (N )=Ω(g (N )),即f (N )的阶( )g (N )的阶。
数据结构算法改写方案

数据结构算法改写方案1、数组改造为链表:将数据结构从数组改造为链表可以提升插入和删除操作的效率。
链表的结点包含值和指向下一个结点的指针,通过修改指针可以实现数据的插入和删除。
2、递归改写为迭代:将递归算法改写为迭代算法可以降低函数调用的开销,提高算法的执行效率。
可以使用循环结构来模拟递归过程,将递归调用转化为循环操作。
3、使用哈希表优化查找算法:对于需要频繁进行查找操作的算法,可以使用哈希表来优化查找效率。
哈希表利用哈希函数将数据映射到数组中的位置,可以在常数时间内完成查找操作。
4、排序算法改进:对于排序算法,可以通过改进比较和交换的方式来提高性能。
例如,可以使用快速排序算法的随机化版本,将每次选择的基准元素随机选择,减少最坏情况的出现概率。
5、动态规划优化:对于动态规划算法,可以使用备忘录或者自底向上的方式来优化计算过程。
通过记录中间结果,可以避免重复计算,提高算法的效率。
6、贪心算法改进:对于贪心算法,可以通过引入剪枝策略或者使用堆等数据结构来优化选择过程。
剪枝策略可以排除不合适的选择,减少搜索空间;堆可以帮助选择最优的元素,提高贪心策略的效果。
7、并行化算法:对于一些计算密集型的算法,可以使用并行化的方式来提高计算速度。
通过将任务拆分为多个子任务,并发地执行这些子任务,可以充分利用多核处理器的性能。
8、空间换时间:在某些情况下,可以通过使用额外的内存空间来减少算法的时间复杂度。
例如,可以使用缓存来保存中间结果,避免重复计算;或者使用辅助数组来提前计算并存储某些信息。
9、分治算法改进:对于分治算法,可以通过合并子问题的方式来降低时间复杂度。
通过合并相邻的子问题,可以减少问题规模,加快问题求解的速度。
10、剪枝策略改进:对于搜索算法,可以通过引入剪枝策略来减少搜索空间。
通过排除不符合条件的选择,可以极大地减少搜索的时间和空间开销。
算法优化的概念
算法优化的概念算法优化是指通过改进和调整算法的设计和实现,使得算法在解决特定问题时能够更加高效、更快速地执行,并且在给定的资源限制条件下,能够获得更好的性能表现。
优化算法通常与时间复杂度和空间复杂度有关,即通过减小算法的时间复杂度或空间复杂度来提高算法的性能。
算法优化是计算机科学领域中的一个重要研究方向,对于提升计算机系统的性能具有重要意义。
在进行算法优化时,需要考虑多个方面。
首先,需要对算法进行分析和评估,了解其在现有情况下的性能表现。
通过分析算法的时间复杂度和空间复杂度,可以对算法的性能进行定量评估,确定是否需要进行优化。
其次,需要了解算法的核心思想和基本结构,找出算法中的瓶颈和性能瓶颈所在。
有时候,只需对算法的一小部分进行优化,就能带来显著的性能提升。
最后,需要根据算法的特点和问题的需求,选择合适的优化策略和方法。
在算法优化中,可以采用多种策略和方法。
以下是几种常见的算法优化方法:1.贪心算法的优化:贪心算法是一种简单而高效的算法思想,但在某些情况下,贪心算法可能会得到次优解。
通过将贪心算法与其他优化方法相结合,可以获得更好的结果。
例如,可以使用动态规划的思想对贪心算法进行修正,得到更优的解。
2.分治算法的优化:分治算法是将问题分解成小规模的子问题,然后递归地解决这些子问题,并将它们的解合并到原问题中。
对于某些问题,可以通过优化子问题的求解过程,减小问题规模或降低问题的复杂度,从而提高整体算法的效率。
3.动态规划的优化:动态规划是一种利用已解决子问题的解来求解更大规模的问题的方法。
在动态规划中,可以通过使用数组或表格等数据结构来保存子问题的解,避免重复计算,从而提高算法的效率。
此外,还可以通过适当选择状态转移方程以及使用启发式算法等方法来进一步优化动态规划算法的性能。
4.剪枝技术的优化:剪枝技术是在搜索算法中常用的一种优化方法。
通过在搜索过程中排除一些不可能达到最优解的情况,可以减少搜索空间,提高算法的效率。
025改进分治算法的途径2:增加预处理
改进分治算法的途径2:增加预处理输入: 平面点集 P 中有n 个点, n >1 输出: P 中的两个点,其距离最小 例子:平面点对问题蛮力算法:C (n ,2)个点对,计算最小距离,O (n 2) 分治策略: P 划为大小相等的P L 和P R 1. 分别计算 P L 、P R 中最近点对 2. 计算 P L 与P R 中各一个点的最近 点对3. 上述情况下的最近点对是解划分实例:n =10lP LP R算法伪码MinDistance (P, X, Y)输入: 点集P, X和Y为横、纵坐标数组输出: 最近的两个点及距离1. 若|P|≤3,直接计算其最小距离2. 排序X,Y3. 做中垂线l 将P划分为P L和P R4. MinDidtance (P L,X L,Y L)5. MinDistance (P R,X R,Y R)6. δ=min(δL,δR)//δL,δR为子问题的距离7. 检查距l 不超过δ两侧各1个点的距离. 若小于δ,修改δ为这个值右边每个小方格至多1个点,每个点至多比较对面的6个点,检查1个点是常数时间,O (n ) 个点需要O (n )时间6/536/259/44/)3/2()2/(22222δδδδδδ==+=+=d 跨边界处理2δδd算法分析步1 递归边界处理:O(1) 步2 排序:O(n log n)步3 划分:O(1) 步4-5子问题: 2T(n/2)步6确定δ: O(1)步7检查跨边界点对: O(n) T(n)=2T(n/2)+O(n log n)T(n)=O(1), n≤3递归树求解 T(n)=O(n log2n)增加预处理原算法:在每次划分时对子问题数组重新排序改进算法:1. 在递归前对X,Y 排序,作为预处理2. 划分时对排序的数组X,Y进行拆分,得到针对子问题P L的数组X L,Y L 及针对子问题P R的数组X R,Y R原问题规模为n,拆分的时间为O(n)实例:递归中的拆分P 1 2 3 4 X 0.5 2 -2 1 Y234-1X L 2(3) 0.5(1) 输 入预处 理拆分后X -2(3) 0.5(1) 1(4) 2(2) Y -1(4) 2(1)3(2)4(3)p 1p 3p 2p 4Y R -1(4) 3(2)X R 1(4) 2(2) Y L 2(1) 4(3)改进算法时间复杂度W(n)为算法时间复杂度递归过程:T(n) ,预处理:O(n log n)W(n) = T(n) + O(n log n)T(n) = 2T(n/2) + O(n)T(n) = O(1) n 3解得T(n) = O(n log n)于是W(n) = O(n log n)小结•依据W(n) = aW(n/b) + f(n)•提高算法效率的方法:–减少子问题个数a:W(n)=O(n log b a)–增加预处理,减少f(n)。
智慧树知道网课《算法分析与设计(山东联盟)》课后章节测试满分答案1
第一章测试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的数量级为____。
算法设计与分析教学大纲
算法设计与分析教学大纲课程概述算法设计与分析是计算机专业的核心课程。
学习该课程对学习其他专业课奠定了扎实的基础,也对培养计算思维和求解问题的能力起到重要作用。
面对各个应用领域的大量实际问题,最重要的是分析问题的性质并选择正确的求解思路,即找到一个好的算法。
特别是在当今复杂、海量信息的大数据处理中,一个好的算法往往起到决定性的作用。
本课程注重针对实际问题需求,进行数学建模并选择高效求解算法的训练,为提高学生的素质和创新能力打下必要的基础。
课程主要内容涉及:面对实际问题建立数学模型、设计正确的求解算法、算法的效率估计、改进算法的途径、问题计算复杂度的估计、难解问题的确定和应对策略等等。
本课程是算法课程的基础部分,主要涉及算法的设计、分析与改进途径,其他有关计算复杂性的内容将在后续课程"算法设计与分析(高级)"中加以介绍。
课程的内容分成两大部分:算法的基础知识和通用算法设计技术与分析方法。
算法基础知识部分主要介绍算法相关的基本概念和数学基础。
比如,什么是算法的伪码描述?什么是算法最坏情况下和平均情况下的时间复杂度?算法时间复杂度函数的主要性质,算法复杂度估计中常用的数学方法,如序列求和及递推方程求解。
通用算法设计技术与分析方法部分主要介绍分治策略、动态规划、贪心法、回溯与分支限界等算法设计技术。
重点介绍这些设计技术的使用条件、分析方法、改进途径,并给出一些重要的应用。
授课目标本课程从算法复杂性分析的基本方法和原理入手,以讲授算法设计的基本方法和原理、算法优化的基本方法和技巧为主,通过典型的问题及其相应的求解算法,以及算法复杂性的分析,达到完善学生的知识体系、培养学生的分析能力、拓展学生的思维方法,并鼓励学生把理论与实践相结合。
课程大纲01第一周基础知识(1)算法的基本概念及伪码描述,函数的渐近的界。
课时1.1 本周教学内容简介1.2 算法设计的两个例子1.3 问题的计算复杂度:排序问题1.4 货郎问题与计算复杂性1.5 算法及其时间复杂度1.6 算法的伪码表示1.7 函数的渐近的界1.8 有关函数渐近的界的定理1.9 几类重要函数02第二周基础知识(2)序列求和方法,递推方程求解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 利用子问题依赖关系,用某些子问 题解的代数表达式表示另一些子问 题的解,减少独立计算子问题个数. • 综合解的工作量可能会增加,但增 加的工作量不影响续)
利用中间矩阵,得到结果矩阵
C11 = M5 + M4-M2 + M6 C12 = M1 + M2 C21 = M3 + M4 C22 = M5+ M1-M3-M7
时间复杂度函数:
W(n) = 7 W(n/2) + 18(n/2)2 W(1) = 1 解 W(n) = O(nlog7) = O(n2.8075)
3
减少子问题个数
子问题间的依赖关系:代数变换 AD+BC = (A-B)(D-C) + AC + BD 算法复杂度 W(n) = 3 W(n/2) + cn W(1) = 1 方程的解 W(n) =O(nlog3) =O(n1.59)
4
例2 矩阵乘法 例2:矩阵相乘问题
输入:A, B 为 n 阶矩阵,n =2k 输出:C = AB 通常矩阵乘法: C 中有 n2个元素 每个元素需要做 n 次乘法 以元素相乘为基本运算 W(n)= O(n3)
递推方程 W(n) = 8 W(n/2) + cn2 W(1) = 1 解 W(n) = O(n3).
6
Strassen 矩阵乘法
变换方法:
设计 M1, M2, …, M7,对应7个子问题 M1 = A11 ( B12-B22 ) M2 = ( A11 + A12 ) B22 M3 = ( A21 + A22 ) B11 M4 = A22 ( B21- B11) M5 = ( A11 + A22 ) ( B11 + B22 ) M6 = (A12-A22) ( B21 + B22 ) M7 = (A11-A21) ( B11 + B12 ) 7
2
例1:整数位乘问题
输入:X ,Y 是 n 位二进制数, n = 2k 输出:XY 普通乘法:需要O(n2)次位乘运算
简单划分:令 X= A2n/2 +B, Y= C2n/2 +D. XY= AC 2n + (AD + BC) 2n/2 + BD
X Y A B
C
D
W(n) = 4W(n/2)+O(n)W(n)=O(n2)
8
矩阵乘法的研究及应用
矩阵乘法问题的难度: • Coppersmith–Winograd算法:O(n2.376) 目前为止最好的上界 • 目前为止最好的下界是: (n2)
应用: • 科学计算、图像处理、数据挖掘等
• 回归、聚类、主成分分析、决策树 等挖掘算法常涉及大规模矩阵运算
9
改进途径小结
• 适用于:子问题个数多,划分和综 合工作量不太大,时间复杂度函数 W(n) = (nlog a)
改进分治算法的途 径1:减少子问题数
减少子问题个数的依据
分治算法的时间复杂度方程 W(n) = aW(n/b) + d(n) a:子问题数,n/b:子问题规模, d(n):划分与综合工作量.
当 a 较大, b较小, d(n)不大时,方程的解: W(n) = (nlog a )
b
减少a是降低函数W(n)的阶的途径. 利用子问题的依赖关系,使某些子问题 的解通过组合其他子问题的解而得到.
5
简单分治算法
分治法 将矩阵分块,得
A11 A12 B11 B12 C11 C12 A 21 A22 B21 B22 C 21 C 22
其中
C11 A11 B11 A12 B21 C12 A11 B12 A12 B22 C 21 A21 B11 A22 B21 C 22 A21 B12 A22 B22