中南大学算法实验报告

中南大学算法分析与设计

实验报告

学生姓名涂茂麟

学号

专业班级计算机科学与技术1303

指导老师

学院信息科学与工程学院

目录

实验一 DFS与BFS 3

实验二最近点对问题 7

实验三拓扑排序 10

实验四 N皇后问题 12

实验五 0-1背包问题 16

实验六最短路径 20

实验一 DFS与BFS

实验目的:实现深度优先算法、宽度优先算法

实现原理:

深度优先搜索:

从图中某顶点v出发:

(1)访问顶点v;

(2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;

(3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。

广度优先搜索:

已知图G=(V,E)和一个源顶点s,宽度优先搜索以一种系统的方式探寻G的边,从而“发现”s所能到达的所有顶点,并计算s到所有这些顶点的距离(最少边数),该算法同时能生成一棵根为s且包括所有可达顶点的宽度优先树。对从s 可达的任意顶点v,宽度优先树中从s到v的路径对应于图G中从s到v的最短路径,即包含最小边数的路径。该算法对有向图和无向图同样适用。

具体设计:

1. 数据结构

采用邻接链表作为图的数据结构。

public class Graph {//图

public VNode[] arrVnode=new VNode[100] ;//头结点数组

public int vexmun,arcmun;//节点总数、边界总数

public int time;//记录打开、关闭节点的时间

}

public class VNode {//节点类

public int data;//节点的内容

public boolean visited=false;//是否访问过

public boolean ifclosed=false;//是否被放在关闭的表中

public int distance=10000;//距离某一点的最短距离

public int front=10000;//前驱节点

public ArcNode nextarc=null;//下一条边

public int entertime,exittime;//打开、关闭节点的时间}

public class ArcNode{//边类

public int adjvex;//该弧所指向的顶点的位置

public int weight=0;//该边的权值

public ArcNode nextarc=null;//下一条边

}

2. DFS

public void DFS(Graph G){//DFS的起始调用方法

int vexmun=G.vexmun;

G.time=0;

for(int v=1;v<=vexmun;v++){

if(G.arrVnode[v].visited==false){

DFS_VISIT(G,v);

}

}

}

public void DFS_VISIT(Graph G,int v){//应用递归的DFS访问G.arrVnode[v].visited=true;

G.time++;//time是给后面的拓扑排序实验用的

G.arrVnode[v].entertime=G.time;

System.out.println(G.arrVnode[v].data);

ArcNode node=G.arrVnode[v].nextarc;

while(node!=null){

int p=node.adjvex;

if(G.arrVnode[p].visited==false&&G.arrVnode[p]!=null){ DFS_VISIT( G , p);

}

node=node.nextarc;

}

G.time++;

G.arrVnode[v].exittime=G.time;

}

3. BFS

public void BFS(Queue Queue , Graph G ,int v){

if(visited[v]==false){

visited[v]=true;

System.out.print(G.arrVnode[v].data);System.out.print(" "); ArcNode node =G.arrVnode[v].nextarc;

// QueueFunction.EnQueue(Queue, v);

// while(Queue!=null){

while(node!=null){

if(visited[node.adjvex]==false&&queueed[node.adjvex]==false){ QueueFunction.EnQueue(Queue, node.adjvex);

queueed[node.adjvex]=true;

}

node=node.nextarc;

}

BFS(Queue,G,QueueFunction.DeQueue(Queue));

}

}

实验结果:

数据说明:5个节点,10条边,每行数字分别是起始节点、终止节点、权值。

实验总结:

DFS与BFS较为简单,是图论的基础。在以后的实验中,不管是动态规划、贪心算法、回溯法都会以DFS或BFS为基础,应当是我们每个人都要掌握的。

实验二最近点对问题

实验目的:运用分治算法,解决最近点对问题。

实现原理:

使用分治法解决最近点对问题就是将集合S分成两个子集是S1和S2,每个子集中有N/2个点。然后再每个子集中递归的求其最接近的点对,求出每个子集的最接近点对后,如果集合S中最接近的点对都在两个子集中,问题解决。当两个点分别在两个子集中时,则最近点对为S1和S2的最接近点。其时间复杂度为

O(nlogn)。

具体设计:

1. 排序

第一步是将所有从文件获取的点按照X轴升序排列,若X坐标相同则按Y轴坐标由小到大排列。

// 按照X轴坐标升序排序

Arrays.sort(point, new Comparator() {

public int compare(Neighborpoint o1, Neighborpoint o2) {

if (o1.x < o2.x)

return -1;

if (o1.x > o2.x)

return 1;

if (o1.y < o2.y)

return -1;

if (o1.y > o2.y)

return 1;

return 0;

}

});

2. 分治法求最近点对

public static double Close_pair(Neighborpoint[] point,int left, int right){

double d = 1e20;

if(right == left)//同一点,返回很大值

return d;

if(left+1 == right)

return distance(left,right);

int mid =(left+right)>>1;//除以2

double d1 = Close_pair(point,left,mid); double d2 = Close_pair(point,mid+1,right);

d = min(d1,d2);

int i,j,k=0;

tmpt = new int[10000];

//分离d区域

for(i=left;i<=right;i++){

if(Math.abs(point[mid].x-point[i].x) < d) tmpt[k++] = i;

}

实验结果:

数据文件:

点的显示:

结果显示:

实验总结:按照分治法,可以很方便的解决这个问题。虽然心里还是很排斥递归,但是真正用到的话还是比较简洁的。另外最开始做这个实验的时候,还不太熟悉比较器,本来是可以直接把点记录下来的,但当时是将点的值存入到数组以后再排序的,所以没能很方便的读出最近点的坐标,这个有时间再进行改进。

实验三拓扑排序

实验目的:实现一个拓扑排序

实现原理:

由AOV网构造拓扑序列的拓扑排序算法主要是循环执行以下两步,直到不存在入度为0的顶点为止。

(1) 选择一个入度为0的顶点并输出之;

(2) 从网中删除此顶点及所有出边。

循环结束后,若输出的顶点数小于网中的顶点数,则输出“有回路”信息,否则输出的顶点序列就是一种拓扑序列。

具体设计:

1. 数据结构与DFS

拓扑排序基本上和DFS没什么区别,它的本质其实就是DFS关闭节点的倒序输出。

所以在数据结构上,和第一个实验用的是相同的数据结构来保存图。

public int time;//记录打开、关闭节点的时间

public int entertime,exittime;//打开、关闭节点的时间

值得注意的是,以上两个变量,是用来实现拓扑排序的关键部分。2. 拓扑排序的实现

public void Toposortmethod(Graph G){

MaxPQ pq1= new MaxPQ(new Comparator() { public int compare(VNode o1, VNode o2) {

if (o1.exittime < o2.exittime) return -1;

else if (o1.exittime == o2.exittime) return 0;

else return 1;

}

});

GrahpFuntion.DFS1(G);

for(int i=1;i<=G.vexmun;i++){

pq1.insert(G.arrVnode[i]);

}

System.out.println("拓扑排序顺序:");

VNode Vnode;

for(int i=1;i<=G.vexmun;i++){ Vnode=pq1.delMax();

System.out.println(Vnode.data); }

}

实验结果:

数据文件:

结果显示:

上面那个是因为调用了DFS而产生的DFS输出结果

实验总结:由于有了之前的铺垫,所以拓扑排序相对来说比较简单,我只是在图的设计类中添加了一个时间变量,而在节点的打开、关闭的过程中增加了时间。拓扑排序是计算机网络的基础,在很多地方都有体现,值得我们注意。

实验四 N皇后问题

实验目的:应用回溯法解决N皇后问题

实现原理:

(1)针对所给问题,定义问题的解空间;

(2)确定易于搜索的解空间结构;

(3)以深度优先的方式搜索解空间,并且在搜索过程中用剪枝函数避免无效搜索。

首先找出解空间:给棋盘的行和列都编上1到N的号码,皇后也给编上1到N的号码。由于一个皇后应在不同的行上,为不失一般性,可以假定第i个皇后将放在第i行上的某列。因此N皇后问题的解空间可以用一个N元组(X1,

X2,.....Xn)来表示,其中Xi是放置皇后i所在的列号。这意味着所有的解都是N元组(1,2,3,.......,N)的置换。解空间大小为N!。其次我们看约束条件:因为解空间已经给我们排除了不在同一行(因为每个皇后分别已经对应不同的行号)的约束条件。我们要判断的是不在同一列和不在同一斜线的约束。因为Xi 表示皇后所在的列号,所以如果存在X(k)=X(i)那么肯定存在第k个皇后和第i个皇后同列。所以不同列的判段条件是X(k)!=X(i),1

具体设计:

关于N皇后问题,我设计了两种方式,一个是递归回溯,另一个是非递归回溯版本。

1. 判断是否可以放置的place方法

boolean place(int k){

int i;

for(i=1;i

if(column[i]==column[k]||Math.abs(i-k)==Math.abs(column[i]-

column[k]))

return false;

}

return true;

}

2.递归回溯

void backtrack(int t){//递归版本

int i=0;

if(t>N){

System.out.println("第"+count+"组");

count++;

for(i=1;i<=N;i++){

System.out.println("("+i+","+column[i]+")"); }

}else{

for(i=1;i<=N;i++){

column[t]=i;

if(place(t)) backtrack(t+1);

}

}

}

3.非递归回溯

void backtrack2(){//非递归

int i;

count=1;

column[1]=0;

int k=1;

while(k>0){

column[k]++;

while((column[k]<=N)&&!place(k)){ column[k]++;

}

if(column[k]<=N){

if(k==N){

System.out.println("第"+count+"组");

count++;

for(i=1;i<=N;i++){

System.out.println("("+i+","+column[i]+")"); }

}else{

k++;

column[k]=0;

}

}

else{//回溯

k--;

}

}

}

实验结果:

当参数设置N=4,即四皇后问题。

实验总结:N皇后问题是回溯法的经典问题,在通过多次减枝以后,可以有效的减少时间复杂度。

实验五 0-1背包问题

实验目的:应用动态规划解决0-1背包问题

实现原理:

f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:

f[i][v]=max{ f[i-1][v], f[i-1][v-w[i]]+v[i] }。

可以压缩空间,f[v]=max{f[v],f[v-w[i]]+v[i]}

“将前i件物品放入容量为v的背包中”这个子问题,若只考虑第i件物品的策略(放或不放),那么就可以转化为一个只牵扯前i-1件物品的问题。如果不放第i件物品,那么问题就转化为“前i-1件物品放入容量为v的背包中”,价值

中南大学计算机原理与汇编实验报告(截图完整)

中南大学《计算机原理与汇编》实验报告 学生姓名 学号 专业班级 指导教师雷向东 学院信息科学与工程学院 完成时间 2010年12月

实验2 算术逻辑运算实验 一、实验目的 1.掌握简单运算器的组成以及数据传送通路。 2.验证运算功能发生器(74LS181)的组合功能。 二、实验设备 74LS181(两片),74LS273(两片), 74LS245(一片),开关若干,灯泡若干,单脉冲一片。 三、实验原理 实验中的运算器由两片74LS181以并/串形式构成8位字长的ALU。运算器的输出经过一个三态门(74LS245)和数据总线相连,运算器的两个数据输入端分别由两个锁存器(74LS373)锁存,锁存器的输入连至数据总线,数据开关用来给出参与运算的数据(A和B),并经过一个三态门(74LS245)和数据显示灯相连,显示结果。 74LS181:完成加法运算。 74LS273:输入端接数据开关,输出端181。在收到上升沿的时钟信号前181和其输出数据线之间是隔断的。在收到上升沿信号后,其将输出端的数据将传到181,同时,作为触发器,其也将输入的数据进行保存。因此,通过增加该芯片,可以通过顺序输入时钟信号,将不同寄存器中的数据通过同一组输出数据线传输到181芯片的不同引脚之中。 74LS245:相当于181的输出和数据显示灯泡组件之间的一个开关,在开始实验后将其打开,可以使181的运算结果输出并显示到灯泡上。 四、实验步骤及结果分析 1.选择实验设备:根据实验原理图,将所需要的组件从组件列表中拖到实验设计流程栏中。

图1 运算器实验流程图 2.搭建实验流程:将已选择的组件进行连线(鼠标从一个引脚的端点拖动到另一组件的引脚端,即完成连线)。搭建好的实验流程图如图1所示。具体操作如下: ①将74LS273芯片的0-7号引脚(数据端从低到高)及9号引脚(复位端)接到开关上,8号引脚接至单脉冲组件,左右两个74LS273芯片分别保存参与运算的数据A和B。接着把两个74LS273组件的11-14号引脚(数据的低四位)分别接到74LS181组件(左)的0-7号引脚上,其中0-3号引脚为A的低四位,4-7号引脚为B的低四位。同样的,把两个74LS273组件的15-18号引脚(数据的高四位)分别接到74LS181组件(右)的0-7号引脚上,其中0-3号引脚为A 的高四位,4-7号引脚为B的高四位。 ②74LS181的8-12号引脚(S0-S3、M)接到开关上控制逻辑/算术运算。把低位的74LS181芯片(左)的13号引脚(CN端)由开关控制,高位的74LS181芯片(右)的13号引脚CN与低位的74LS181的15号进位输出相连。 ③最后,把两个74LS181芯片的16-19号引脚顺序接到74LS245的0-7接口上。74LS245芯片的8、9号引脚接开关,11―18号输出引脚(低位到高位)接灯泡,作为运算器结果的显示。 初始化各芯片的控制信号, 数据开关置上相应的数据。

中南大学算法实验报告

中南大学算法分析与设计 实验报告 学生姓名涂茂麟 学号 专业班级计算机科学与技术1303 指导老师 学院信息科学与工程学院 目录

实验一 DFS与BFS 3 实验二最近点对问题 7 实验三拓扑排序 10 实验四 N皇后问题 12 实验五 0-1背包问题 16 实验六最短路径 20 实验一 DFS与BFS 实验目的:实现深度优先算法、宽度优先算法 实现原理: 深度优先搜索: 从图中某顶点v出发: (1)访问顶点v; (2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问; (3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。

广度优先搜索: 已知图G=(V,E)和一个源顶点s,宽度优先搜索以一种系统的方式探寻G的边,从而“发现”s所能到达的所有顶点,并计算s到所有这些顶点的距离(最少边数),该算法同时能生成一棵根为s且包括所有可达顶点的宽度优先树。对从s 可达的任意顶点v,宽度优先树中从s到v的路径对应于图G中从s到v的最短路径,即包含最小边数的路径。该算法对有向图和无向图同样适用。 具体设计: 1. 数据结构 采用邻接链表作为图的数据结构。 public class Graph {//图 public VNode[] arrVnode=new VNode[100] ;//头结点数组 public int vexmun,arcmun;//节点总数、边界总数 public int time;//记录打开、关闭节点的时间 } public class VNode {//节点类 public int data;//节点的内容 public boolean visited=false;//是否访问过 public boolean ifclosed=false;//是否被放在关闭的表中 public int distance=10000;//距离某一点的最短距离

中南大学数据结构实验报告(七)

实验七 1.需求分析 本实验目的是使读者,掌握常用排序方法的基本思想,通过实验加深理解各种排序算法,通过实 验掌握各种排序方法的时间复杂度分析,了解各种排序方法的优缺点及适用范围。 1.排序算法的实现(设计性实验) 问题描述 排序是计算机领域的一项重要技术,是程序设计中的一种重要运算。它的功能是将一个数据元素 的任意序列重新排列成一个按键有序的序列。学习和研究各种排序方法是计算机工作者的一项重要工作课题。 基本要求 随机产生n个整数(依次为n赋值100、200、300、1 000和2 000),将其存于数组A[1..n]中。对主要算法(顺序查找、插入排序、归并排序、堆排序和快速排序)进行实验比较,计算出平均比较次数 c n、平均移动次数m n及执行时间t n。c n和m n由程序自动计算,t n由系统时间计算。 对实验结果数据进行对比分析。 测试数据 由随机数生成器决定。 实现提示 (1) 设计一个驱动程序,其任务是,随机输入一组原始数据A[1..n],对于查找还需准备一个键码 值(可以随机产生,也可在A[1..n]中按索引号挑选若干有代表性的数据)。对每组原始数据,分别调用查找或排序算法过程。 (2) 为了自动计算c n和m n需要在每个算法过程中的适当位置插入计数操作。 手工计算每个算法的执行时间t n时,为了减少计时误差,删除所插入的计数操作,并按n的大小确 定一个K,对每个查找或排序算法过程反复调用K次,在调用开始前设置一个计时起点t0,在K次调用执行后可打印信息。设计时的终点为t1,则(t1t0)/K便是算法的大致执行时间。 选作内容 对不同的输入表长做试验,观察含义相同的变量相对于表长的变化关系,还可以对稳定性做验证。2.统计成绩(综合性实验) 问题描述 给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名及各科成绩组成。对学生的考试 成绩进行有关统计,并打印统计表。 基本要求 (1) 按总数高低次序,打印出名次表,分数相同的为同一名次。 (2) 按名次打印出每个学生的学号、姓名、总分以及各科成绩。 测试数据 由读者依据软件工程的测试技术自己确定。注意测试边界数据。 选作内容 对各科成绩设置不同的权值 2.概要设计

中南大学 计算机体系结构实验报告

计算机体系结构课程设计 学院:信息科学与工程学院 专业班级: 指导老师: 学号: 姓名:

目录 实验1 对指令操作码进行霍夫曼编码 (3) 一、实验目的 (3) 二、实验内容 (3) 三、设计思路 (4) 四、关键代码 (4) 五、实验截图 (5) 六、源代码 (5) 实验2 使用LRU 方法更新Cache (8) 一、实验目的 (8) 二、实验内容 (8) 三、设计思路 (9) 四、程序截图 (9) 五、实验代码 (9) 实验总结 (16) 参考文献 (16)

实验1 对指令操作码进行霍夫曼编码一、实验目的 了解和掌握指令编码的基本要求和基本原理 二、实验内容 1。使用编程工具编写一个程序,对一组指令进行霍夫曼编码,并输出最后的编码结果以及对指令码的长度进行评价。与扩展操作码和等长编码进行比较。 2。问题描述以及问题分析 举例说明此问题,例如: P1 P2 P3 P4 P5 P6 P7 0.45 0.30 0.15 0.05 0.03 0。01 0.01 有一组指令的操作码共分七类,它们出现概率如 下表所示: 对此组指令进行 HUFFMAN 编码正如下图所示: 最后得到的HUFFMAN 编码如下表所示:

最短编码长度为: H=0.45*1+0。30*2+0。15*3+0。05*4+0。03*5+0。01*6+0.01*6=—1.95。 要对指令的操作码进行 HUFFMAN 编码,只要根据指令的各类操作码的出现概率构造HUFFMAN 树再进行 HUFFAM 编码。此过程的难点构造 HUFFMAN 树,进行 HUFFAM 编 码只要对你所生成的 HUFFMAN 树进行中序遍历即可完成编码工作。 三、设计思路 观察上图 ,不难看出构造 HUFFMAN 树所要做的工作:1、先对各指令操作码的出现 概率进行排序,构造一个有序链表。2、再取出两个最小的概率节点相加,生成一个生的节点加入到链表中,同时从两表中删除此两个节点。3、在对链表进行排序,链表是否只有一个节点,是则 HUFFAN 树构造完毕,否则继续做 2 的操作。为此设计一个工作链表(链表的元素时类,此类的功能相当结构。)、HUFFMAN 树节点、HUFFMAN 编码表节点。 四、关键代码 哈夫曼树重点在于如何排列权值大小不同的结点的顺序 private int leafNum; //叶子结点个数 private HaffmanNode [] hnodes; //哈夫曼树的结点数组 public HaffManCode(double[] weight) //构造指定权值集合的哈夫曼树 { int n = weight.length; //n个叶子结点 this.leafNum = n; this。hnodes = new HaffmanNode[2*n-1]; //n个叶子结点的哈夫曼树共有2n—1个结点 for(int i=0; i

中南大学计算机网络实验报告

中南大学《计算机网络》实验报告

学生姓名 学号 专业班级 指导教师桂劲松 学院信息科学与工程学院 完成时间2011年1月 模拟路由算法的实现 一、实验内容 1.模拟距离向量路由算法的路由表交换过程,演示每轮交换后路由表的变化。 2.实现链路状态路由算法中的最短路径算法。 二、实验目的及要求 本实验是计算机网络课程的实践性锻炼环节。通过实验,帮助学生更好地掌握网络通信协议的实现技术,锻炼学生应用高级编程语言完成通信编程的能力,使学生加深对网络协议本质的理解,巩固课堂所学的理论知识。要求实验者利用路由选择算法模拟软件提供的通信功能,模拟链路状态路由选择算法的初始化、路由信息扩散过程和路由计算方法; 掌握链路状态算法的路由信息扩散过程; 掌握链路状态算法的路由计算方法。

三、实验原理 编程语言:JAVA 编程工具:MyEclipse 实验实现方式:单机模拟实现 核心方法:dijkstra算法计算最短路径 分析:布置好各个模拟路由,以及路由的路程权值如何获取。 接着就是核心算法的实现,如何计算任意两个路由之间的最短路径问题。用到的是dijkstra算法。 Dijkstra算法按照从给定起点到图中顶点的距离,顺序求出最短的路径,首先,它求出从起点到最接近起点的顶点之间的最短路径,然后求出第二近的,一次类推,推而广之,再第i次迭代开始之前,算法已经确定了i-1条连接起点和离起点最近顶点之间的最短路径。 这些顶点、起点和从起点到顶点的路径上的边,构成了给定图的一颗子树Ti,因为所有边的权值都是非负数,可以从与Ti的顶点相邻的顶点中找到下一个和起点最接近的顶点。和Ti的顶点相邻的顶点的集合称为“边缘顶点”,以他们为候选对象,Dijkstra算法可以从中选出一个最接近起点的顶点。为了确定第I 个最接近的顶点,对于每一个边缘顶点u,该算法求出它到最近的树中顶点v的距离以及从起点到v得最短路径长度dv的和,再从中选出具有最小和的顶点。 此次实验主要是运用路由算法来处理路由当中的一些问题,利用Dijkstra算 流程图:

操作系统实验报告-中南大学

操作系统原理试验报告 班级: 学号: :

实验一:CPU调度 一、实验容 选择一个调度算法,实现处理机调度。 二、实验目的 多道系统中,当就绪进程数大于处理机数时,须按照某种策略决定哪些进程优先占用处理机。本实验模拟实现处理机调度,以加深了解处理机调度的工作。 三、实验题目 1、设计一个按优先权调度算法实现处理机调度的程序; 2、设计按时间片轮转实现处理机调度的程序。 四、实验要求 PCB容: 进程名/PID; 要求运行时间(单位时间); 优先权; 状态: PCB指针; 1、可随机输入若干进程,并按优先权排序; 2、从就绪队首选进程运行:优先权-1/要求运行时间-1 要求运行时间=0时,撤销该进程 3、重新排序,进行下轮调度 4、最好采用图形界面; 5、可随时增加进程; 6、规定道数,设置后备队列和挂起状态。若存中进程少于规定道数,可自动从后备队 列调度一作业进入。被挂起进程入挂起队列,设置解挂功能用于将指定挂起进程解挂入就绪队列。 7、每次调度后,显示各进程状态。 实验二:存管理 一、实验容 主存储器空间的分配和回收 二、实验目的 帮助了解在不同的存储管理方式下,应怎样实现主存空间的分配和回收。 三、实验题目 在可变分区管理方式下,采用最先适应算法实现主存空间的分配和回收。

四、实验要求 1、自行假设主存空间大小,预设操作系统所占大小并构造未分分区表; 表目容:起址、长度、状态(未分/空表目) 2、结合实验一,PCB增加为: {PID,要求运行时间,优先权,状态,所需主存大小,主存起始位置,PCB指针} 3、采用最先适应算法分配主存空间; 4、进程完成后,回收主存,并与相邻空闲分区合并 .1、Vo类说明(数据存储结构) 进程控制块PCB的结构: Public class PCB{ //进程控制块PCB,代表一个进程 //进程名,作为进程的标识; private String name; //要求运行时间,假设进程运行的单位时间数; private int time; //赋予进程的优先权,调度时总是选取优先数小的进程先执行; private int priority; //状态,假设有“就绪”状态(ready)、“运行”状态(running)、 //“后备”状态(waiting)、“挂起”状态(handup) private String state; //进程存放在table中的位置 private int start; //进程的大小 private int length; //进程是否进入存, 1为进入,0为未进入 private int isIn; //进程在存中的起始位置 private int base; //进程的大小 private int limit; //一些get和set方法以及构造器省略… };

中南大学典型系统的时域响应和稳定性分析实验报告

中南大学典型系统的时域响应和稳定性分析实验报告实验介绍: 本实验以中南大学典型系统为研究对象,通过构建数学模型和实际建模结果,分析系统的时域响应和稳定性,以及初步探讨系统的性能和优化方法。 实验步骤: 1、对中南大学典型系统进行数学建模,并得到系统的传递函数。 2、通过Matlab对系统的传递函数进行分析,得到系统的时域响应。 3、分析系统特征方程的根,判断系统的稳定性。 4、探讨系统的性能指标,并初步探讨系统的优化方法。 实验结果: 1、数学模型及传递函数: 根据中南大学典型系统的构成,我们可以得到其传递函数为: $$G(s) = \frac{Y(s)}{X(s)}=\frac{K}{s(T_1s+1)(T_2s+1)}$$ 2、时域响应分析: 阶跃响应 脉冲响应 可以看出,在系统输入为阶跃信号时,系统的响应随着时间的增加逐渐趋于稳定;在系统输入为脉冲信号时,系统的响应在一定时间范围内会有一个稳定的振荡。 3、稳定性分析: 我们根据系统的特征方程$$1+G(s)=0$$ 得到特征方程为:$$s^3+T_1T_2s^2+(T_1+T_2)s+K=0$$ 我们通过Matlab计算特征方程的根,得到系统的特征根分别为: $-0.0327\pm0.6480j$和$-2.4341$。 根据根的位置,我们可以判断系统的稳定性。由于系统的根都在左半平面,因此系统是稳定的。

4、性能指标和优化方法: 本实验中,我们主要关注系统的稳定性和响应速度等性能指标。在实际应用中,我们可以通过调整系统控制参数,如增益$K$和时间常数$T_1$和$T_2$等,来优化系统的性能。 结论: 本实验通过对中南大学典型系统进行数学建模和实际响应分析,得到了系统的传递函数、阶跃响应和脉冲响应等数学模型,并根据特征方程的根判断了系统的稳定性。在探讨系统性能指标和优化方法的基础上,我们可以进一步探究系统的优化方案,并为实际控制应用提供参考。

中南大学计算机网络实验报告

计算机网络实验报告 学院:信息科学与工程学院 专业班级:信息安全1302班 指导老师: 学号: 姓名:

目录 实验一分槽ALOHA协议仿真实验 (3) 一、实验目的与要求 (3) 二、实验内容与实现原理 (3) 三、编程语言和实验环境 (3) 四、实验具体设计实现及结果 (4) 五、实验总结 (6) 实验二Socket通信实验 (7) 一、实验目的和要求 (7) 二、实验内容与实现原理 (7) 三、编程语言和实验环境 (8) 四、实验具体设计实现及结果 (8) 五、实验总结 (15)

实验一分槽ALOHA协议仿真实验 一、实验目的与要求 1.掌握VB、VC++、VS或JAVA等集成开发环境编写仿真程序的方法; 2.理解并掌握分槽ALOHA协议原理。 二、实验内容与实现原理 1.实验内容: 编写仿真程序,对一定网络环境下MAC层的多路访问协议的分槽ALOHA协议进行实现。通过仿真,学习协议采取的介质访问管理,包括介质分配和冲突解决机制,并对协议的性能与理论结果进行比较分析。 2.实现原理 设置各站点初始产生包的时间点及产生包的时间间隔(均为随机值),得到所有站点成功发送1000个数据包的总时间以及这段时间内所有数据包的个数(包括各站点每次新产生的包以及由于冲突而重发的包),从而计算出每包时内尝试次数及其对应的吞吐量。针对不同的包产生间隔,得到不同的每包时内尝试次数及其对应的吞吐量,将其画成一条曲线。 三、编程语言和实验环境

1.编程语言Matlab 2.编程环境Windows(MS Visual系列,VC/VB/https://www.360docs.net/doc/2819343911.html,;) 四、实验具体设计实现及结果(含流程图及关键代码说明) 1.实验代码 for m=2:1:500 %m表示标签数,m=2,3 (500) n=1000; %aloha算法,m表示m个标签,n表示重发次数 A=rand(m,n); %生成一个0-1分布的矩阵,A表示m行n列的矩阵,元素为0-1之间的随机数 A1=0.5*A; %生成一个0-0.5分布的矩阵,假设随机退避时间服从0-0.5分布 B=cumsum(A1,2); %矩阵B是对A1每列相加得到的,每列的累加和,表示随机发送的时间 T=B(1,n); %T为标签均发送时间,即为观察时间,把矩阵B的第一行的最后一个元素赋给T C=1:1:(m*n); %生成一个向量 for i=1:m %将矩阵B转化为向量,赋值到向量C for j=1:n C(1,(i-1)*n+j)=B(i,j); end end D=sort(C); %将向量按从小到大的顺序排序,用于计算两数据包之间的时间差 E=diff(D); %向量的微分,求两数据包之间的时间差,用于判断是否产生碰撞 T0=0.001; %每个数据包的宽度 N=0; %初始化N(发送成功的数据包) M=0; %初始化M,总共的数据包 for i=1:(m*n-1) %此循环用于计算M与N if D(1,i)<=T %只要小于观察时间T就加1 M=M+1; if i==1&E(1,1)>=T0 %对于时间轴上的第1个和第m*n个数据包只需判断一个时间差,其他需要判断两个 N=N+1; elseif i==(m*n-1)&E(1,(m*n-1))>=T0 N=N+1; elseif i~=1&i~=(m*n-1)&E(1,i)>=T0&E(1,i-1)>=T0 N=N+1; end

中南大学大一下学期c++程序设计实验报告1.0

中南大学 本科生课程设计(实践)任务书、设计报告(C++语言程序设计) 题目多功能集成程序系统 学生姓名闵杰 指导教师罗芳 学院材料科学与工程 专业班级材料类1003 学生学号********** 计算机基础教学实验中心 2011 年 6 月 30 日

《集合简单计算、信息管理、绘图及多媒体系统设计》 C++实践报告 关键词: C++程序设计MFC[.exe] 面向对象计算信息管理绘图播放器 一、引言 1.1实践任务: 1、计算程序设计。如:计算器、一元二次方程的求解、华氏温度和摄氏温度之间的转换、求阶乘等。 2、文本编辑程序设计。 3、绘图程序设计。如:吹泡泡程序、曲线等图形绘制。 4、信息管理程序设计。能完成信息的添加、删除和修改等功能。 5、多媒体程序设计。如:音频播放器、flash动画播放器等。 1.2实践目的: 当今社会是信息时代,科技的高速发展要求我们能过熟练掌握并运用新的科学技术。而信息的获取需要我们能够掌握应用程序的深层代码,运用所掌握的计算机程序知识对数据进行管理。 C++是由C发展而来的,与C兼容。所以它可以用于面向过程的结构化程序设计,但是它又有自己的特点,它也可以用于面向对象的程序设计,是一种功能强大的混合型的程序设计语言。通过本次实践, 1、可以加深我们对面向对象的认识,巩固C++的基础知识,了解基于对话框的应用程序、文档/视图应用程序的框架结构和运行机制,初步掌握创建MFC应用程序的方法、过程。 2、掌握常用的控件的重要属性、主要消息、常用成员函数,并熟练地应用这些控件设计应用程序。

3、掌握绘制图形的方法、定时器的使用,鼠标消息处理函数和键盘消息处理函数的编写、对话框使用和菜单设计的技术。 4、培养我们的独立思考、设计综合程序的能力;同时培养自学能力;训练小论文撰写能力。 因此,计算机程序设计是大多数专业的必修课。随着软件工程技术的不断发展,面向对象的程序设计方法已成为当今软件开发的主流技术,我们肩负着博采众长的使命,运用好该程序将使我们受益匪浅。 1.3前期软件准备系统分析 需求分析 首先,这是一个基于MFC的对话框应用程序。然后,根据用户的需要,可以对电脑随机产生的数据或用户指定的数据进行排序。排序的方法有四种:快速排序、插入排序、冒泡排序和归并排序。并且,可以计算每种排序方法的时间复杂度和交换次数。最后,对数据和计算结果进行显示和保存。 可行性分析 排序程序主要涉及两方面内容:一是运算,包括各种排序的算法以及相应的时间复杂度和交换次数的计算。二是显示,包括文件的读写、保存以及对话框中各个空间的显示。 (i)MFC编程 MFC 是Visual C++ 的核心。虽然在Windows 应用程序中可以直接调用API 函数,但是一般不经常直接调用,而是从MFC 类创建对象并调用属于这些对象的成员函数。MFC 是Microsoft 公司提供的用来编写Windows 应用程序的C++ 类库,MFC 大约有200 多个类,可以分成两种:一是Cobject 类的派生类,它们以层次结构的形式组织起来,几乎每个子层次结构都与一个具体的Windows 实体对应;二是非Cobject 派生类,这些都是独立的类,如表示点的Cpoint 类,表示矩形的Crect 类。 在Visual C++ 中,可以创建以下 3 类典型的Windows 应用程序,它们都是通过MFC AppWizard(exe) (以下简称AppWizard )向导创建的:基于对话框的应用程序:这类程序适合于文档较少而交互操作较多的应用场合,如Windows 自带的计算器程序。

数值分析牛顿插值法实验报告

数值分析牛顿插值法实验报告 数值分析牛顿插值法实验报告 篇一: 数值分析课程实验报告-拉格朗日和牛顿插值法《数值分析》课程实验报告用拉格朗日和牛顿插值法求解函数值算法名称用拉格朗日和牛顿插值法求函数值学科专业机械工程作者姓名程习康 作者学号 153711006 作者班级机电院研究生15级C2班中南大学二〇一五年十二月《数值分析》课程实验报告 篇二: 数值分析实验报告: 拉格朗日插值法和牛顿插值法实验一报告拉格朗日插值法 一、实验目的 1、学习和掌握拉格朗日插值多项式 2、运用拉格朗日插值多项式进行计算 二、实验原理根据x0,x1,…xn;y0,y1,…yn构造插值多项式其表达式为: 将插值点x代入上式,就可得到函数f(x)在点x处的函数值的近似值。 三、运行结果 四、代码 using System; using System.Cllectins.Generic; using System.Linq; using System.Text; namespace CnsleApplicatin3 { class Prgram { static duble lglr(duble[] x, duble[] y, duble x1, int n) { duble result = 0.0; fr (int i = 0; i i++) { duble temp = y[i]; fr (int j = 0; j j++) { if (j == i) cntinue; temp = temp * (x1 - x[j]); temp = temp / (x[i] - x[j]); } result = result + temp; } return result; } static vid Main(string[] args) { duble[] x; duble[] y; Cnsle.riteLine( 请输入插值点数: int length = Cnvert.TInt32(Cnsle.ReadLine); x = ne

中南大学算法设计与分析实验报告

算法设计与分析基础 ——实验报告 姓名: 学号:0909122824 班级:信安1202

实验一分治 —最近点对 一.问题 Problem Have you ever played quoit in a playground? Quoit is a game in which flat rings are pitched at some toys, with all the toys encircled awarded. In the field of Cyberground, the position of each toy is fixed, and the ring is carefully designed so it can only encircle one toy at a time. On the other hand, to make the game look more attractive, the ring is designed to have the largest radius. Given a configuration of the field, you are supposed to find the radius of such a ring. Assume that all the toys are points on a plane. A point is encircled by the ring if the distance between the point and the center of the ring is strictly less than the radius of the ring. If two toys are placed at the same point, the radius of the ring is considered to be 0. Input The input consists of several test cases. For each case, the first line contains an integer N (2 <= N <= 100,000), the total number of toys in the field. Then N lines follow, each contains a pair of (x, y) which are the coordinates of a toy. The input is terminated by N = 0. Output For each test case, print in one line the radius of the ring required by the Cyberground manager, accurate up to 2 decimal places. 二.分析思路 题目是给n个点的坐标,求距离最近的一对点之间距离的一半。第一行是一个数n表示有n个点,接下来n行是n个点的x坐标和y坐标。 首先,假设点是n个,编号为1到n。找一个中间的编号mid,先求出1到mid点的最近距离设为d1,还有mid+1到n的最近距离设为d2。如果说最近点对中的两点都在1-mid 集合中,或者mid+1到n集合中,则d就是最小距离了。但是还有可能的是最近点对中的两点分属这两个集合,若存在,则把这个最近点对的距离记录下来,去更新d。这样就得到最小的距离d了。 三.源代码 #include #include #include using namespace std; #define N 1000010 struct point {

中南大学人工智能实验报告

“人工智能”实验报告 专业班级学号姓名

目录 一、实验八自动规划实验群 (3) 二、实验一生产式系统实验群 (6) 三、实验二搜索策略实验群 (7) 四、实验七神经网络 (9) 五、实验心得和体会 (10)

实验八自动规划实验群 实验目 熟悉和掌握 自动规划的基本原理,方法和主要技术。 的 规划是一种问子题求解技术,它从某个特定的问题状态出发,寻求一系列行为动 实验原 作,并建 立一个操作序列,直到求得目标状态为止。简而言之,规划是一个行动 理 过程的描述。一个总规划可以含有若干个子规划。 实验环 境 转载相 关源文 件 实现过单步观察实验算法 程 姓名 班级 指导老师 日期 2011.12 实验环境 转载相关源文件

p uftdErwnl9l^l 咋 mm 叩冲豁 1, 矗sit 宜 ivh- v -w *urenisiu'^ pirkdp lfit 己住块71 Vffc^CuilHnE Pl^i! Fiunrian uuiri 自 n 輕 ■ .祐.9 r 卩卜 ■»■ _ _ ―工 _______ y ZZ-Z5-Z^-— —_r -pnfepie?r<-pr "ableff®vcIgarfKift'f i 』:8EEf 1 * A 、 一 一 一一』 X S1_^X 学生结 对于不同的规则将会出现不同的移动过程。 观测结

中南大学数字信号处理实验报告1——7详

数字信号处理实验报告 实验五 实验题目:快速傅里叶变换 姓名: 学号: 班级: 指导老师:

实验五快速傅里叶变换 一、实验仪器: PC机一台、JQ-SOPC开发系统实验箱及辅助软件(DSP Builder、Matlab/Simulink、Quartus II、Modelsim) 二、实验目的: 1、了解快速傅里叶变换的基本结构组成。 2、学习使用DSP Builder设计FFT。 三、实验原理: (1)FFT的原理: 快速傅里叶变换(FFT)是离散傅里叶变换(DFT)的一种高效运算方法,它大大简化了DFT 的运算过程,使运算时间缩短几个数量级。FFT 算法可以分为按时间抽取(DIT)和按频率抽取(DIF)两类,输入也可分为实数和复数两种情况。八点时间抽取基-2FFT算法信号流图如图1示: 图1 8点基-2 DIT-FFT信号流图 四、实验步骤: (1)将桌面的my_fft_8.mdl拷贝到“D:\Program Files\MATLAB71\work”(MATLAB安装目录下的work文件夹)处,并双击打开。

图5-1 快速傅里叶变换系统图 图5-2 快速傅里叶变换子系统1图

图5-3 快速傅里叶变换子系统2图

图5-3 快速傅里叶变换子系统3图 (2)点击工具栏即可开始系统级simulink仿真,以验证该模型的正确性。在仿真进行过程中分别将三个输入控制开关打到000、001、010、011、100以选择五组输入数据进行FFT运算。 当开关打到000时选择第一组数据{2.0,2.0,4.0,7.0,3.0,5.0,5.0,8.0},其运算结果应为36、-2.41+3.84i、-4+8i、0.4219+1.844i、-8、0.4102-1.84i、-4-8i、-2.422-3.844i。 当开关打到001时选择第二组数据 {1.1,5.0,10.5,15.3,20.2,25.7,30.6,40.1},其运算结果应该为148.5、-16.1+52.35i、-19.8+24.7i、-22.02+12.25i、-23.7、-22.1-12.15i、-19.8-24.7i、-16.9-52.45i。 当开关打到010时选择第三组数据 {5.6,5.0,15.8,20.4,25.2,35.1,40.2,45.0},其运算结果结果应该为192.3、-23.39+63.19i、-25.2+25.3i、-15.69+14.49i、-18.7、-15.81-14.39i、-25.2-25.3i、-23.51-63.29i。 当开关打到011选择第四组数据 {10.2,15.3,18.1,20.3,24.2,30.0,35.2,42.3},其运算结果应该为195.6、-8.755+43.11i、-18.9+17.3i、-19.19+8.992i、-20.2、-19.25-8.906i、-18.9-17.3i、-8.812-43.2i。 当开关打到100选择第五组数据 {4.0,10.5,15.6,20.3,25.2,35.7,40.5,45.0},其运算结果应该为196.8、-21.45+60.28i、-26.9+19.1i、-20.85+10.58i、-26.2、-20.94-10.48i、-26.9-19.1i、-21.55-60.38i。 (3)双击模型图中的Testbench模块弹出类似如图7所示对话框。依次单击Generate HDL、Run Simulink、Run Modelsim三个选项。其中Run Modelsim选项后的Launch GUI前的选项框一定要选,这样可以观看modelsimRTL级仿真结果。 (4)双击模型图中的SignalComplier模块弹出类似如图8所示对话框。在parameters栏下的family选项选择cyclone II ,device选项选择默认的auto,然后点击simple下的complie,编译完后关闭该页。 (5)关闭MA TLAB。在位置“D:\Program Files\MATLAB71\work\ my_fft_8_dspbuilder”(MATLAB安

中南大学自动化专业离散数学实验报告2

“离散数学”实验报告 (实验二AC) 专业:自动化 班级: 学号: 姓名: 2010年12月20日

一、实验目的: 掌握关系的概念与性质,基本的关系运算,关系的各种闭包的求法。理解等价类的概念,掌握等价类的求解方法。 二、实验内容: 1. 求有限集上给定关系的自反、对称和传递闭包。(有两种求解方法,只做一种为A,两种都做为B) 2. 求有限集上等价关系的数目。(有两种求解方法,只做一种为A,两种都做为B) 3. 求解商集,输入集合和等价关系,求相应的商集。(C) 三、实验环境: 工具:Mcrosoft Visual Studio 2005; 程序设计语言:C语言。 四、实验原理和实现过程(算法描述): 实验A 求有限集上等价关系的数目。 集合上的等价关系与该集合的划分之间存在一一对应关系。一个等价关系对应一个划分,一个划分也对应一个等价关系。我们把n 个元素的集合划分成k块的方法数叫第二类Stirling数,表示为S(n,k)。给定S(n,n) = S(n,1) = 1,有递归关系: S(n,k) = S(n − 1,k − 1) + kS(n − 1,k) 集合上所有等价类的个数即为k从1到n,所有S(n,k)之和。 这个问题的算法比较简单,仅需两步就可完成,首先根据上式,定义一个递归函数S(n,k),然后对k从1到n,求取sum=∑S(n,

k),sum的值就是给定n元集合上的等价关系数目,最后将其输出即可。 实验A的流程图如下所示:

实验C 求解商集,输入集合和等价关系,求相应的商集商集即等价类构成的集合,要求商集,首先需要判断输入的关系是否为等价关系,否则没有商集。判断输入的关系是否为等价关系的算法如下: (1)将输入的关系转换为关系矩阵,这里定义了一个函数translate(),转换的方法为:依次查找输入的关系中的二元组的两个元素在集合中的位置,例如,若a在集合A中的位置为i,b 在集合A中的位置为j,就令存放关系矩阵的二维数组M[i][j]=1,这样就将输入的关系R转换为关系矩阵的形式。 (2)定义三个函数zifan(),duichen()和chuandi(),分别的作用是判断输入的关系是否自反、对称和传递。由等价关系的定义知,若三个函数的返回值均为1,则输入的关系是等价关系。判断的方法是:若关系矩阵M中所有的M[i][i]=1,则是自反关系;若M中所有的M[i][j]=M[j][i],则是对称关系;若M[i][j]=1并且M[j][k]=1,那么一定有M[i][k]=1,则是传递关系。 判断了所输入的关系为等价关系后就可以求其商集了,由于商集即等价类构成的集合,所以要求其等价类。确定集合A={a1,a2,a3,…,a n}关于R的等价类的算法如下: (1) 令A中每一个元素自成一个子集,A1={a1},A2={a2},…,A n={a n} (2) 对R中每个二元组< x,y >,判定x和y所属子集。假设x属于A i,y属于A j,若A i<>A j,则将A i并入A j,并置A i为空;或将A j并入A i,并置A j为空。一般将元素少的集合合并到元素多的集合。

中南大学数字图像处理实验报告

实验报告 实验名 称图像变换及频域滤波课程名 称数字图像处理 姓名 成绩 班级 学号 日期 地点 实验一图像变换及频域滤波 一.实验目的 (1)编写快速傅里叶变换算法程序,验证二维傅里叶变换的平移性和旋转不变。; (2)实现图像频域滤波,加深对频域图像增强的理解。 二.实验环境及开发工具 Windws XP、MATALAB7.0、Visual C++、Visual Basic

三.实验方法 1.验证二维傅里叶变换的平移性和旋转不变性; a .要验证证其平移特性,就先建立一个二维图象,然后再对其平移,通过观察两者的频谱图来观察平移特性,为了方便起见,我们选择特殊情况来分析,令u0=v0=N/2,使),()1(),(12y x f y x f y x +-= F(u-N/2,v-N/2),达到将原始F(U,V)四周频谱移到中心的效果,及达到频谱中心化。 b .验证旋转不变性可以通过将原始数组的通过移动45度,然后再比较旋转后与旋转前的频谱,得出频谱旋转不变性的结论。 具体步骤: 1)产生如图1所示图像),(1y x f (128×128大小,暗处=0,亮处=255) 2)同屏显示原图1f 和)(FFT 1f 的幅度谱图。 3)若令),()1(),(12y x f y x f y x +-=,重复以上过程,比较二者幅度谱的异同。 4)将),(2y x f 顺时针旋转45度得到),(3y x f ,显示)(FFT 3f 的幅度谱,并与)(FFT 2f 的幅度谱进行比较。 图1实验图象f 1(x , y )

2.实现图像频域滤波,加深对频域图像增强的理解。频率域中进行增强是相当直观的,主要步骤有: 1)计算需要增强的图象的傅立叶变换; 2)将其与一个(根据需要设计的)转移的函数相乘; 3)再将结果反傅立叶变换以得到增强的图象. 为了直观的展示频域增强,可以通过下面任务来展现: 对如图2所示的数字图像lena.img(256×256大小、256级灰度)进行频域的理想低通、高通滤波,同屏显示原图、幅度谱图和低通、高通滤波的结果图。 四.实验分析 1.验证二维傅里叶变换的平移性和旋转不变性 1)建立一个二维数组并要求该数组能够显示成图1. a=zeros(128,128) 图2 实验图象lena.img

相关文档
最新文档