当前位置:文档之家› 计算机算法设计与分析

计算机算法设计与分析

---撰写报告 Part2:课程设计撰写的主要规范
1. 题目分析:主要阐述学生对题目的分析结果,包括题目描述、 分析得出的有关模型、相关定义及假设;
2. 总体设计:系统的基本组成部分,各部分所完成的功能及相互 关系;
3. 数据结设计:主要功能模块所需的数据结构,集中在逻辑设 计上;
4. 算法设计:在数据结构基础上,完成算法设计; 5. 物理实现:主要有数据结构的物理存储,算法的物理实现,系
实验四 回溯算法和分支限界法………………………………………………………………12 1、符号三角形问题 ……………………………………………………………………………12 2、0—1 背包问题………………………………………………………………………………14 3、实验小结 ……………………………………………………………………………………18
统相关的实现。具体在重要结果的截图,测试案例的结果数据, 核心算法的实现结果等; 6. 结果分析:对第五步的分析,包括定性分析和定量分析,正确 性分析,功能结构分析,复杂性分析等; 7. 结论:学生需对自己的课程设计进行总结,给出评价,并写出 设计体会; 8. 附录:带有注释的源代码,系统使用说明等; 9. 参考文献:列出在撰写过程中所需要用到的参考文献。
cin>>a[i];
cin>>x;
void BinarySearch(int a[],int n,int x); BinarySearch(a, n, x);
return 0; } void BinarySearch(int a[],int n,int x) {
int i,j,mid=0,left=0; int right=n-1; while(left<right+1&&left>=0) {
实验结果:
结果分析: 实验时入得数据为:所要划分的整数是 7,他的划分的最大加数的值不得大于 7,根据实际 其划分的情况为 15 种,因而可知其程序的运行结果是正确的。
二:棋盘覆盖问题
2
计算机算法设计与分析——实验报告
一、实验目的与要求 1、掌握棋盘覆盖问题的算法; 2、初步掌握分治算法 二、实验题:
实验二 动态规划算法(4 学时)
一:最长公共子序列问题
一、实验目的与要求 1、熟悉最长公共子序列问题的算法; 2、初步掌握动态规划算法; 二、实验题
若给定序列 X={x1,x2,…,xm},则另一序列 Z={z1,z2,…,zk},是 X 的子序列是指存在一个 严格递增下标序列{i1,i2,…,ik}使得对于所有 j=1,2,…,k 有:zj=xij。例如,序列 Z={B,C,D, B}是序列 X={A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3,5,7}。 给定 2 个序列 X 和 Y,当另一序列 Z 既是 X 的子序列又是 Y 的子序列时,称 Z 是序列 X 和 Y 的公共子序列。 三、实验程序 #include<iostream> using namespace std; int fun(char *x) {
实验五 多种排序算法效率比较 1、算法:起泡排序、选择排序、插入排序、shell 排序,归并排序、快速排序等............19 2、实验小结 ……………………………………………………………………………………18
计算机算法设计与分析——实验报告
Part1:课程设计过程 设计选题--题目分析---系统设计--系统实现--结果分析
else {
5
计算机算法设计与分析——实验报告
i=right; j=left; cout<<"所找的数据不在数组中,其前后下标为:"<<i<<','<<j<<endl; } }
如上图所示数组的长度为 5,其内容 依次为 1 2 3 4 5,所要找的数据位 3,他的下表正好是 2,结果是正确的
如上图数组的长度为 7,输入的数组是 1 3 4 6 7 8 9,所要查找的数字式 5,它不在数组中, 其前后的下表分别为 2,3 结果是正确的。 实验小结: 第一个实验自己做了出来,然而第二个实验卡了很久,对棋盘覆盖问题上课听懂了但是应用 到实际上就有点问题了,最后还是在同学的帮助下完成的!后面的这个提高题也是查考同学 的,虽然自己没能做出来,但是感觉还是应该去学习!
else {// 此棋盘中无特殊方格
// 用 t 号 L 型骨牌覆盖右下角
board[tr + s - 1][tc + s - 1] = t;
3
计算机算法设计与分析——实验报告
// 覆盖其余方格 chessBoard(tr, tc, tr+s-1, tc+s-1, s); }// 覆盖右上角子棋盘 if (dr < tr + s && dc >= tc + s) // 特殊方格在此棋盘中 chessBoard(tr, tc+s, dr, dc, s); else {// 此棋盘中无特殊方格// 用 t 号 L 型骨牌覆盖左下角 board[tr + s - 1][tc + s] = t; // 覆盖其余方格 chessBoard(tr, tc+s, tr+s-1, tc+s, s); }// 覆盖左下角子棋盘 if (dr >= tr + s && dc < tc + s) // 特殊方格在此棋盘中 chessBoard(tr+s, tc, dr, dc, s); else {// 用 t 号 L 型骨牌覆盖右上角 board[tr + s][tc + s - 1] = t;// 覆盖其余方格 chessBoard(tr+s, tc, tr+s, tc+s-1, s); }// 覆盖右下角子棋盘 if (dr >= tr + s && dc >= tc + s) // 特殊方格在此棋盘中 chessBoard(tr+s, tc+s, dr, dc, s); else {// 用 t 号 L 型骨牌覆盖左上角 board[tr + s][tc + s] = t;// 覆盖其余方格 chessBoard(tr+s, tc+s, tr+s, tc+s, s); } } 试验运行结果
6
计算机算法设计与分析——实验报告
int tr, tc, dr, dc, size; int tile=0; //全局变量,表示特殊格的号 void chessBoard(int tr, int tc, int dr, int dc, int size); cout<<"输入数据"<<endl; cin>>tr>>tc>>dr>>dc>>size; cout<<endl<<endl; chessBoard(tr, tc, dr, dc, size); for(int i=1;i<=size;i++) {
实验三 贪心算法…… …………………………………………………………………………8 1、多机调度问题………………………………………………………………………………8 2、用贪心算法求解最小生成树………………………………………………………………10 3、实验小结……………………………………………………………………………………12
for(int j=1;j<=size;j++) cout<<board[i][j]<<" ";
cout<<endl; }
return 0;
} void chessBoard(int tr, int tc, int dr, int dc, int size)//左上角行号、列号,特殊格的行号、列号棋 盘大小
盘覆盖问题:在一个 2k×2k 个方格组成的棋盘中,恰有一个方格与其它方格不同,称该 方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的 4 种不同形 态的 L 型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何 2 个 L 型骨牌不 得重叠覆盖。 三、程序代码:
#include <iostream> using namespace std; int tile=0; //全局变量,表示特殊格的号 int board[1000][1000]; int main() {
{
if (size == 1)
return;
//???????tiao chu
int t = ++tile, // L 型骨牌号 ??????
s = size/2; // 分割棋盘 // 覆盖左上角子棋盘
if (dr < tr + s && dc < tc + s)// 特殊方格在此棋盘中
chessBoard(tr, tc, dr, dc, s);
int mid=(left+right)/2; if(x==a[mid]) {
i=j=mid; break; } if(x>a[mid]) left=mid+1; else right=mid-1; }
//n:数组长度,i,j 分别表示下标
if ((i==j)&&(i>=0)) cout<<"所找的数据在数组中下标为:"<<i<<endl;
int a,b,c; int q(int n,int m); cout<<"请输入整数及大于最大加数的数"<<endl; cin>>a>>b;
相关主题