`

算法导论学习笔记三之分治法与递归式解法

 
阅读更多

分治法概念:

分治法:将原问题分成n个规模较小而结构与原问题相似的子问题;递归地解这些子问题,然后合并其结果就得到原问题的解。

分治模式在每一层递归上都有三个步骤:

第一步:将原问题分解成一系列子问题;(分解)

第二部:递归地解各子问题。若子问题足够小,则直接求解;(解决)

第三部:将子问题的结果合并成原问题的解;(合并)

分治法算法分析:

当一个算法中含有对自身的递归调用时,其运行时间可用一个递归方程来表述,分治算法中的递归式是基于基本模式中的三个步骤的。设T(n)为在规模n下问题的运行时间。如果n足够小,例如有n<c(c为常量),则得到它的直径解的时间为常量,写作theta(1)。假设我们把原问题分成a个子问题,每一个的大小是原问题的1/b。若分解该问题和合并解的时间各为D(n),则得递归式:

             theta(1)                  若n<=c

T(n)={

             aT(n/b)+D(n)+C(n)  否则

 

合并排序算法的分析:

合并算法是分治法的一种,故基本步骤如下:

分解:这一步仅仅是计算出子数组中间位置,因而D(n)=theta(1)

解决:递归地解两个规模为n/2的子问题,时间为2T(n/2)

合并:已知merge过程在一个含有n个元素的子数组上的运行时间为theta(n)。则C(n)=theta(n).

函数D(n)和C(n)的阶为theta(n)和theta(1),他们的和是n的线性函数,即阶为theta(n)。将它与“解决”步骤所得的项2T(n/2),即得T(n)的递归表示:

 

             theta(1)                  若n=1

T(n)={

             2T(n/2)+theta(n)    若n>1

 

递归式解法:

 

本来打算详细讲解的,但是由于时间有限,直接在网上找到一份ppt上传吧,基本上能讲清楚,而且PPT格式比网页看起来更友好些,各位看官见谅

 

分享到:
评论

相关推荐

    《算法导论》学习笔记_

    综上所述,《算法导论》的学习笔记覆盖了算法的基础知识、分析方法以及高级技巧,如分治法和递归式的解法等。这些知识点不仅为学习者提供了扎实的理论基础,也为后续深入研究算法提供了必要的工具。

    算法导论 1-7章学习笔记

    《算法导论》前七章学习笔记涵盖了计算机科学中一些重要的基本算法、数据结构以及图论算法的概念和实现方法。这些笔记不仅记录了算法的具体实现,还提供了时间复杂度的分析和相关代码实例,是学习和复习算法知识的...

    [麻省理工学院-算法导论].Introduction.to.Algorithms.-.Lecture.Notes 算法导论-课堂笔记 讲义

    以上只是《算法导论》部分内容的概述,实际的课堂笔记和讲义会包含更丰富的例子、习题和解析,帮助读者深入理解和掌握这些概念。通过学习这些内容,可以提升对算法和数据结构的理解,为解决实际问题打下坚实基础。

    corman 算法导论 教师手册

    本章深入探讨了递归解法的设计与分析,包括如何通过递归公式来解决实际问题。 **解决方案**:本章的习题解答覆盖了从简单的递归关系到更复杂的递归算法设计,通过这些实践练习,学生能够熟练掌握递归的运用技巧。 #...

    算法导论第二版答案

    由于直接从给定的内容中提取知识点比较困难,因为内容主要是章节名、修订历史、前言和各章节的讲义笔记及解决方案的页码索引,以下是基于这些信息点,结合《算法导论》第二版这本书内容的详细知识点说明: ...

    [麻省理工学院-算法导论].Introduction.to.Algorithms.-.Lecture.Notes

    《麻省理工学院-算法导论》是一门深入探讨计算机科学核心领域的课程,主要围绕算法的设计、分析和实现展开。这门课程的讲义集合,包括了从基础到高级的各种算法,是学习和理解算法的宝贵资源。标签“麻省理工”、...

Global site tag (gtag.js) - Google Analytics