算法设计与分析期末复习

news/2024/11/16 9:50:21/

教材:计算机算法设计与分析(第五版) 王晓东著

一 算法复杂性分析

1 时间复杂性T(n)
 最坏情况Tmax(n)
 最好情况Tmin(n)
 平均情况Tavg(n)=∑p(I)T(I)
其中I是问题规模为n的一个实例,p(I)是实例I出现的概率。
2 渐进复杂性 n->∞时,T(n)留下的主项
上界O(g(n)):f(n)<=cg(n)
下界Ω(g(n)):f(n)>=cg(n)
非紧上界o(g(n)): f(n)<cg(n)
非紧下界ω(g(n)):f(n)>cg(n)
紧渐进界θ(g(n)): c1g(n)<=f(n)<=c2g(n) 等价于f(n)与g(n)同阶
3 常见的复杂性函数
常数C<logn<(logn)2<n<nlogn<n2<n3<2n<n!
4 NP问题与NPC问题
5 题目
1-4 金币阵列问题

二 递归与分治

对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归地进行下去,直到问题规模足够小,很容易求出其解为止。将求出的小规模的问题合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。
一些递归函数可以用非递归方式定义,如阶乘、斐波那契数列;有一些不可以,如双递归函数Ackerman函数。
附ackerman函数代码,它的增长随m非常快,到m=4时已经非常之大,将超过宇宙原子数量的总和。

int ackerman(int n,int m){if(n==1&&m==0)return 2;if(n==0&&m>=0)return 1;if(m==0&&n>=2)return n+2;return ackerman(ackerman(n-1,m),m-1);
}

递归函数要有边界条件(退出递归)和递归方程。

分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。在用分治法设计算法时,最好使子问题的规模大致相同。

题目集
全排列问题 整数划分问题 汉诺塔问题 最大公共子序列问题 分解式的个数
二分搜索 棋盘覆盖 归并排序 快速排序 线性时间选择 最接近点对问题 循环赛日程表

递归与分治题目集

三 贪心

在一些情况下,贪心可以得到最优解。而在其他情况下,贪心也可得到近似最优解。
贪心题目集

四 动态规划

经分解得到的子问题往往不是互相独立的,如果能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,直接调用,就可以避免大量重复计算,从而得到多项式时间算法。
动态规划题目集

五 回溯

回溯是暴力解法,+剪枝。
回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任一结点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。
在一般情况下用递归函数来实现回溯法。
回溯题目集


http://www.ppmy.cn/news/60701.html

相关文章

[计算机图形学]动画与模拟:欧拉方法、刚体与流体(前瞻预习/复习回顾)

一、前言 这是本专栏的倒数第二篇文章了&#xff0c;为什么不是最后一篇&#xff1f;因为我要单独写一篇总结哈哈&#xff0c;不管怎么说&#xff0c;从今年的3.13的MVP变换开始写&#xff0c;写到现在&#xff0c;也是一个很大的工程了&#xff0c;我很高兴能在大二下学期的期…

6.S081——陷阱部分(一文读懂Xv6系统调用)——xv6源码完全解析系列(5)

0.briefly speaking 这篇博客将要开始尝试阅读和研究与Xv6陷阱机制相关的代码&#xff0c;主要有以下文件&#xff0c;最重要的是结合Xv6 book将Xv6处理陷阱的相关逻辑和流程弄透。在Xv6的语境中所谓陷阱的触发有以下三种情况&#xff1a; 系统调用严重错误&#xff08;比如除…

多元时间序列 | BP神经网络多变量时间序列预测(Matlab完整程序)

多元时间序列 | BP神经网络多变量时间序列预测(Matlab完整程序) 目录 多元时间序列 | BP神经网络多变量时间序列预测(Matlab完整程序)预测结果评价指标基本介绍程序设计参考资料预测结果 评价指标 训练集数据的R2为:0.99805 测试集数据的R2为:0.98351 训练集数据的MAE为:…

架构设计-数据库篇

大家好&#xff0c;我是易安&#xff01; 之前我们讲过架构设计的一些原则&#xff0c;和架构设计的方法论&#xff0c;今天我们谈谈高性能数据库集群的设计与应用。 读写分离原理 读写分离的基本原理是将数据库读写操作分散到不同的节点上&#xff0c;下面是其基本架构图。 读…

【Linux多线程编程-自学记录】04.线程链接-pthread_join

Linux多线程编程学习代码&#xff08;代码已上传gitee&#xff0c;还请各位兄弟点个Star哦&#xff01;&#xff09; https://gitee.com/chenshao777/linux_thread.git 笔记&#xff1a; 线程链接 pthread_join int pthread_join(pthread_t thread, void **retval); 功能&…

SQL Server日期时间字符串的处理和转换

在SQL Server中&#xff0c;您可以使用T-SQL函数进行日期时间字符串的处理和转换。要判断一个日期字符串是否包含时间信息&#xff0c;可以使用T-SQL内置的函数CONVERT和TRY_CONVERT&#xff0c;并指定时间格式。 例如&#xff0c;假设有一个名为date_string的日期字符串&…

【华为OD机试 2023最新 】 找数字、找等值元素(C语言题解 100%)

文章目录 题目描述输入描述输出描述用例题目解析代码思路:C语言题目描述 给一个二维数组nums,对于每一个元素nums[i],找出距离最近的且值相等的元素,输出横纵坐标差值的绝对值之和,如果没有等值元素,则输出-1。 输入描述 输入第一行为二维数组的行 输入第二行为二维数…

从零开始三相逆变

1、题目分析 2、方案介绍 系统以220V市电作为电源&#xff0c;通过隔离调压器后分两路经过整流滤波后输入电路&#xff0c;一路为主回路供电&#xff0c;一路为辅助电源供电。三路SPWM波通过数字隔离器ISO7760送至由驱动芯片UCC27211控制三相半桥逆变电路&#xff0c;生成三路…