西安邮电大学算法资料

选择:

1.算法的性质包括输入、输出、( A )、有限性。

A. 确定性 B. 随机性 C. 复杂性 D. 渐近复杂性

2.备忘录法是那种算法的变形( B )。

A、分治算法 B、动态规划算法 C、贪心算法 D、回溯法

3.具有最优子结构的算法有( D )。

A.概率算法 B.回溯法 C.分支限界法 D.动态规划法

4.回溯法解旅行商问题时的解空间树是( B )。

A、子集树 B、排列树 C、深度优先生成树 D、广度优先生成树

5.下面哪种函数是回溯法中避免无效搜索采取的策略( C )。

A、递归函数 B、随机函数 C、剪枝函数 D、搜索函数

简答:

(1)算法的概念:算法是指解决问题的一种方法或一个过程。

(2)算法的性质:算法是若干指令的有穷序列,满足性质:(1)输入:有外部提供的量作为算法的输入。(2)输出:算法产生至少一个量作为输出。(3)确定性:组成算法的每条指令是清晰,无歧义的。(4)有限性:算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的。(5)可行性:算法的每一条指令必须足够基本,它们可以通过已经实现的基本运算执行有限次来实现。

(3)程序的概念:程序是算法用某种程序设计语言的具体实现

(4)算法与程序的不同:(1)算法是给人来读的,直接将算法输入计算机是不能运行的(2)程序可以不满足算法的“有限性”。

(5)算法复杂性:算法所需要的计算机资源,所需资源多,算法的复杂性高;反之则复杂性低。【时间复杂性(指令数)、空间复杂性(存储器大小)、渐近复杂性】

(6)计算复杂性:是用计算机求解问题的难易程度。其度量标准:一是计算所需的步数或指令条数(时间复杂度),二是计算所需的存储单元数量(空间复杂度)。

(7)渐近复杂性的基本分析方

(8)可操作性最好且最有实际价值的是最坏情况下的时间复杂性。

(9)算法渐近复杂性分析中常用函数:单调函数;取整函数;多项式函数;指数函数;对数函数;阶乘函数;

第 2 章 递归与分治策略

(1)分治法的基本思想:将一个问题不断分割成若干个小问题,然后通过对小问题的求解再生成大问题的解。

(2)分治法所能解决问题具有的特征:将要求解的较大规模的问题分割为 k 个较小规模的子问题。对这 k 个子问题分别求解。如果子问题的规模仍然不够小,则再划分为 k 个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止。

(3)分治法与动态规划算法的相同点和不同点是什么:分治法与动态规划的相同点:

分治法与动态规划,二者要求原问题具有最有子结构,都是将问题分而治之分解成若干个规模较小的子问题; 不同点: 动态规划是将原问题分解为多个子问题,通过计算出子问题的结果构造一个最优解。动态规划通过迭代法自底向上求解,动态规划将分解后的子问题理解为相互间有联系,有重叠的部分; 算法的应用:装配线,矩阵乘法,最长公共子序列,构造最优的二叉树 分治法是将原问题分解为多个子问题,利用递归对各个子问题独立求解,最后利用各子问题的解进行合并形成原问题的解。分治法将分解后的子问题看成是相互独立的。

(4)二分搜索方法的基本思想:将 n 个元素分成个数大致相同的两半,取 a[ n / 2 ]与欲查找的 x 作比较,如果 x = a[ n / 2 ]则找到 x,算法终止;如果 x a[ n / 2 ],则只要在数组 a 的右半部继续搜索 x。

!(5)二分搜索方法的程序设计:充分利用了元素间的次序关系,采用分治策略

(6)棋盘覆盖问题的基本思想:棋盘覆盖问题初看起来很难下手解决,但仔细思考后可以采用分治策略设计针对该问题的一个巧妙解法:如下图所示,当 k > 0 时,将

2k × 2k 棋盘分割为 4 个 2k-1 × 2k-1 子棋盘,如图 (a) 所示。显然特殊方格必位于图 (a) 中 4 个较小子棋盘之一中,其余 3 个子棋盘中则无特殊方格。为了将这 3 个无特殊方格的子棋盘转化为特殊棋盘,可以用一个 L 型骨牌覆盖这 3 个较小棋盘的会合处,如图 (b) 和 (c) 所示。从而将原问题转化为 4 个较小规模的棋盘覆盖问题。递归地使用这种分割,直至棋盘简化为棋盘 1×1(易于求解)。

(7)合并排序基本思想是:(1)将待排序元素分成大小大致相同的两个子集合,(2)分别对两个子集合进行排序,(3)最终将排好序的子集合合并成为所要求的排好序的集合。

(8)快速排序基本思想:排序子数组 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 ]。下标 q 在划分过程中确定。(2)递归求解:通过递归调用快速排序算法分别对 a[ p : q - 1 ] 和 a[ q + 1 : r ] 进行排序。(3)合并:对 a[ p : q - 1 ] 和 a[ q + 1 : r ] 的排序在各自的范围内进行,因此排好序后不需任何运算整个数组 a[ p : r ] 即完成排序。

第 3 章 动态规划

(1)动态规划的基本思想及其要素:基本思想:将待求解问题分解成若干个子问题。要素:最优子结构性质和重叠问题性质。

(2)矩阵连乘问题

!(3)备忘录方法的概念:备忘录方法是动态规划方法的变形。与动态规划算法不同的是,备忘录方法的递归方式是自顶向下的,而动态规划算法则是自底向上的。备忘录方法的控制

结构与直接递归方法的控制结构相同,区别在于备忘录方法为每个解过的子问题建立了备忘录以备需要时查看,避免了相同子问题的重复求解。

(4)最长公共子序列:一个数列 ,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则

称为已知序列的最长公共子序列。

(5)最大子段和的基本概念:

(6) 0-1背包问题的基本思想

第 4 章 贪心算法

(1)贪心法的思想:当一个问题具有最优子结构性质时,可用动态规划法求解。但有时会有更简单有效的算法。

(2)活动安排问题:活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合,该问题要求高效地安排一系列争用某一公共资源的活动。

(3)贪心算法的基本要素:贪心选择性质和最优子结构性质。

与动态规划算法的差异:(1)贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。(2)动态规划算法通常以自底向上的方式解各子问题,而贪心算法则通常以自顶向下的方式进行,以迭代的方式作出相继的贪心选择,每作一次贪心选择就将所求问题简化为规模更小的子问题。(3)对于一个具体问题,要确定它是否具有贪心选择性质,必须证明每一步所作的贪心选择最终导致问题的整体最优解。

回溯法的基本思想::从一条路往前走,能进则进,不能进则退回来,换一条路再试。 基本概念:是一种系统地搜索解空间树而求得问题解的搜索算法。

计算:

1.

2.

3.

使用分治算法找一组数的最大最小数。采用如下设计思想:

将数据集 S 均分为 S1 和 S2;

求解 S1 和 S2 中的最大和最小值;

最终的最大和最小值可以计算得到:min( S1, S2 ), max( S1, S2 );

采用同样的处理方法递归处理 S1 和 S2。

可以得到该算法复杂性的递推公式如下:

根据递推公式推导出该复杂性表达式。

4.

下面给出了非递归形式的二分搜索方法代码,请补充下划线处的代码。

5.

利用动态规划法设计如下的矩阵连乘最小次数问题,写出动态规划法求解过程。

A1:40×25 A2:25×25 A3:25×15

解:m[0][0]=m[1][1] =m[2][2] =m[3][3]=0

r=2 i=1 j=2

m[1][2]=40*25*10=10000

i=2 j=3

m[2][3]= 25*10*15=3750

r=3 i=1 j=3

m[1][3]= m[1][1]+ m[2][3]+ 40*25*15=18750

k=2

t= m[1][2]+ m[3][3]+ 40*10*15=16000

m[1][3]=t=16000

6.

上机实验:用分治法找最大最小数

7.

上机实验:编辑距离

8.

上机实验:数字三角形

证明:

1.

2.

证明上述问题具有“贪心选择性质”和“最优子结构性质”。

算法:

1.

有一个箱子容量为 V(正整数),同时有 n 个物品,每个物品有一个体积(正整数)。要求 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。编写程序实现,自定义输入和输出。

【提示】使用二维数组 f[ i ][ j ], 表示前 i 个物品装入容量为 j 的箱子能获得的最大体积,则状态转移方程:

f[ i ][ j ] = max( f[ i - 1 ][ j ], f[ i -1 ][ j - a[ i ] ] + a[ i ] );

2.

用回溯法搜索排列树的算法是什么?

void Backtrack ( int t )

{

if ( t > n ) output( x );

{

else

for ( int i = t; i

{

swap( x[ t ], x[ i ] );

if ( Constraint( t ) && Bound( t ) ) Backtrack( t + 1 );

swap( x[ t ], x[ i ] );

}

}

}

3.

对批处理作业调度问题:作业需要机器处理时间的表如下,如果调度方案为:1,2,3,计算完成时间和。

作业调度方案:1,2,3(必须考虑机器的空闲时间):

作业 1 在机器 1 上完成的时间为 2,在机器 2 上完成的时间为 3(2 + 1)

作业 2 在机器 1 上完成的时间为 5(2 + 3),在机器 2 上完成的时间为 6(5 + 1) 作业 3 在机器 1 上完成的时间为 7(2 + 3 + 2),在机器 2 上完成的时间为 10(7 + 3) 完成时间和:3 + 6 + 10 = 19

选择:

1.算法的性质包括输入、输出、( A )、有限性。

A. 确定性 B. 随机性 C. 复杂性 D. 渐近复杂性

2.备忘录法是那种算法的变形( B )。

A、分治算法 B、动态规划算法 C、贪心算法 D、回溯法

3.具有最优子结构的算法有( D )。

A.概率算法 B.回溯法 C.分支限界法 D.动态规划法

4.回溯法解旅行商问题时的解空间树是( B )。

A、子集树 B、排列树 C、深度优先生成树 D、广度优先生成树

5.下面哪种函数是回溯法中避免无效搜索采取的策略( C )。

A、递归函数 B、随机函数 C、剪枝函数 D、搜索函数

简答:

(1)算法的概念:算法是指解决问题的一种方法或一个过程。

(2)算法的性质:算法是若干指令的有穷序列,满足性质:(1)输入:有外部提供的量作为算法的输入。(2)输出:算法产生至少一个量作为输出。(3)确定性:组成算法的每条指令是清晰,无歧义的。(4)有限性:算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的。(5)可行性:算法的每一条指令必须足够基本,它们可以通过已经实现的基本运算执行有限次来实现。

(3)程序的概念:程序是算法用某种程序设计语言的具体实现

(4)算法与程序的不同:(1)算法是给人来读的,直接将算法输入计算机是不能运行的(2)程序可以不满足算法的“有限性”。

(5)算法复杂性:算法所需要的计算机资源,所需资源多,算法的复杂性高;反之则复杂性低。【时间复杂性(指令数)、空间复杂性(存储器大小)、渐近复杂性】

(6)计算复杂性:是用计算机求解问题的难易程度。其度量标准:一是计算所需的步数或指令条数(时间复杂度),二是计算所需的存储单元数量(空间复杂度)。

(7)渐近复杂性的基本分析方

(8)可操作性最好且最有实际价值的是最坏情况下的时间复杂性。

(9)算法渐近复杂性分析中常用函数:单调函数;取整函数;多项式函数;指数函数;对数函数;阶乘函数;

第 2 章 递归与分治策略

(1)分治法的基本思想:将一个问题不断分割成若干个小问题,然后通过对小问题的求解再生成大问题的解。

(2)分治法所能解决问题具有的特征:将要求解的较大规模的问题分割为 k 个较小规模的子问题。对这 k 个子问题分别求解。如果子问题的规模仍然不够小,则再划分为 k 个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止。

(3)分治法与动态规划算法的相同点和不同点是什么:分治法与动态规划的相同点:

分治法与动态规划,二者要求原问题具有最有子结构,都是将问题分而治之分解成若干个规模较小的子问题; 不同点: 动态规划是将原问题分解为多个子问题,通过计算出子问题的结果构造一个最优解。动态规划通过迭代法自底向上求解,动态规划将分解后的子问题理解为相互间有联系,有重叠的部分; 算法的应用:装配线,矩阵乘法,最长公共子序列,构造最优的二叉树 分治法是将原问题分解为多个子问题,利用递归对各个子问题独立求解,最后利用各子问题的解进行合并形成原问题的解。分治法将分解后的子问题看成是相互独立的。

(4)二分搜索方法的基本思想:将 n 个元素分成个数大致相同的两半,取 a[ n / 2 ]与欲查找的 x 作比较,如果 x = a[ n / 2 ]则找到 x,算法终止;如果 x a[ n / 2 ],则只要在数组 a 的右半部继续搜索 x。

!(5)二分搜索方法的程序设计:充分利用了元素间的次序关系,采用分治策略

(6)棋盘覆盖问题的基本思想:棋盘覆盖问题初看起来很难下手解决,但仔细思考后可以采用分治策略设计针对该问题的一个巧妙解法:如下图所示,当 k > 0 时,将

2k × 2k 棋盘分割为 4 个 2k-1 × 2k-1 子棋盘,如图 (a) 所示。显然特殊方格必位于图 (a) 中 4 个较小子棋盘之一中,其余 3 个子棋盘中则无特殊方格。为了将这 3 个无特殊方格的子棋盘转化为特殊棋盘,可以用一个 L 型骨牌覆盖这 3 个较小棋盘的会合处,如图 (b) 和 (c) 所示。从而将原问题转化为 4 个较小规模的棋盘覆盖问题。递归地使用这种分割,直至棋盘简化为棋盘 1×1(易于求解)。

(7)合并排序基本思想是:(1)将待排序元素分成大小大致相同的两个子集合,(2)分别对两个子集合进行排序,(3)最终将排好序的子集合合并成为所要求的排好序的集合。

(8)快速排序基本思想:排序子数组 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 ]。下标 q 在划分过程中确定。(2)递归求解:通过递归调用快速排序算法分别对 a[ p : q - 1 ] 和 a[ q + 1 : r ] 进行排序。(3)合并:对 a[ p : q - 1 ] 和 a[ q + 1 : r ] 的排序在各自的范围内进行,因此排好序后不需任何运算整个数组 a[ p : r ] 即完成排序。

第 3 章 动态规划

(1)动态规划的基本思想及其要素:基本思想:将待求解问题分解成若干个子问题。要素:最优子结构性质和重叠问题性质。

(2)矩阵连乘问题

!(3)备忘录方法的概念:备忘录方法是动态规划方法的变形。与动态规划算法不同的是,备忘录方法的递归方式是自顶向下的,而动态规划算法则是自底向上的。备忘录方法的控制

结构与直接递归方法的控制结构相同,区别在于备忘录方法为每个解过的子问题建立了备忘录以备需要时查看,避免了相同子问题的重复求解。

(4)最长公共子序列:一个数列 ,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则

称为已知序列的最长公共子序列。

(5)最大子段和的基本概念:

(6) 0-1背包问题的基本思想

第 4 章 贪心算法

(1)贪心法的思想:当一个问题具有最优子结构性质时,可用动态规划法求解。但有时会有更简单有效的算法。

(2)活动安排问题:活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合,该问题要求高效地安排一系列争用某一公共资源的活动。

(3)贪心算法的基本要素:贪心选择性质和最优子结构性质。

与动态规划算法的差异:(1)贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。(2)动态规划算法通常以自底向上的方式解各子问题,而贪心算法则通常以自顶向下的方式进行,以迭代的方式作出相继的贪心选择,每作一次贪心选择就将所求问题简化为规模更小的子问题。(3)对于一个具体问题,要确定它是否具有贪心选择性质,必须证明每一步所作的贪心选择最终导致问题的整体最优解。

回溯法的基本思想::从一条路往前走,能进则进,不能进则退回来,换一条路再试。 基本概念:是一种系统地搜索解空间树而求得问题解的搜索算法。

计算:

1.

2.

3.

使用分治算法找一组数的最大最小数。采用如下设计思想:

将数据集 S 均分为 S1 和 S2;

求解 S1 和 S2 中的最大和最小值;

最终的最大和最小值可以计算得到:min( S1, S2 ), max( S1, S2 );

采用同样的处理方法递归处理 S1 和 S2。

可以得到该算法复杂性的递推公式如下:

根据递推公式推导出该复杂性表达式。

4.

下面给出了非递归形式的二分搜索方法代码,请补充下划线处的代码。

5.

利用动态规划法设计如下的矩阵连乘最小次数问题,写出动态规划法求解过程。

A1:40×25 A2:25×25 A3:25×15

解:m[0][0]=m[1][1] =m[2][2] =m[3][3]=0

r=2 i=1 j=2

m[1][2]=40*25*10=10000

i=2 j=3

m[2][3]= 25*10*15=3750

r=3 i=1 j=3

m[1][3]= m[1][1]+ m[2][3]+ 40*25*15=18750

k=2

t= m[1][2]+ m[3][3]+ 40*10*15=16000

m[1][3]=t=16000

6.

上机实验:用分治法找最大最小数

7.

上机实验:编辑距离

8.

上机实验:数字三角形

证明:

1.

2.

证明上述问题具有“贪心选择性质”和“最优子结构性质”。

算法:

1.

有一个箱子容量为 V(正整数),同时有 n 个物品,每个物品有一个体积(正整数)。要求 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。编写程序实现,自定义输入和输出。

【提示】使用二维数组 f[ i ][ j ], 表示前 i 个物品装入容量为 j 的箱子能获得的最大体积,则状态转移方程:

f[ i ][ j ] = max( f[ i - 1 ][ j ], f[ i -1 ][ j - a[ i ] ] + a[ i ] );

2.

用回溯法搜索排列树的算法是什么?

void Backtrack ( int t )

{

if ( t > n ) output( x );

{

else

for ( int i = t; i

{

swap( x[ t ], x[ i ] );

if ( Constraint( t ) && Bound( t ) ) Backtrack( t + 1 );

swap( x[ t ], x[ i ] );

}

}

}

3.

对批处理作业调度问题:作业需要机器处理时间的表如下,如果调度方案为:1,2,3,计算完成时间和。

作业调度方案:1,2,3(必须考虑机器的空闲时间):

作业 1 在机器 1 上完成的时间为 2,在机器 2 上完成的时间为 3(2 + 1)

作业 2 在机器 1 上完成的时间为 5(2 + 3),在机器 2 上完成的时间为 6(5 + 1) 作业 3 在机器 1 上完成的时间为 7(2 + 3 + 2),在机器 2 上完成的时间为 10(7 + 3) 完成时间和:3 + 6 + 10 = 19


相关文章

  • 电路与系统专业硕士研究生培养方案
  • 电路与系统专业硕士研究生培养方案 华中师范大学信息技术系 2005年10月 一.培养目标 本专业主要培养德.智.体全面发展的,适应社会主义现代化建设需要的电路与系统学专业专门人才,其具体要求是: 1. 较好地掌握马克思主义基本原理,坚持党的 ...查看


  • 论文相似性检测报告
  • 论文相似性检测报告 报告编号:301baab5-bd1b-401a-80e4-a3c001726053题 名:301baab5-bd1b-401a-80e4-a3c001726053报告编号: 作 者:46,441原文字数: 论文相似性检测 ...查看


  • 数字信号处理B_教学大纲
  • <数字信号处理B >课程教学大纲 Digital Signal Processing B 课程编码: 适用专业:广播电视工程等 先修课程:信号与线性系统 学 分 数:3 总学时数:48 实验(上机)学时:0 考核方式:校考 执 ...查看


  • 电子信息类专业对比
  • 三大电子类专业就业前景解析 发布时间:2009-9-7 0:00:00 作者:佚名 来源:转载 浏览量:329 [字体:大 中 小] 如今,我们正在进入一个数字化时代.3G手机给用户带来全新的体验,我们的电脑屏幕变化多端,数字电视深入人心. ...查看


  • 电子信息工程2
  • 子信息工程专业 04023001 高等数学 Advanced Mathematics [192-10-1.2] 内容提要:高等数学是高等学校理工科专业的一门必修的重要基础课.通过这门课程的学习,使学生系统地获得函数.极限.连续.一元函数微积 ...查看


  • matlab学习入门及资料
  • matlab学习入门及资料 2009-09-06 21:23 matlab博大精深,说到底我也只不过是个初学者,只是学的时间比新手长了一点,现在写几句给新手,希望能给你们有点帮助 1 学Matlab并不难,难的是学会怎么用. 2不要试图掌握 ...查看


  • 贪心算法计算最优分解方案
  • 西安邮电大学 (计算机学院) 课内实验报告 实验名称: 专业名称: 班级: 学生姓名: 学号(8指导教师: 实验日期:2016年6月1日 一. 实验目的及实验环境 实验目的: 熟悉并掌握贪心算法 实验环境: windows7 vc6.0编译 ...查看


  • 基于三点二次插值的方程求根算法
  • 第7卷第12期2008年12月 南阳师范学院学报 JoumalofNanyang Nomal Unive鹉ity V01.7No.12Dec.2008 基于三点二次插值的方程求根算法 张天良 (南京信息工程大学数理学院.江苏南京210044 ...查看


  • 数字图像处理课程设计之图像特征提取
  • 河 南 农 业 大 学 <数字图像处理> 题 目: 图像特征提取 学 院:专 业: 班 级: 学 号: 姓 名:指导教师: 成 绩: 时 间: 年 月 日至 一.目的与要求 图像特征提取的目的让计算机具有认识或者识别图像的能力, ...查看


热门内容