算法分析与设计(自我总结)

算法分析与设计复习

一、基本概念:

1.算法概念:

2.算法基本性质:

3.时间复杂度:

4.分治法:

5.动态规划:

6.贪心算法:

7.回溯法:

8.剪枝函数

9.分支限界法:

二、计算、画图

1.L型牌

2.最长公共子序列

3.0-1背包

4.活动安排问题

5.最优二叉树

6.最大完全子图

三、算法

——————————————————————————————————————————————————————

概念

1.算法是指解决问题的一种方法或一个过程。是有限条指令的序列,这个指令序列确定了解决某个问的运算或操作的步骤。

2.算法是若干指令的有穷序列,满足性质:

(1)输入:有外部提供的量作为算法的输入。

(2)输出:算法产生至少一个量作为输出。

(3)确定性:组成算法的每条指令是清晰,无歧义的。

(4)有限性:算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的。

3.算法的时间复杂度针对问题指定基本运算,计数算法所做的基本运算次数

4.1.分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同

4.2.分治法所能解决的问题一般具有以下几个特征:

问题规模缩小到一定的程度就可以容易地解决;

该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质;

利用分解出的子问题的解可合并为该问题的解;

该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。

4.3.分治法的基本步骤(伪码描述)

divide-and-conquer(P)
{
if ( | P | <= n0) adhoc(P);   // n0为一阈值,表示当问题P的规模不超过n0时,问题已容易直接解出,不必再继续分解。adhoc(P)为基本子算法。
divide P into smaller sub-instances P1,P2,...,Pk;//分解
for (i=1;i<=k;i++)
yi=divide-and-conquer(Pi);  //递归求解子问题
return merge(y1,...,yk);  //合并子问题解为原问题解
}

5.1.动态规划基本思想将待求解的问题分解成若干个子问题,并存储子问题的解以避免计算重复的子问题,然后自底向上地由子问题的解得到原问题的解

5.2.基本步骤

分析最优解的结构;

递归的定义最优值;

自底向上的计算出最优值;

根据计算最优值时得到的信息,构造最优解。

6.1.贪心算法:贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择

6.2.用贪心算法解背包问题的基本步骤

首先计算每种物品单位重量的价值vi /wi;

依贪心选择策略,直到背包装满为止。

7.1.回溯法:基本做法是搜索,或是一种组织得井井有条的、能避免不必要搜索的穷举式搜索法。

回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。

算法搜索至解空间树的任意一点时,先判断该结点是否包含问题的解

7.2.回溯法的基本步骤

(1)针对所给问题,定义问题的解空间;

(2)确定易于搜索的解空间结构;

(3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

7.3.具有剪枝函数的深度优先生成法称为回溯法

8.1.常用剪枝函数

用约束函数在扩展结点处剪去不满足约束的子树;

用限界函数剪去得不到最优解的子树。

9.1.类似于回溯法,分支限界法也是一种在问题的解空间树T上搜索问题解的算法。

9.2.分支限界法与回溯法区别 

(1)求解目标:回溯法的求解目标是找出解空间树中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出在某种意义下的最优解。

(2)搜索方式:回溯法以深度优先的方式搜索解空间树,而分支限界法则以广度优先或以最小耗费优先的方式搜索解空间树。

采用广度优先搜索策略的目的是: 尽早发现剪枝点.

9.3.常见的两种分支限界法

1)队列式(FIFO)分支限界法

将活结点表组织成一个队列,按照先进先出(FIFO)原则选取下一个结点为扩展结

(2)优先队列式分支限界法

将活结点表组织成一个优先队列,按照规定的优先级选取优先级最高的结点成为当前扩展结点。

你可能感兴趣的:(算法分析与设计(自我总结))