太原理工大学算法设计与分析实验报告
LT
2
本科实验报告
课程名称: 算法设计与分析
实验项目:分治法合并排序
贪心法作业调度
动态规划法求多段图问题
回溯法求n皇后问题
实验地点: 致远楼B503
专业班级: 学号:
学生姓名:
指导教师:
3
2017年 3月18日
实验1 分治法合并排序
一、实验目的
1. 掌握合并排序的基本思想
2. 掌握合并排序的实现方法
3. 学会分析算法的时间复杂度
4. 学会用分治法解决实际问题
二、实验内容
随机产生一个整型数组,然后用合并排序将该数组做升序排列,要求输出排序前和排序后的数组。
三、实验环境
Window10;惠普笔记本;Dev cpp
4
5
算法描述和程序代码
#include<>
#include<iostream>
#include<>
#include<>
using namespace std;
#define random(x)(rand()%x);
int a[10];//合并排序函数。
void Merge(int left, int mid, int right) {
return 0;
}
五、实验结果截图
六、实验总结
通过编写这个程序,我进一步了解了分株算法的思想,在实际运用过程当中,尤其是在算法编写方面相对来说比较简单,实现起来较为容易。
6
实验2 贪心法作业调度
一、实验目的
1. 掌握贪心算法的基本思想
2. 掌握贪心算法的典型问题求解
3. 进一步多级调度的基本思想和算法设计方法
4. 学会用贪心法分析和解决实际问题
二、实验内容
设计贪心算法实现作业调度,要求按作业调度顺序输出作业序列。如已知n=8,效益p=(35, 30, 25, 20, 15, 10, 5, 1),时间期限 d=(4, 2, 4, 5, 6, 4, 5, 7),求该条件下的最大效益。
三、实验环境
Window10;惠普笔记本;Dev cpp
四、算法描述和程序代码
#include <iostream>
using namespace std;
const int Work[8] = { 45,30,28,25,23,15,10,1 };//所有作业按收益从大到小排序
const int maxTime[8] = { 4,7,3,2,4,6,7,5 };
7
class HomeWork {
private:
int res[8];
bool flag[8];
int maxReap;
public:
void dealWith() {
//遍历所有作业:
int i;
for (i = 0; i<8; i++) {
int Time = maxTime[i] - 1;
if (!flag[Time]) {
//如果最大期限那一天还未安排作业,则将当前作业安排在所允许的最大期限那天
res[Time] = Work[i];
flag[Time] = true;
}
else {
//如果当前作业所允许的最大期限那一天已经安排的其他作业,就向前搜索空位,将该作业安排进去
for (int j = Time - 1; j >= 0; j--)
8
if (!flag[j]) {
res[j] = Work[i];
flag[j] = true;
break;
}
}
}
cout << "作业完成顺序为:" ;
for (i = 0; i<7; i++) {
cout << res[i] << "\t";
}
cout << endl;
cout << endl << "最佳效益为:";
int j;
for (j = 0; j<7; j++)
太原理工大学算法设计与分析实验报告 来自淘豆网m.daumloan.com转载请标明出处.