算法实验题目
银行家算法模拟实验

实验二
课程名称:操作系统
课程类型:必修
实验项目名称:银行家算法
实验题目:采用银行家算法避免死锁
一、实验目的
通过本次实验,使学生掌握死锁的概念和产生死锁的原因和必要条件,预防和避免死锁的方法,死锁的检测与解除。
通过本次实验,使学生加深了对死锁概念的理解和掌握,深刻领会银行家算法的实质及实现过程。
二、实验要求及实验环境
设计一个能动态检查n个资源、m个进程的系统是否安全并且能实施动态分配的程序。
(具体个数可由键盘输入)。
每一个进程可动态、随机提出申请各个资源的数量,如果系统能满足并且分配后系统仍处于安全状态,那么写出一个安全序列,表明系统是安全的;若系统不安全,那么不分配资源。
三、设计思想
1
图1-1主程序的流程图
图1-2初始化算法init()的流程图
图1-3银行家算法allo()的流程图
? 不满足,等待
F
T F 请求超量,
图1-4模拟资源分配算法require ()的流程图
图1-5安全算法()的流程图
2.逻辑设计
用结构体数组表示m个进程,其中包括使用数组形式的线性表表示进程对各个资源需要的总资源数、对各个资源已占用的资源数,还需要的资源数。
3、物理设计
全局变量
int n,m;
struct info//进程信息
{
int claim[50];//最大占用资源数
int allocation[50];//已经占有的资源数
int need[50]; //还需要的资源数
}pro[50];
int available[50];//剩余资源数
int request[50];//需求资源数量。
算法分析与设计-有重复元素的排列问题

算法设计实验报告题目:有重复元素的排列问题年月日一、实验题目有重复元素的排列问题二、实验目的问题描述:设R={r1,r2,...,rn}是要进行排列的n个元素。
其中元素r1,r2,...,rn可能相同。
试设计一个算法,列出R的所有不同排列。
三、实验内容算法设计:给定n及待排列的n个元素。
计算出这n个元素的所有不同排列。
数据输入:由文件input.txt提供输入数据。
文件的第1行是元素个数n,1<=n<=500。
接下来的1行是待排列的n个元素。
结果输出:将计算出的n个元素的所有不同排列输出到文件output.txt。
文件最后1行中的数是排列总数。
输入文件示例输出文件示例input.txt output.txt4 aaccaacc acacaccacaaccacaccaa6四、实验原理1)aacc四个元素的全排列,我们可以划分为3个元素的全排列,3个划分为2个,到最后只剩下1个元素,就不需要排列。
2)让每一个元素作为打头元素,交换,然后进行递归,再交换。
3)如果该打头元素在前面中已经有过,则忽略这种情况。
五、实验步骤1)实现环境:Microsoft Visual Studio 20102)编写代码,在程序文件夹下建立input.txt,output.txt,输入问题,运行,发现错误不断调试3)实验代码:#include<iostream>#include<stdio.h>#include<string>#include<cstring>#include<algorithm>using namespace std;char a[1000];char b[1000];int main() {freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);int n;scanf("%d",&n);scanf("%s",&a);sort(a,a+n);for(int i=0;i<n;i++){b[n-i-1]=a[i];}for(int i=0;i<n;i++){printf("%c",b[i]);}printf("\n");int t=1;while(strcmp(a,b)){t++;for(int i=0;i<n;i++){printf("%c",a[i]);}printf("\n");next_permutation(a,a+n);} for(int i=0;i<n;i++) {printf("%c",b[i]);}printf("\n");printf("%d",t);return 0;}六、实验结果分析运行结果截图:。
操作系统实验二报告-时间片轮转进程调度算法1

操作系统实验报告实验二时间片轮转进程调度算法学号:班级:姓名:【实验题目】: 时间片轮转进程调度算法【实验目的】通过这次实验, 加深对进程概念的理解, 进一步掌握进程状态的转变、进程调度的策略与对系统性能的评价方法。
【实验内容】问题描述:设计程序模拟进程的时间片轮转RR 调度过程。
假设有n 个进程分别在T1, … ,Tn 时刻到达系统, 它们需要的服务时间分别为S1, … ,Sn 。
分别利用不同的时间片大小q, 采用时间片轮转RR 进程调度算法进行调度, 计算每个进程的完成时间, 周转时间和带权周转时间, 并且统计n 个进程的平均周转时间和平均带权周转时间。
程序要求如下:1)进程个数n ;每个进程的到达时间T 1, … ,T n 和服务时间S 1, … ,S n ;输入时间片大小q 。
2)要求时间片轮转法RR 调度进程运行, 计算每个进程的周转时间, 带权周转时间, 并且计算所有进程的平均周转时间, 带权平均周转时间;3)输出: 要求模拟整个调度过程, 输出每个时刻的进程运行状态, 如“时刻3: 进程B开始运行”等等;4)输出:要求输出计算出来的每个进程的周转时间, 带权周转时间, 所有进程的平均周转时间, 带权平均周转时间。
实现提示:用C++语言实现提示:1)程序中进程调度时间变量描述如下:int ArrivalTime[100];int ServiceTime[100];int PServiceTime[100];int FinishTime[100];int WholeTime[100];double WeightWholeTime[100];double AverageWT,AverageWWT;bool Finished[100];➢2)进程调度的实现过程如下:➢变量初始化;➢接收用户输入n, T1, … ,Tn, S1, … ,Sn;时间片大小q;➢按照时间片轮转RR算法进行进程调度, 计算进程的完成时间、周转时间和带权周转时间;➢计算所有进程的平均周转时间和平均带权周转时间;➢按格式输出调度结果。
人工智能实验-k-近邻算法

k-近邻算法一、 实验题目1. kNN 代码实现-AB 分类采用测量不同特征值之间的距离方法进行分类,用所给的函数创建具有两个特征与一个标签类型的数据作 为训练集,编写 classify0 函数对所给的数据进行 AB 分类。
2. k-近邻算法改进约会网站的配对效果k-近邻算法改进约会网站的配对效果通过收集的一些约会网站的数据信息,对匹配对象的归类:不喜欢的人、魅力一般的人、极具魅力的人。
数据中包含了 3 种特征:每年获得的飞行常客里程数、玩视频游戏所耗时间百分比、每周消费的冰淇淋公升数二、 实验代码1. kNN 代码实现-AB 分类kNN from http.client import ImproperConnectionStatefrom numpy import ∗ from collections importCounter import operator def createDataSet():group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])labels = [’A ’, ’A ’, ’B’, ’B’] return group, labelsdef classify0(inX, group, labels, k = 3):res1 = (inX − group)∗∗2 dist =res1[:,0] + res1[:,1] dic = argsort(dist) dic = dic[0:k:1] newdic = [] for i in range (k): newdic.append(labels[dic[i]]) c = Counter(newdic).most_common(1) return c[0][0] tests import kNN group, lables = kNN.createDataSet() print (’分类结果’) print (’[0,0] %c’ %(kNN.classify0([0, 0], group, lables, k = 3))) print (’[0.8,0.7] %c’ %(kNN.classify0([0.8, 0.7], group, lables, k = 3)))2.k-近邻算法改进约会网站的配对效果1 2 3 4 5 67 8 910111213141516171819 1 2 3 4 5import pandas as pdimport kNNfrom sklearn.model_selection import train_test_splitdf = pd.read_table(’datingTestSet2.txt’,sep=’\s+’, names = [’A ’, ’B’, ’C’, ’Y’])# 对特征进行归一化处理df2 = df.iloc[:, :3] df2 =(df2−df2.mean())/df2.std() lable=df.iloc[:,3:4] df2.loc[:, ’Y’] =lable# 对数据集进行测试集和训练集划分,90%作为训练集,10%作为测试集X_train, X_test, Y_train, Y_test = train_test_split(df2.iloc[:, :3], df2.Y, train_size=.90)# 将DataFrame 格式转化为numpy 格式处理 group = X_train.values label =Y_train.values length =len (X_test) X_test.iloc[0:1,:]# res 以储存测试结果res = []# 设置错误正确数count 以计算正确率Tnum = 0 Fnum = 0 for iin range (length):inX = X_test.iloc[i:i+1 , :].values res.append(kNN.classify0(inX,group, label, k = 3)) if (kNN.classify0(inX, group, label, k = 3) ==Y_test.values[i]):Tnum += 1 else :Fnum += 1res1 = pd.DataFrame(data = res, columns=[’TestResult’])Y_test.reset_index(inplace=True,drop=True)res1.loc[:, ’OriginTest’] = Y_testprint (’前20个数据测试结果和原数据比较’) print (’−−−−−−−−−−−−−−−−−−−−−——−−−−’) print (res1.head(20))print (’−−−−−−−−−−−−−−−−−−−−−——−−−−’) print (’正确率%.2f%%’ %(100∗Tnum/(Tnum+Fnum))) 三、 实验结果及分析1. kNN 代码实现-AB 分类分类结果[0, 0] B[0.8, 0.7] A2. k-近邻算法改进约会网站的配对效果1 2 3 45 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 2526 27 28 29 3031 32 33 3435363738 1 2 3前20个数据测试结果和原数据比较−−−−−−−−−−−−−−−−−−−−−——−−−TestResult OriginTest0 2 2 1 3 3 2 1 3 3 2 2 4 2 2 5 3 3 6 3 3 7 2 2 8 1 1 9 1 1 10 1 1 11 3 3 12 2 2 13 2 2 14 1 1 15 2 2 16 1 1 17 2 2 18 1 1 19 3 3−−−−−−−−−−−−−−−−−−−−−——−−− 正确率97.00%从实验结果可以看出,通过 k-近邻算法改进后的约会网站的配对效果比较显著,多次随机划分测试集和训练集后发现正确率基本可以达到 90% 以上。
计算机图形学实验Cohen-Sutherland算法

实验5-6一、实验题目请按照图5-32所示,使用对话框输入直线段的起点和终点坐标。
在屏幕客户区左侧区域绘制输入直线段和“窗口”,在屏幕客户区右侧区域绘制“视区”并输出裁剪结果。
这里需要用到窗视变换公式。
请使用Cohen-Sutherland 算法编程实现。
二、实验思想Cohen-Sutherland 直线裁剪算法是最早流行的编码算法。
每条直线的端点都被赋予一组四位二进制代码,称为区域编码(Region Code ,RC),用来标识直线端点相对于窗口边界及其延长线的位置。
假设窗口是标准矩形,由上(y=w yt )、下(y=w yb )、左(x=w xl )、右(x=w xr )四条边组成,如图5-23所示。
延长窗口四条边形成9个区域,如图5-24所示。
这样根据直线的任一端点P(x,y)所处的窗口区域位置,可以赋予一组4位二进制区域码RC =C 4C 3C 2C 1。
w yb w yt wxr w xl为了保证窗口内直线端点的编码为零,编码规则定义如下:第一位:若端点位于窗口之左侧,即x<w xl,则C1=1,否则C1=0。
第二位:若端点位于窗口之右侧,即x>w xr,则C2=1,否则C2=0。
第三位:若端点位于窗口之下侧,即y<w yb,则C3=1,否则C3=0。
第四位:若端点位于窗口之上侧,即y>w yt,则C4=1,否则C4=0。
裁剪步骤如下:(1)若直线的两个端点的区域编码都为零,即RC1|RC2=0,说明直线两端点都在窗口内,应“简取”之。
(2)若直线的两个端点的区域编码都不为零,即RC1&RC2≠0,即直线位于窗外的同一侧,说明直线的两个端点都在窗口外,应“简弃”之。
(3)若直线既不满足“简取”也不满足“简弃”的条件,直线必然与窗口或窗口边界的延长线相交,需要计算直线与窗口边界的交点。
交点将直线分为两段,其中一段完全位于窗口外,可“简弃”之。
对另一段重复进行上述处理,直至该直线段完全被舍弃或找到完全位于窗口内的直线段为止。
《算法设计与分析》课程实验报告 (贪心算法(一))

《算法设计与分析》课程实验报告实验序号:07实验项目名称:实验8 贪心算法(一)一、实验题目1.删数问题问题描述:键盘输入一个高精度的正整数N(不超过250 位),去掉其中任意k个数字后剩下的数字按原左右次序将组成一个新的非负整数。
编程对给定的N 和k,寻找一种方案使得剩下的数字组成的新数最小。
若输出前有0则舍去2.区间覆盖问题问题描述:设x1,x2,...xn是实轴上的n个点。
用固定长度为k的闭区间覆盖n个点,至少需要多少个这样的固定长度的闭区间?请你设计一个有效的算法解决此问题。
3.会场安排问题问题描述:假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。
设计一个有效的贪心算法进行安排。
(这个问题实际上是著名的图着色问题。
若将每一个活动作为图的一个顶点,不相容活动间用边相连。
使相邻顶点着有不同颜色的最小着色数,相应于要找的最小会场数。
)4.导弹拦截问题问题描述:某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。
但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。
某天,雷达捕捉到敌国的导弹来袭。
由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
给定导弹依次飞来的高度(雷达给出的高度数据是≤50000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
二、实验目的(1)通过实现算法,进一步体会具体问题中的贪心选择性质,从而加强对贪心算法找最优解步骤的理解。
(2)掌握通过迭代求最优的程序实现技巧。
(3)体会将具体问题的原始数据预处理后(特别是以某种次序排序后),常能用贪心求最优解的解决问题方法。
三、实验要求(1)写出题1的最优子结构性质、贪心选择性质及相应的子问题。
(2)给出题1的贪心选择性质的证明。
(3)(选做题):写出你的算法的贪心选择性质及相应的子问题,并描述算法思想。
算法实验报告范文
实验题目:K近邻算法(K-Nearest Neighbors, KNN)在鸢尾花数据集上的应用一、实验目的1. 理解K近邻算法的基本原理和实现过程。
2. 掌握K近邻算法在分类问题中的应用。
3. 通过实验验证K近邻算法在鸢尾花数据集上的性能。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 库:NumPy,Matplotlib,Scikit-learn三、实验原理K近邻算法(KNN)是一种基于距离的最近邻分类算法。
其基本思想是:对于待分类的数据点,找到与它距离最近的K个数据点,这K个数据点中多数属于某个类别,则待分类数据点也属于该类别。
K近邻算法的步骤如下:1. 计算待分类数据点与训练集中每个数据点的距离。
2. 找到距离最近的K个数据点。
3. 根据这K个数据点的多数类别,对待分类数据点进行分类。
四、实验数据本次实验使用鸢尾花数据集(Iris dataset),该数据集包含150个样本,每个样本有4个特征(花瓣长度、花瓣宽度、花萼长度、花萼宽度),分为3个类别(setosa,versicolor,virginica)。
五、实验步骤1. 导入所需库和数据集。
```pythonfrom sklearn import datasetsfrom sklearn.model_selection import train_test_splitfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.metrics import accuracy_scoreimport matplotlib.pyplot as pltimport numpy as np# 加载数据集iris = datasets.load_iris()X = iris.datay = iris.target```2. 数据预处理。
```python# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)```3. 实现K近邻算法。
Removed_算法实验 八皇后问题37
姓名:+++ 学号:090610213 班级:0904103实验题目:八皇后问题问题分析:要在8*8的国际象棋棋盘中放8个皇后,是任意两个皇后都不能互相吃掉。
规则:皇后能吃掉同一行、同一列、同一对角线的任意棋子。
解决问题的关键为怎样取到8个位置,判断他们符合要求。
数学模型:每一行中只能取到一个位置,这样问题的解空间就是8个皇后所在的列的序号。
1)通过8重循环从每一行中取得一个位置,检验取到的检验8个位置不在同一列、同一对角线。
2)按深度优先的思想,从第一个皇后开始搜索,确定一个位置后,在搜索第二个皇后的位置……;每前进一步检查是否满足约束条件,不满足时,用continue语句回溯到上一个皇后,继续尝试下一位置;满足约束条件时,开始搜索下一位置,知道找到问题解。
约束条件:不在同一列的表达式xi!=xj不在同一对角线上的约束条件abs(xi-xj)!=abs(i-j)算法策略的选择:蛮力枚举法枚举回溯法程序流程图:算法的时间复杂度的分析:1)采用8重循环时间复杂度为8程序实现:1)void CEightqueDlg::OnButton1(){ //取自不同行的位置count=0;for(que[0]=0;que[0]<8;que[0]++)for(que[1]=0;que[1]<8;que[1]++)for(que[2]=0;que[2]<8;que[2]++)for(que[3]=0;que[3]<8;que[3]++)for(que[4]=0;que[4]<8;que[4]++)for(que[5]=0;que[5]<8;que[5]++)for(que[6]=0;que[6]<8;que[6]++)for(que[7]=0;que[7]<8;que[7]++)Judge();CString str;str.Format("%d",count);MessageBox(str);}void CEightqueDlg::Judge(){ for(int t1=0;t1<8;t1++) //验证是否取自不同的列for(int t2=t1+1;t2<8;t2++) {if(que[t1]==que[t2])return; //存在处于同一列的位置则返}bool flag=false; //验证是否在不同的对角线上for(int j=0;j<7;j++){for(int i=1;i<8-j;i++){ if(que[j]+i==que[i+j]||que[j]-i==que[i+j]){ flag=true; break;}} if(flag)break; }if(!flag){ CString a;a="";for(int k=0;k<8;k++){ a.Format("%d",que[k]);out+=a; } out+=" ";if(out.GetLength()%72==0)out+='\n';GetDlgItem(IDC_STATIC1)->SetWindowText(out); count++; }} 2)void CEight2Dlg::OnCancel(){int a[8]; int count=0CString aa,bb;aa=bb="";for(a[0]=0;a[0]<8;a[0]++)for(a[1]=0;a[1]<8;a[1]++){if(check(a,1)==0) continue;for(a[2]=0;a[2]<8;a[2]++){if(check(a,2)==0) continue;for(a[3]=0;a[3]<8;a[3]++){if(check(a,3)==0) continue;for(a[4]=0;a[4]<8;a[4]++){if(check(a,4)==0) continue;for(a[5]=0;a[5]<8;a[5]++){if(check(a,5)==0) continue;for(a[6]=0;a[6]<8;a[6]++){if(check(a,6)==0) continue;for(a[7]=0;a[7]<8;a[7]++){if(check(a,7)==0) continue;else{for(int i=0;i<8;i++){aa.Format("%d",a[i]);bb+=aa+" ";}m_list.AddString(bb);bb="";count++;}}}}}}}}aa.Format("%d",count);MessageBox("总共有组合数:"+aa);}int CEight2Dlg::check(int a[], int n){ int i;for(i=0;i<n;i++)if((abs(a[i]-a[n])==abs(i-n))||(a[i]==a[n]))return(0);return(1);}结果输出:实验题目:动态规划最大盈利问题分析:5台机器3个工厂,求总利润最大的方案。
A星算法求解8数码问的题目某实验
A*算法求解8数码问题实验一、实验目的熟悉和掌握启发式搜索的定义、估价函数和算法过程,并利用A*算法求解N数码难题,理解求解流程和搜索顺序。
二、实验内容1、八数码问题描述所谓八数码问题起源于一种游戏:在一个3×3的方阵中放入八个数码1、2、3、4、5、6、7、8,其中一个单元格是空的。
将任意摆放的数码盘(城初始状态)逐步摆成某个指定的数码盘的排列(目标状态),如图1所示图1 八数码问题的某个初始状态和目标状态对于以上问题,我们可以把数码的移动等效城空格的移动。
如图1的初始排列,数码7右移等于空格左移。
那么对于每一个排列,可能的一次数码移动最多只有3中,即空格左移、空格右移、空格上移、空格下移。
最少有两种(当空格位于方阵的3个角时)。
所以,问题就转换成如何从初始状态开始,使空格经过最小的移动次数最后排列成目标状态。
2、八数码问题的求解算法2.1 盲目搜索宽度优先搜索算法、深度优先搜索算法2.2 启发式搜索启发式搜索算法的基本思想是:定义一个评价函数f,对当前的搜索状态进行评估,找出一个最有希望的节点来扩展。
先定义下面几个函数的含义:f*(n)=g*(n)+h*(n) (1)式中g*(n)表示从初始节点s到当前节点n的最短路径的耗散值;h*(n)表示从当前节点n到目标节点g的最短路径的耗散值,f*(n)表示从初始节点s经过n到目标节点g的最短路径的耗散值。
评价函数的形式可定义如(2)式所示:f(n)=g(n)+h(n) (2)其中n是被评价的当前节点。
f(n)、g(n)和h(n)分别表示是对f*(n)、g*(n)和h*(n)3个函数值的估计值。
利用评价函数f(n)=g(n)+h(n)来排列OPEN表节点顺序的图搜索算法称为算法A。
在A算法中,如果对所有的x,h(x)<=h*(x) (3)成立,则称好h(x)为h*(x)的下界,它表示某种偏于保守的估计。
采用h*(x)的下界h(x)为启发函数的A算法,称为A*算法。
数学实验题目2 Romberg积分法
数学实验题目2 Romberg 积分法摘要考虑积分()()b aI f f x dx =⎰欲求其近似值,可以采用如下公式:(复化)梯形公式 110[()()]2n i i i hT f x f x -+==+∑ 2()12b a E h f η-''=- [,]a b η∈ (复化)辛卜生公式 11102[()4()()]6n i i i i hS f x f x f x -++==++∑4(4)()1802b a h E f η-⎛⎫=- ⎪⎝⎭ [,]a b η∈ (复化)柯特斯公式 111042[7()32()12()90n i i i i hC f x f x f x -++==+++∑31432()7()]i i f xf x +++6(6)2()()9454b a h E f η-⎛⎫=- ⎪⎝⎭[,]a b η∈ 这里,梯形公式显得算法简单,具有如下递推关系121021()22n n n i i h T T f x -+==+∑因此,很容易实现从低阶的计算结果推算出高阶的近似值,而只需要花费较少的附加函数计算。
但是,由于梯形公式收敛阶较低,收敛速度缓慢。
所以,如何提高收敛速度,自然是人们极为关心的课题。
为此,记0,k T 为将区间[,]a b 进行2k等份的复化梯形积分结果,1,k T 为将区间[,]a b 进行2k等份的复化辛卜生积分结果,2,k T 为将区间[,]a b 进行2k等份的复化柯特斯积分结果。
根据李查逊(Richardson )外推加速方法,可得到1,11,,0,1,2,40,1,2,41m m k m km k m k T T T m -+-=-⎛⎫=⎪=-⎝⎭可以证明,如果()f x 充分光滑,则有,lim ()m k k T I f →∞= (m 固定),0lim ()m m T I f →∞=这是一个收敛速度更快的一个数值求积公式,我们称为龙贝格积分法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3
分治法在数值问题中的应用 ——最近点对问题 最近点对问题
3. 实验要求 1)设计并实现用BF方法求解最近点对问题的算法; 2)设计并实现用DAC方法求解最近点对问题的算法; 3)以上两种算法的输入既可以手动输入,也可以自动生成; 4)算法不仅要输出最近点对的距离,还要输出最近点对的 两个点; 5)对上述两个算法进行时间复杂性分析,并设计实验程序验证 分析结果; 6)设计可供用户选择算法的交互式菜单(放在相应的主菜单下)。
10/29/2010 2006 《Algorithm Design and Analysis》 SCUEC 》 11
6
动态规划法在图问题中的应用 ——全源最短路径问题 全源最短路径问题
3. 实验要求 (1)实现Floyd算法; (2)算法的输入可以手动输入,也可以自动生成; (3)算法不仅要输出从每个顶点到其他所有顶点之间 的最短路径,还有输出最短路径的长度; (4)设计一个权重为负的图或有向图的例子,对于它, Floyd算法不能输出正确的结果。
10/29/2010 2006 《Algorithm Design and Analysis》 SCUEC 》 9
5 变治法在排序问题中的应用 ——堆排序 堆排序
3. 实验要求 1)设计与实现堆排序算法; 2)待排序的数据可以手工输入(通常规模比较小,10个数 据左右),用以检测程序的正确性;也可以计算机随机生 成(通常规模比较大,1500-3000个数据左右),用以检 验(用计数法)堆排序算法的时间效率。
10/29/2010 2006 《Algorithm Design and Analysis》 SCUEC 》 7
4
减治法在组合问题中的应用 ——8枚硬币问题 8
3. 实验要求 1)设计减治算法实现8枚硬币问题; 2)设计实验程序,考察用减治技术设计的算法是否高效; 3)扩展算法,使之能处理n枚硬币中有一枚假币的问题。 4. 实现提示 假设用一个数组B[n]表示硬币,元素B[i]中存放第i枚硬币 的重量,其中n-1个元素的值都是相同的,只有一个元素与 其他元素值不同,则当n=8时即代表8枚硬币问题。由于8枚 硬币问题限制只允许使用天平比较轻重,所以,算法中只 能出现元素相加和比较的语句。
10/29/2010 2006 《Algorithm Design and Analysis》 SCUEC 》 6
4
减治法在组合问题中的应用 ——8枚硬币问题 8
1. 实验题目 在8枚外观相同的硬币中,有一枚是假币,并且已知假 币与真币的重量不同,但不知道假币与真币相比较轻还是 较重。可以通过一架天平来任意比较两组硬币,设计一个 高效的算法来检测这枚假币。 2.实验目的 2.实验目的 1)深刻理解并掌握减治法的设计思想并理解它与分治法 的区别; 2)提高应用减治法设计算法的技能。 3)理解这样一个观点:建立正角的模型对于问题的求解 是非常重要的。
2)点击操作后进入相应的实验项目或是相应项目的下一级菜单; 3)可以反复执行,直到退出实验。
10/29/2010 2006 《Algorithm Design and Analysis》 SCUEC 》 2
2 算法分析基础
1. 实验题目 给定一个非负整数n,计算第n个Fibonacci数 2.实验目的 . 1)理解递归算法和迭代算法的设计思想以及递归程序的 调式技术 2)掌握并应用递归算法和迭代算法效率的理论分析(前验分 析)和实际分析(后验分析)方法; 3)理解这样一个观点:不同的算法可以解决相同的问题, 这些算法的解题思路不同,复杂程度不同,效率也不同;
10/29/2010 2006 《Algorithm Design and Analysis》 SCUEC 》 3
2 算法分析基础
3. 实验要求 1)使用教材2.5节中介绍的迭代算法Fib(n),找出最大的n,使得 第n个Fibonacci数不超过计算机所能表示的最大整数,并给出具 体的执行时间; 2)对于要求1),使用教材2.5节中介绍的递归算法F(n)进行计算,同 样给出具体的执行时间,并同1)的执行时间进行比较; 3)对于输入同样的非负整数n,比较上述两种算法基本操作的执 行次数; 4)对1)中的迭代算法进行改进,使得改进后的迭代算法其空间 复杂度为Θ(1); 5)设计可供用户选择算法的交互式菜单(放在相应的主菜单下)。
算法实验整体框架的构建
3. 实验要求 1)设计的主菜单可以是图形模式的,也可以是控制台模式的。以控制 台为例,主菜单大致如下:
------------------------- 《算法设计与分析》实验 ------------------------- 1. 算法分析基础——Fibonacci序列问题 2. 分治法在数值问题中的应用——最近点对问题 3. 减治法在组合问题中的应用——8枚硬币问题 4. 变治法在排序问题中的应用——堆排序问题 5. 动态规划法在图问题中的应用——全源最短路径问题 99. 退出本实验 ------------------------- 请输入您所要执行的操作(1,2,3,4,5,99):
10/29/2010 2006 《Algorithm Design and Analysis》 SCUEC 》 8
5 变治法在排序问题中的应用 ——堆排序 堆排序
1. 实验题目 用基于变治法的堆排序算法对任意一组给定的数据进 行排序 2.实验目的 . 1)深刻理解并掌握变治法的设计思想; 2)掌握堆的概念以及如何用变治法把任意给定的一组数 据改变成堆; 3)提高应用变治法设计算法的技能。
10/29/2010 2006 《Algorithm Design and Analysis》 SCUEC 》 4
3
分治法在数值问题中的应用 ——最近点对问题 最近点对问题
1. 实验题目 设p1 = (x1,y1), p2 = (x1, y2), ……, pn= (xn, yn)是平面上n个点 构成的集合S,设计算法找出集合S中距离最近的点对。 2.实验目的 1)提高应用蛮力法设计算法的技能; 2)深刻理解并掌握分治法的设计思想; 3)理解这样一个观点:用蛮力法设计的算法,一般来说, 经过适度的努力后,都可以对其进行改进,以提高算法的 效率。
1
算法实验整体框架的构建
1. 实验题目 算法实验主菜单的设计。 2.实验目的 ⑴ 熟悉实验环境VC++6.0 ; ⑵ 复习C、C++语言以及数据结构课程的相关知识, 实现课程间的平滑过度;
10/29/2010
2006 《Algorithm Design and Analysis》 SCUEC 》
1
1
10/29/2010
2006 《Algorithm Design and Analysis》 SCUEC 》
10
6
动态规划法在图问题中的应用 ——全源最短路径问题 全源最短路径问题
1. 实验题目 给定一个加权连通图(无向的或有向的),要求找出从 每个定点到其他所有定点之间的最短路径以及最短路径的 长度。 2.实验目的 . (1)深刻掌握动态规划法的设计思想并能熟练运用,理 解它与分治法的区别; (2)掌握最优性原理和最优子结构性质; (3)理解这样一个观点:用动态规划方法求解问题的关 键在于确定动态规划函数的递推式。
10/29/2010
2006 《Algorithm Design and Analysis》