《计算机算法设计与分析》课程设计分治法解决合并排序问题及动态规划解决矩阵连乘和最长公共子序列问题及贪心法解决哈夫曼编码问题一、课程设计目的本次课程设计可以说是我们学完《计算机算法设计与分析》这门课程后的一次综合性训练
本课程设计的训练的目的是:1、巩固和掌握计算机算法设计和分析课程的基础知识
1、培养使用计算机基本算法解决实际问题的能力
2、提升使用程序设计语言对算法程序的开发、调试和测试能力
3、对一定的实际问题,能够设计求解算法并分析算法的效率
5、提高综合运用算法、程序设计语言等能力
6、掌握文档的书写能力
二、课程设计内容1、分治法(1)合并排序2、动态规划(1)矩阵连乘(1)最长公共子序列3、贪心法(1)哈夫曼编码三、概要设计1、分治法基本思想:将规模为n的问题分解为k个规模较小的子问题,使这些子问题相互独立可分别求解,再将k个子问题的解合并成原问题的解
如子问题的规模仍很大,则反复分解直到问题小到可直接求解为止
在分治法中,子问题的解法通常与原问题相同
(1)合并排序[问题描述]1《计算机算法设计与分析》课程设计将n个元素排成非递减顺序
[算法思路]若n为1,算法终止;否则,将n个待排元素分割成k(k=2)个大致相等子集合A,B,对每一个子集合分别递归排序,再将排好序的子集归并为一个集合
2、动态规划基本思想:将问题的求解过程化为多步选择,在每一步选择上,列出各种可能的结果(各子问题的可行解),舍去那些肯定不能成为最优解的局部解
最后一步得到的解必是最优解
求解过程多为自底向上,求解过程产生多个选择序列,下一步的选择依赖上一步的结果,总能得到最优解
(1)矩阵连乘[问题描述]给定n个矩阵{A1,…,An},其中Ai与A(i-1)是可相乘的
确定一个计算次序,使计算矩阵连乘积A1…An所需计算量最少
例如,三个矩阵连乘,两种计算顺序(A*B)*C,A*(B*C)