- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
1、算法是指解决问题的一种方法或一个过程。
算法是若干指令的有穷序列,满足性质:
输入:有外部提供的量作为算法的输入(0个或多个)。
输出:算法产生至少一个量作为输出。
确定性:组成算法的每条指令是清晰、无歧义的。
有限性:算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的。
2、算法复杂性是算法所用的计算机资源
最坏情况下的时间复杂度是指算法在所有可能的输入中,执行时间最长的情况所对应的时间复杂度。它表示算法在不利情况下的性能表现。
平均情况下的时间复杂度是指算法在所有可能的输入中,执行时间的平均值所对应的时间复杂度。它表示算法在典型情况下的性能表现
时间复杂度主要受输入规模、输入特性和算法设计有关。
空间复杂度主要受输入规模、输入特性、数据结构和算法设计有关。
大O表示法用于描述算法的上界。
对于函数f(n)和g(n),如果存在正整数c和n0,使得对于所有nn0,都有f(n)=c*g(n),则称f(n)是O(g(n))。
大Ω表示法用于描述算法的下界。
对于函数f(n)和g(n),如果存在正整数c和n0,使得对于所有nn0,都有f(n)=c*g(n),则称f(n)是Ω(g(n))。
3、直接或间接地调用自身的算法称为递归算法。
用函数自身给出定义的函数称为递归函数。
分治法的基本思想是,将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。
分治法的算法策略:
(1).分解:将原问题分解为相互独立的、与原问题相同的子问题。
(2).解决:递归求解子问题。
(3).合并:将子问题的解合并,得到原问题的解。
4、二分搜索技术
基本思想:将n个元素分成个数大致相同的两半,取a[n/2]与x进行比较,若x=a[n/2],则找到元素,若xa[n/2],则在数组的左边继续搜索x,若xa[n/2],则在数组的右边继续搜索x。
5、棋盘覆盖
基本思想/解题思路:当k0时,将2^k*2^k的棋盘分割为4个2^(k-1)*2^(k-1)的子棋盘,特殊方格必位于四个子棋盘之一中,其余三个无特殊方格,为将这三个无特殊方格的棋盘转化为特殊棋盘,可以用一个L型骨牌覆盖这三个较小棋盘的会合处,这3个子棋盘上被L型骨牌覆盖的方格就成为该棋盘上的特殊方格,从而将问题转化为4个较小规模的棋盘覆盖问题,递归的使用这种分割,直至棋盘简化为1*1棋盘。
6、合并排序
基本思想:将待排序元素分成大小大致相同的两个子集合,分别对两个子集合进行排序,最终将排好序的子集合合并成要求的排好序的集合。
7、快速排序
基本思想:对于输入的子集合a[p:r],按以下三个步骤进行排序:
1)分解,将以a[p]为基准元素将a[p:r]划分成3段a[p:q-1],a[q]和a[q+1:r],a[p:q-1]中任意一个元素小于a[q],a[q+1:r]中任意一个元素大于a[q],a[q]在划分过程中确定。
2)递归求解,递归调用快速排序函数,分别对a[p:q-1]、a[q+1:r]进行排序。
3)合并,由于a[p:q-1]、a[q+1:r]的排序是就地进行的,因此a[p:q-1]、a[q+1:r]排序后,a[p:r]则已排好序。
8、动态规划算法的基本要素
最优子结构性质:问题的最优解包含其子问题的最优解
重叠子问题性质:在求解问题的过程中,相同的子问题会被多次重复计算。
动态规划的基本步骤:
1)找出最优解的性质,并刻划其结构特征
2)递归的定义最优值
3)以自底向上的方法求解最优值
4)根据求解最优值时得到的信息,构造最优解
9、矩阵连乘问题
10、最长公共子序列
11、贪心算法的概念:贪心算法的是一种解决优化问题的算法设计范式,其基本思想是在每一步选择中都采取当前看起来最优的选择,即贪心的选择局部最优解,以期望这些局部最优解可以推导出全局最优解。
贪心算法的基本要素:
1)最优子结构性质:问题的最优解包含其子问题的最优解
2)贪心选择性质:所求问题的最优解可以通过一系列局部最优解的选择,即贪心的选择来达到。
贪心算法和动态规划算法的比较:
共同点:都需要问题具有最优子结构性质,都用来求优化问题。
不同点:贪心算法每步选择不依赖子问题的解,动态规划每步选择依赖子问题的解。贪心算法还需要问题具有贪心选择性质,动态规划还需要问题具有重叠子问题性质。贪心算法求解是自顶向下的,动态规划的求解是自底向上的。
12、哈夫曼编码的基本思想:将所有字符的频率作为节点构造一个优先队列。然后每次从优先队列中取出两个频率最低的节点,合并它们作为一个新的节点,其频率为两个节点频率之和。将新合并的节点重新压入优先队列。重复以上过程,直到队列
文档评论(0)