算法设计与分析总结

时间:2024.4.5

第一章 绪论

1、重要特性

1.输入

2.输出

3.有穷性

4.确定性

5.可行性

2、描述算法的方法

1.自然语言:优点是直观易懂,缺点是容易出现二义性

2.流程图:优点是直观易懂,缺点是严密性不如程序设计语言,灵活性不如自然语言

3.程序设计语言:优点是计算机直接运行,缺点是抽象性差

4.伪代码

3、递归算法分析

1.猜测技术

2.扩展递归技术

3.通用分治递归推式

第二章 NP完全理论

第三章 蛮力法

3.1 蛮力法的设计思想

蛮力法依赖的基本技术——扫描技术,即采用一定的策略将待求解问题的所有元素依次处理一次,从而找出问题的解;

关键——依次处理所有元素。

3.2 查找问题中的蛮力法

3.2.1 顺序查找O(n)

3.2.2串匹配问题

BF O(n*m)

BMP O(n+m)

BM O(n*m)

3.3 排序问题中的蛮力法

3.3.1 选择排序O(n2)

3.3.2 起泡排序O(n2)

3.4 组合问题中的蛮力法

3.4.1 生成排列对象O(n!)

3.4.2 生成子集O(2n)

3.4.3 0/1背包问题O(2n)

3.4.4 任务分配问题O(n!)

3.5 图问题中的蛮力法

3.5.1 哈密顿回路问题O(n!)

3.5.2 TSP问题O(n!)

3.6 几何问题中的蛮力法

3.6.1 最近对问题O(n2)

3.6.2 凸包问题O(n3)

3.7 实验项目——串匹配问题

第四章 分治法

4.1 分治法的设计思想

设计思想:将要求解的原问题划分成k个较小规模的子问题,对这k个子问题分别求解。如果子问题的规模仍然不够小,则再将每个子问题划分为k个规模更小的子问题,如此分解下去,直到问题规模足够小,很容易求出其解为止,再将子问题的解合并为一个更大规模的问题的解,自底向上逐步求出原问题的解。

步骤:(1)划分(2)求解子问题(3)合并

4.2 排序问题中的分治法

4.2.1 递归排序O(nlog2n)

4.2.2 快速排序O(nlog2n)

4.3 组合问题中的分治法

4.3.1 最大字段和问题O(nlog2n)

4.3.2棋盘覆盖问题O(4k)

4.3.3 循环赛日程安排问题O(4k)

4.4 几何问题中的分治法

4.4.1 最近对问题O(nlog2n)

4.4.2 凸包问题O(nlog2n)

4.5 实验项目——最近对问题

第五章 减治法

5.1 减治法的设计思想

原问题的解只存在于其中一个较小规模的子问题中,所以,只需求解其中一个较小规模的子问题就可以得到原问题的解。

5.2 查找问题中的减治法

5.2.1 折半查找O(log2n)

5.2.2 二叉查找树O(log2n)

5.3 排序问题中的减治法

5.3.1 堆排序O(log2n)

5.3.2 选择问题O(log2n)

5.4 组合问题中的减治法

5.4.1 淘汰塞冠军问题O(n)

5.4.2 假币问题O(log2n)

5.5 实验项目——8枚硬币问题

第六章 动态规划法

6.1动态规划法的设计思想

将待求解问题分解成若干个相互重叠的子问题,每个子问题对应决策过程的一个阶段,将子问题的解求解一次并填入表中,当需要再次求解此子问题时,可以通过查表获得该子问题的解而不用再次求解。

步骤:

将原始问题分解为相互重叠的子问题,确定动态规划函数;

求解子问题,填表;

根据表,自底向上计算出原问题的解。

6.2 图问题中的动态规划法

6.2.1 TSP问题O(2n)

6.2.2 多段图的最短路径问题O(n+m)

6.3 组合问题中的动态规划法

6.3.1  0/1背包问题O(n*C)

6.3.2 最长公共子序列问题O(n*m)

 .

6.4 查找问题中的动态规划法

6.4.1 最优二叉查找树O(n^3)

6.4.2 近似串匹配问题

6.5 实验项目——最大子段和问题

第七章 贪心法

7.1 贪心法的设计思想

贪心法在解决问题的策略上目光短浅,只根据当前已有的信息就做出局部最优选择,而且一旦做出了选择,不管将来有什么结果,这个选择都不会改变。

贪心法的关键在于决定贪心策略。

7.2 图问题中的贪心法

7.2.1 TSP问题O(2n)

7.2.2 图着色问题

7.2.3 最小生成树问题O(2n)

7.3 组合问题中的贪心法

7.3.1 背包问题O(nlog2n)

7.3.2 活动安排问题O(nlog2n)

7.3.3 多机调度问题O(n*m)

7.4 实验项目——哈夫曼编码

第八章 回溯法

8.1 回溯法的设计思想

从解空间树根结点出发,按照深度优先策略遍历解空间树,在搜索至树中任一结点时,先判断该结点对应的部分解是否满足约束条件,或者是否超出目标函数的界,也就是判断该结点是否包含问题的(最优)解,如果肯定不包含,则跳过对以该结点为根的子树的搜索,即所谓剪枝(Pruning);否则,进入以该结点为根的子树,继续按照深度优先策略搜索。直到搜索到叶子结点,则得到问题的一个可能解。

步骤:

确定解向量和分量的取值范围,构造解空间树;

确定剪枝函数;

对解空间树按深度优先搜索,搜索过程中剪枝;

从所有的可能解中确定最优解。

8.2 图问题中的回溯法

8.2.1 图着色问题

8.2.2 哈密顿回路问题

8.3 组合问题中的回溯法

8.3.1 八皇后问题

8.3.2 批处理作业调度问题

8.4 实验项目——0/1背包问题

第九章 分支界限法

9.1 分支限界法的设计思想

1)首先确定一个合理的限界函数,并根据限界函数确定目标函数的界[down, up] ,并确定限界函数;

2)然后按照广度优先策略遍历问题的解空间树,在分支结点上,依次搜索该结点的所有孩子结点,分别估算这些孩子结点的限界函数的可能取值;

3)如果某孩子结点的限界函数可能取得的值超出目标函数的界,则将其丢弃;否则,将其加入待处理结点表(以下简称表PT)中;

4)依次从表PT中选取使限界函数的值是极值的结点成为当前扩展结点;

5)重复上述过程,直到找到搜索到叶子结点,如果叶子结点的限界函数的值是极值,则就是问题的最优解,否则,找到其他极值结点重复扩展搜索。

步骤:

确定解空间树

确定限界函数

按广度优先搜索解空间树,计算限界函数的值,填入PT表

从PT表中寻找极值,继续扩展结点,直到找到限界函数值为极值的叶子结点。

9.2 图问题中的分支限界法

9.2.1 TSP问题

9.2.2 多段图的最短路径问题

9.3 组合问题中断饿分支限界法

9.3.1 任务分配问题

9.3.2 批处理作业调度问题

5

9.4 实验项目——电路布线问题

第十章 概率算法


第二篇:算法分析总结


动态规划,基本上就是说:

你追一个MM的时候,需要对该MM身边的各闺中密友都好,这样你追MM这个问题就分解为对其MM朋友的问题,只有把这些问题都解决了,最终你才能追到MM。

该方法适用于聪明的MM,懂得“看一个人,不是看他如何对你,而是看他如何对他人。”的道理,并且对付这样的MM总能得到最优解。

该方法的缺点是开销较大,因为每个子问题都要好好对待。。。。

////////////////////////////////////////////////////////////////////

贪心法,基本上就是:

你追一个MM的时候,从相识到相知,每次都采用最aggressive的方式,进攻进攻再进攻!从不采用迂回战术或是欲擒故纵之法!目标是以最快的速度确立两人关系。

该法优点是代价小,速度快,但缺点是不是每次都能得到最优解。。。。。

////////////////////////////////////////////////////////////////////

回溯算法,基本上就是:

追一个MM,但也许你还是情窦初开的新手,不知道如何才能讨得MM的欢心,于是你只好一条路一条路的试,MM不开心了,你就回溯回去换另一种方式。当然其间你也许会从某些途径得到一些经验,能够判断哪些路径不好,会剪枝(这就是分支估界了)。你也可以随机选择一些路径来实施,说不定能立杆见影(这就是回溯的优化了)但总的来说,你都需要一场持久战。。。。

该算法一般也能得到最优解,因为大多数MM会感动滴!!但其缺点是开销大!除非你是非要谈一场恋爱不可,否则不推荐使用。特别是你可能还有许多其他的事情要做,比如学习,比如事业。。。。

////////////////////////////////////////////////////////////////////

老赵提问:假如一个mm对应NP完全问题,老大给个有效解法

eshow回答:呵呵,那你为什么那么贱,非要去追呢?记住:“天涯何处无芳草!”不过如果你“非如此不可”的话,建议升级你的硬件,好好学习,好好工作,加强实力,人到中年的时候也许你能解开NP难。。。。

强哥补充:这种MM可遇而不可求了,也就是eshow的终极目标。eshow其实已经开发出了

解决NP完全问题的对数级算法,但是不愿意告诉偶们……

在认真研读思考之后,calf mm举一反三,对深度优先和广度优先也做了总结:深度优先就是追一个mm追到底,直到失败然后换个mm继续追……广度优先就是同时追多个mm,一起发展……

////////////////////////////////////////////////////////////////////

大家都开始集思广益……

老马:二叉树的前序、中序和后序周游:

前序就是直接搞定MM,然后搞定她爸妈(左)和你自己爸妈(右); 中序就是先搞定未来岳父岳父,然后搞定她,最后告诉你爸妈;后序就是,让未来的岳父岳母和自己爸妈都觉得你们合适之后,才对MM下手,这个时候,就没有障碍了啊!

****************************************************

网络流:

追MM的时候总避免不了送礼物,但是你老是直接送礼物就会给MM造成很大的压力,于是你就想到了通过朋友来转送的方法。你希望送给MM尽可能多的礼物,所以就是需要找到一中配送方案,就是最大流了。然而你请别人帮忙并不是不要开销的,你让A同学拿去给B同学可能需要一些花费,自然你不是一个大款,想最小化

这个花费,那么就是最小费用最大流了……

****************************************************

在你追了若干美女都失败告终后,你发现有一批美女追起来是一样困难的,如果你能追到其中任何一个就能追到其他所有的美女,你把这样的女人叫作NP-Complete。P=NP:这是一个美好的猜想,追美女和恐龙的难度其实一样。APX与Random:NP的美女难追,你无法完全占有她。你只好随机的去靠近她,装作若无其事;或者用一种策略,追到她的一个approximation ratio,例如50%。APX-hard:这样的女人,连一个固定的百分比都不给你,还是另谋高就吧。

****************************************************

匹配:从初中到高中到大学大家追来追去,就是个二分图匹配的过程...."和谐社会"应该就一个最大匹配...

可是后来有某些MM同时跟>1个人发展,违背了匹配的基本原则...大家都很BS之...然后最近断背山很火,人们惊奇得发现原来还可以是 任意图匹配...

STL:某位贝尔实验室的大牛在追了N个MM后,为了造福后来人,总结了自己的经验, 出了本《 追MM求爱秘笈大全》,英文名叫Standard courTing Library,缩写为

STL广大同学在使用STL后,惊喜地发现追MM变得异常方便,大大缩短了时间和精力...

更多相关推荐:
算法设计与分析学习心得

班级:物联网1201姓名:刘潇学号:1030612129一、实验内容:这学期的算法与设计课,老师布置了这四个问题,分别是货郎担问题,动态生成二维数组,对话框下拉列表,排序问题。二、学习掌握:基本程序描述:(1)…

算法设计与分析学习总结

算法分析与设计学习总结题目算法分析与设计学习总结学院信息科学与工程学院专业届次学生姓名学号二一三年一月十五日算法分析与设计学习总结本学期通过学习算法分析与设计课程了解到算法是一系列解决问题的清晰指令代表着用系统...

算法分析与设计总结

10008148朱凌峰分析与设计总结算法(Algorithm)是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会…

算法设计与分析总结

算法设计与分析总结一算法引论算法通常人们将算法定义为一个有穷的指令集这些指令为解决某一特定的任务规定了一个运算序列什么是算法计算机来解决的某一类问题的方法或步骤算法是程序的核心算法的两个要素算法是由操作与控制结...

算法设计总结

Lab051000list求最长不减子序列输入有11000000个数数大小范围0109动态规划问题思路开一个数组下标表示出现的次数其值表示其最小值不断递增小于替换前面比它的的数二分查找找出刚刚好比它大的数nlo...

算法设计与分析总结

简答1算法定义算法是一个满足下列条件的计算有穷性终止性有限步内必须停止好算法坏算法确定性每一步都是严格定义和确定的动作要严格算法语言能行性每一个动作都能够被精确地机械执行输入有一个满足给定约束条件的输入输出满足...

算法设计与分析课程的心得体会

算法设计与分析课程的心得体会以最少的成本最快的速度最好的质量开发出合适各种各样应用需求的软件必须遵循软件工程的原则设计出高效率的程序一个高效的程序不仅需要编程技巧更需要合理的数据组织和清晰高效的算法这正是计算机...

算法设计与实现个人课程总结

算法课程总结指导教师所在院(系)班级学生姓名学号一、算法概述1.什么是算法?算法是解一确定类问题的任意一种特殊的方法。在计算机科学中,算法是使用计算机解一类问题的精确、有效方法的代名词。算法是一组有穷的规则,它…

数据结构与算法课程设计 心得体会 学习体会 (25)

数据结构课程设计心得体会学号:0804012023班级:计本(2)班姓名:谷敏敏经过两个星期的不懈努力,数据结构课程设计终于落幕。我的程序设计是使用prim算法得到所有的最小的生成树,在整个设计过程中,自己从刚…

数据结构与算法课程设计 心得体会 学习体会 (33)

课程设计心得体会姓名:曾辉学号;0804012041班级:08计本(2)课程设计是计算机科学与技术专业学生的集中实践性环节之一,是学习“数据结构与算法”理论和实验课程后进行的一次全面的综合练习。其目的是要达到理…

数据结构与算法课程设计 心得体会 学习体会 (24)

课程设计的心得体会姓名:何云龙学号:0804012022班级:08计科(2)班“数据结构与算法课程设计”是计算机科学与技术专业学生的集中实践性环节之一,是学习“数据结构与算法”理论和实验课程后进行的一次全面的综…

操作系统课程设计报告—银行家算法

操作系统课程设计报告题目银行家算法院系专业班级学生学号指导教师操作系统课程设计报告摘要Dijkstra提出的银行家算法是最具代表性的避免死锁的算法本文对如何用银行家算法来处理操作系统给进程分配资源做了详细的说明...

算法设计总结(34篇)