中北大学软件学院算法实验报告(附截图)
软件算法展示实验报告(3篇)
第1篇一、实验目的1. 理解并掌握软件算法的基本概念和原理。
2. 掌握常见软件算法的设计与实现方法。
3. 通过实验,提高算法分析、设计、实现和优化能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 开发工具:PyCharm三、实验内容本次实验主要展示了以下软件算法:1. 冒泡排序2. 快速排序3. 二分查找4. 线性查找5. 简单链表操作6. 二叉树遍历四、实验步骤1. 冒泡排序(1)编写冒泡排序算法的代码实现。
(2)测试代码,验证算法的正确性。
2. 快速排序(1)编写快速排序算法的代码实现。
(2)测试代码,验证算法的正确性。
3. 二分查找(1)编写二分查找算法的代码实现。
(2)测试代码,验证算法的正确性。
4. 线性查找(1)编写线性查找算法的代码实现。
(2)测试代码,验证算法的正确性。
5. 简单链表操作(1)实现链表的创建、插入、删除和遍历等基本操作。
(2)测试代码,验证链表操作的正确性。
6. 二叉树遍历(1)实现二叉树的创建、插入、遍历等基本操作。
(2)测试代码,验证二叉树遍历的正确性。
五、实验结果与分析1. 冒泡排序实验结果:```pythondef bubble_sort(arr):n = len(arr)for i in range(n):for j in range(0, n-i-1):if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j]测试代码arr = [64, 34, 25, 12, 22, 11, 90]bubble_sort(arr)print("Sorted array is:", arr)```分析:冒泡排序算法是一种简单的排序算法,其基本思想是通过相邻元素的比较和交换,将待排序的序列逐步变成有序序列。
实验结果显示,冒泡排序算法能正确地将输入数组排序。
算法实验报告
算法实验报告算法实验报告引言:算法是计算机科学的核心内容之一,它是解决问题的方法和步骤的描述。
算法的设计和分析是计算机科学与工程中的重要研究方向之一。
本实验旨在通过对算法的实际应用和实验验证,深入理解算法的性能和效果。
实验一:排序算法的比较在本实验中,我们将比较三种常见的排序算法:冒泡排序、插入排序和快速排序。
我们将通过对不同规模的随机数组进行排序,并记录每种算法所需的时间和比较次数,以评估它们的性能。
实验结果显示,快速排序是最快的排序算法,其时间复杂度为O(nlogn),比较次数也相对较少。
插入排序的时间复杂度为O(n^2),比较次数较多,但对于小规模的数组排序效果较好。
而冒泡排序的时间复杂度也为O(n^2),但比较次数更多,效率相对较低。
实验二:图的最短路径算法在图的最短路径问题中,我们将比较Dijkstra算法和Floyd-Warshall算法的效率和准确性。
我们将使用一个带权有向图,并计算从一个顶点到其他所有顶点的最短路径。
实验结果表明,Dijkstra算法适用于单源最短路径问题,其时间复杂度为O(V^2),其中V为顶点数。
而Floyd-Warshall算法适用于多源最短路径问题,其时间复杂度为O(V^3)。
两种算法在准确性上没有明显差异,但在处理大规模图时,Floyd-Warshall算法的效率较低。
实验三:动态规划算法动态规划是一种通过将问题分解成子问题并记录子问题的解来解决复杂问题的方法。
在本实验中,我们将比较两种动态规划算法:0-1背包问题和最长公共子序列问题。
实验结果显示,0-1背包问题的动态规划算法可以有效地找到最优解,其时间复杂度为O(nW),其中n为物品个数,W为背包容量。
最长公共子序列问题的动态规划算法可以找到两个序列的最长公共子序列,其时间复杂度为O(mn),其中m和n分别为两个序列的长度。
结论:通过本次实验,我们对不同算法的性能和效果有了更深入的了解。
排序算法中,快速排序是最快且效率最高的;在图的最短路径问题中,Dijkstra算法和Floyd-Warshall算法分别适用于不同的场景;动态规划算法可以解决复杂的问题,并找到最优解。
算法课设实验报告(3篇)
第1篇一、实验背景与目的随着计算机技术的飞速发展,算法在计算机科学中扮演着至关重要的角色。
为了加深对算法设计与分析的理解,提高实际应用能力,本实验课程设计旨在通过实际操作,让学生掌握算法设计与分析的基本方法,学会运用所学知识解决实际问题。
二、实验内容与步骤本次实验共分为三个部分,分别为排序算法、贪心算法和动态规划算法的设计与实现。
1. 排序算法(1)实验目的:熟悉常见的排序算法,理解其原理,比较其优缺点,并实现至少三种排序算法。
(2)实验内容:- 实现冒泡排序、快速排序和归并排序三种算法。
- 对每种算法进行时间复杂度和空间复杂度的分析。
- 编写测试程序,对算法进行性能测试,比较不同算法的优劣。
(3)实验步骤:- 分析冒泡排序、快速排序和归并排序的原理。
- 编写三种排序算法的代码。
- 分析代码的时间复杂度和空间复杂度。
- 编写测试程序,生成随机测试数据,测试三种算法的性能。
- 比较三种算法的运行时间和内存占用。
2. 贪心算法(1)实验目的:理解贪心算法的基本思想,掌握贪心算法的解题步骤,并实现一个贪心算法问题。
(2)实验内容:- 实现一个贪心算法问题,如活动选择问题。
- 分析贪心算法的正确性,并证明其最优性。
(3)实验步骤:- 分析活动选择问题的贪心策略。
- 编写贪心算法的代码。
- 分析贪心算法的正确性,并证明其最优性。
- 编写测试程序,验证贪心算法的正确性。
3. 动态规划算法(1)实验目的:理解动态规划算法的基本思想,掌握动态规划算法的解题步骤,并实现一个动态规划算法问题。
(2)实验内容:- 实现一个动态规划算法问题,如背包问题。
- 分析动态规划算法的正确性,并证明其最优性。
(3)实验步骤:- 分析背包问题的动态规划策略。
- 编写动态规划算法的代码。
- 分析动态规划算法的正确性,并证明其最优性。
- 编写测试程序,验证动态规划算法的正确性。
三、实验结果与分析1. 排序算法实验结果:- 冒泡排序:时间复杂度O(n^2),空间复杂度O(1)。
中北大学数图实验报告
数字图像处理实验报告实验一图像变换一、实验名称:图像变换二、实验要求用Matlab语言编制图像变换软件,并对某幅图像进行图像的离散付里叶变换、离散余弦变换、KL变换,完成上述代码编写,并按要求完成实验报告三、实验目的1.掌握傅立叶变换 2. 理解频域变换的通用公式3. 掌握离散余弦变换4. 掌握KL变换四、实验过程及代码编写clear;RGB=imread('aershan.jpg');GR=rgb2gray(RGB); %彩色图像变换灰度图像figure(1);imshow(GR);title('彩色图像转换灰度图像后的图像');D=dct2(GR); %DCT变换figure(2);imshow(log(abs(D)),[]);title('离散余弦变换后图像');colormap(gray(4)); colorbar;D(abs(D)<0.1)=0;I=idct2(D)/255;figure(3);imshow(I)title('灰度图像');Y=fft2(GR);figure(4);%FFT变换imshow(Y);title('傅里叶变换图像');c=edge(GR,'sobel',0.03);[m,n]=size(c);figure(5),imshow(c);[row,column]=find(c==1);XX=reshape(c,m/2,[]);figure(6) ,imshow(XX);title('kl变换')XX=im2double(XX); %图像转化为双精度covx = cov(XX); % 求图像的协方差[pc,variances,explained] = pcacov(covx); % 求解K_L变换矩阵,即PCA pcmyKL=XX*pc; %进行K_L变换pic2=myKL(:,1);pic2=reshape(pic2,[256,256]);figure(7);imshow(pic2,[]);title('K_L 第一分量');figure(8);pic3=myKL(:,2);pic3=reshape(pic3,[256 256]);imshow(pic3,[]);title('K_L 第二分量');my=myKL*pc;my1=my(:,1);my1=reshape(my1,[256,256]);figure(9);imshow(my1,[]);五、实验结果如下图1 原始图像变成灰度图像图2 离散傅里叶变换图像图3 离散余弦变化图像图4 KL变换图像六、实验总结经过本次图像变换处理实验,基本掌握图像离散傅里叶变换、离散余弦变换和KL变换的算法编写,其中KL变换稍显难度,基本掌握相关变换函数的编写,同时也看到了自己matlab语言编写的生疏,需要进一步熟悉。
程序算法实训报告
一、实训背景随着计算机技术的飞速发展,算法作为计算机科学的核心,在各个领域都发挥着至关重要的作用。
为了提高自身在算法设计与应用方面的能力,我们选择了“程序算法实训”作为课程实践项目。
本次实训旨在通过实际编程,加深对算法理论知识的理解,提高编程能力,并培养团队协作精神。
二、实训目标1. 理解并掌握常见算法的基本原理和设计方法;2. 能够根据实际问题选择合适的算法进行编程实现;3. 提高编程能力,提高代码质量和可读性;4. 培养团队协作精神,提高团队沟通和协作能力。
三、实训内容本次实训主要围绕以下内容展开:1. 排序算法:冒泡排序、选择排序、插入排序、快速排序等;2. 查找算法:顺序查找、二分查找等;3. 数据结构:栈、队列、链表、树、图等;4. 动态规划;5. 贪心算法;6. 分治算法。
四、实训过程1. 阶段一:理论学习首先,我们对上述算法的基本原理和设计方法进行了深入学习,通过查阅相关资料、观看教学视频等方式,掌握了算法的基本概念和实现方法。
2. 阶段二:编程实现在理论学习的基础上,我们开始编写代码实现各种算法。
在编写过程中,我们遵循以下原则:(1)代码规范:遵循代码规范,提高代码可读性和可维护性;(2)注释清晰:对关键代码段进行注释,说明其功能;(3)调试优化:在编写过程中,不断调试和优化代码,提高代码性能。
3. 阶段三:团队协作在实训过程中,我们分成小组进行合作。
每个小组负责一个或多个算法的编程实现。
在小组内,我们分工明确,共同讨论和解决问题。
通过团队协作,我们不仅提高了编程能力,还培养了团队协作精神。
4. 阶段四:成果展示与总结在实训结束后,我们对成果进行展示和总结。
每个小组展示自己负责的算法实现,包括代码、运行结果和性能分析。
同时,我们对实训过程中的收获和不足进行总结,为今后的学习和工作提供借鉴。
五、实训成果1. 成功实现了各种常见算法的编程;2. 提高了编程能力,掌握了代码规范和调试技巧;3. 培养了团队协作精神,提高了团队沟通和协作能力;4. 对算法理论知识的理解更加深入。
计算机算法及建模实训报告
本次实训的主要目的是通过实际操作和项目实践,使我对计算机算法及建模有更深入的了解和掌握。
通过实训,我将学习到算法的基本原理、常用算法的实现方法,以及建模的基本步骤和技巧。
同时,通过实际项目操作,提高我的编程能力和解决实际问题的能力。
二、实习内容1. 算法学习在本次实训中,我学习了以下几种常用算法:(1)排序算法:冒泡排序、选择排序、插入排序、快速排序、归并排序等。
(2)查找算法:顺序查找、二分查找、斐波那契查找等。
(3)动态规划:最长公共子序列、最长递增子序列等。
(4)贪心算法:背包问题、最小生成树等。
2. 建模学习在本次实训中,我学习了以下建模步骤和技巧:(1)明确问题背景:分析问题的性质,确定问题的类型。
(2)建立数学模型:根据问题背景,选择合适的数学工具,建立数学模型。
(3)求解模型:使用算法求解数学模型,得到问题的解。
(4)结果分析:对求解结果进行分析,评估模型的适用性和准确性。
3. 实践项目本次实训中,我参与了以下项目:(1)图书管理系统:使用Java编程语言,实现了图书的借阅、归还、查询等功能。
(2)学生成绩管理系统:使用C++编程语言,实现了学生成绩的录入、查询、统计等功能。
(3)背包问题求解器:使用Python编程语言,实现了背包问题的贪心算法和动态规划算法求解。
1. 理论知识掌握通过本次实训,我对计算机算法及建模的基本原理和常用方法有了更深入的了解。
我能够熟练掌握排序、查找、动态规划、贪心算法等基本算法,并能够根据实际问题选择合适的算法进行求解。
2. 编程能力提高在实训过程中,我参与了多个项目的实际开发,提高了我的编程能力。
我学会了使用Java、C++、Python等编程语言进行项目开发,并掌握了基本的编程规范和技巧。
3. 解决实际问题能力增强通过实际项目操作,我学会了如何将实际问题转化为数学模型,并使用算法进行求解。
这使我能够更好地解决实际问题,提高我的解决实际问题的能力。
四、实习总结1. 算法及建模在计算机科学中的应用非常广泛,是计算机专业学生的必备技能。
中科大软件学院算法实验报告
算法实验报告快速排序1. 问题描述:实现对数组的普通快速排序与随机快速排序(1)实现上述两个算法(2)统计算法的运行时间(3)分析性能差异,作出总结2. 算法原理:2.1快速排序快速排序是对冒泡排序的一种改进。
它的基本思想是:选取一个基准元素,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比基准元素小,另外一部分的所有数据都要比基准元素大,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
设要排序的数组是A[0]……A[N-1],首先选取一个数据(普通快速排序选择的是最后一个元素, 随机快速排序是随机选择一个元素)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。
一趟快速排序的算法是:1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]赋给A[i];4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]赋给A[j];5)重复第3、4步,直到i=j;(3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。
找到符合条件的值,进行交换的时候i,j指针位置不变。
另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。
2.2随机快速排序快速排序的最坏情况基于每次划分对主元的选择。
基本的快速排序选取第一个或者最后一个元素作为主元。
这样在数组已经有序的情况下,每次划分将得到最坏的结果。
一种比较常见的优化方法是随机化算法,即随机选取一个元素作为主元。
这种情况下虽然最坏情况仍然是O(n^2),但最坏情况不再依赖于输入数据,而是由于随机函数取值不佳。
中北大学软件学院算法实验报告(附截图)
中北大学软件学院实验报告专业:_________________________方向:_________________________课程名称:_________________________班级:_________________________学号:_________________________姓名:_________________________辅导教师:_________________________2016年3月制成绩:成绩:成绩:成绩:成绩:实验时间2016年4月8日8时至10时学时数2 1.实验名称实验五汉诺塔问题的程序设计2.实验目的(1) 掌握递归的有关概念(2) 掌握汉诺塔问题的具体求解过程(3) 在掌握的基础上编程实现汉诺塔的具体实现过程3.实验内容在A上有按大小排序好的n个金碟,借助B的帮助,将A上的碟子移动到C上,在移动的过程中要严格按照大小顺序,不能将碟子放在比它小的上面,输出结果,输出时要求有文字说明。
请编写程序。
4.实验原理或流程图汉诺塔问题可以通过以下三个步骤实现:(1)将塔A上的n-1个碟子借助塔C先移到塔B上。
(2)把塔A上剩下的一个碟子移到塔C上。
(3)将n-1个碟子从塔B借助塔A移到塔C上。
显然,这是一个递归求解的过程。
【下方示意图画不下可省略】成绩:成绩:成绩:成绩:成绩:成绩:实验一BF算法运行结果截图实验二选择排序、起泡排序运行结果截图实验三数字旋转方阵运行结果截图实验四归并排序、快速排序运行结果截图实验五汉诺塔问题运行结果截图实验六折半查找和二叉查找树运行结果截图实验七堆排序运行结果截图实验八淘汰赛冠军问题运行结果截图实验九数塔问题运行结果截图。
动态分区分配方式的模拟实验报告
if(L[i].rom-T[k].rom>Size)
{
L[i].sad=L[i].sad+T[k].rom;
L[i].rom=L[i].rom-T[k].rom;
L[i].state=1;
T[k].sad=L[i].sad-T[k].rom;
printf("内存分配成功!\n作业申请空间为%d\n起始地址为%d\n",T[k].rom,T[k].sad);
2. 给出初始状态、可用内存空间、请求序列,分别采用首次适应算法和最佳适应算法进行内存块的分配和回收,要求每次分配和回后显示出空闲内存分区链的情况(共有多个空闲分区,每个空闲分区的大小分别为多大)。
4.实验原理或流程图
首次适应算法(First-fit):当要分配内存空间时,就查表,在各空闲区中查找满足大小要求的可用块。只要找到第一个足以满足要球的空闲块就停止查找,并把它分配出去;如果该空闲空间与所需空间大小一样,则从空闲表中取消该项;如果还有剩余,则余下的部分仍留在空闲表中,但应修改分区大小和分区始址。
{
printf("请输入第%d个分区的信息:\n",i);
cin>>L[i].rom>>L[i].sad;
L[i].id=i;
L[i].state=0;
}
printf("输入完毕,当前空闲分区表状态为:\n");
print();
printf("请输入不再切割的剩余空间的大小:\n");
cin>>Size;
{
int id;///空闲分区编号
int sad;///空闲分区首地址
int rom;///空间
软件学院 算法分析与设计 课程实验报告
实验五 回溯法实验目的和要求(1)掌握回溯法的设计思想;(2)掌握解空间树的构造方法,以及在求解过程中如何存储求解路径; (3)考察回溯法求解问题的有效程度。
(4)设计可能解的表示方式,构成解空间树; (5)设计回溯算法完成问题求解;(6)设计测试数据,统计搜索空间的结点数;实验内容给定n 种物品和一个容量为C 的背包,物品i 的重量是wi ,其价值为vi ,0/1背包问题是如何选择装入背包的物品(物品不可分割),使得装入背包中物品的总价值最大。
实验环境VC++数据结构与算法递归法: 1, X={}; 2, flag=false; 3, advance(1); 4, if(flag)输出解X;else 输出“无解”;advance(int k)1,对每一个x ∈S k 循环执行下列操作 1.1 x k =x; 1.2将x k 加入X;1.3if(X 是最终解)flag=true;return; 1.4else if(X 是部分解) advance(k+1); 迭代法: 1, X={}; 2, Flag=false; 3, K=1; 4, While(k>=1)∑=jik k a4.1当(Sk没有被穷举)循环执行下列操作4.1.1xk=Sk 中的下一个元素;4.1.2将xk加入X;4.1.3if(X为最终解)flag=true;转步骤5;4.1.4else if(X是部分解)k=k+1;转步骤4;4.2 重置Sk,使得下一个元素排在第一位;4.3 k=k-1;5,if(flag)输出解X;else输出“无解”;核心源代码递归法:#include<stdio.h>#include<string.h>int w[20];int v[20];int x[20];int bx[20];int wc;int vc;int n;int c;int max;void dfs(int m){int j,i;if(m>n){if(vc>max){max=vc;for(i=1;i<=n;i++){bx[i]=x[i];}}}else{for(j=0;j<2;j++){x[m]=j;if((wc+w[m]*j)<=c){wc+=w[m]*j;vc+=v[m]*j;dfs(m+1);wc-=w[m]*j;vc-=v[m]*j;}}}}int main(){int i;freopen("inm.txt","r",stdin);while(scanf("%d%d",&n,&c)!=EOF){for(i=1;i<=n;i++)scanf("%d",&w[i]);for(i=1;i<=n;i++)scanf("%d",&v[i]);max=0;memset(x,0,sizeof(x));wc=0;vc=0;dfs(1);printf("%d\n",max);for(i=1;i<=n;i++){printf("%d ",bx[i]);}printf("\n");}}输入数据:运行结果:迭代法:#include<stdio.h>#include<string.h>int check(int n,int vt[],int xt[],int m) {int i,s;s=0;for(i=1;i<=n;i++){if(xt[i]==1){s+=vt[i];}}if(s>m)return 0;elsereturn 1;}int main(){int i,j,k,w[20],v[20],x[20],bx[20],n,c,V,sum;freopen("inm.txt","r",stdin);while(scanf("%d%d",&n,&c)!=EOF){for(i=1;i<=n;i++)scanf("%d",&w[i]);for(i=1;i<=n;i++)scanf("%d",&v[i]);sum=0;memset(x,-1,sizeof(x));V=0;k=1;while(k>=1){while(x[k]<1){x[k]++;if(check(k,w,x,c)&& k==n){for(i=1; i<=n; i++){if(x[i] == 1)sum += v[i];}if(sum>V){for(i=0; i<=n; i++)bx[i] = x[i];V=sum;sum=0;}}else if(check(k,w,x,c)){k++;}}x[k]=0;;k--;}printf("%d\n",V);for(i=1;i<=n;i++){printf("%d ",bx[i]);}printf("\n");}}输入数据:运行结果:物品情况搜索结点数 递归法 n=3 w=20,15,10; c=25 v=20,30,25;迭代法 递归法 n=3 w=20,16,10; c=25 v=20,30,25; 迭代法 递归法n=4 w=10,20,30,40;c=30 v=4,3,2,1; 迭代法 递归法n=4 w=30,25,10,35c=40 v=7,9,3,6 迭代法 递归法n=4 w=7,3,4,5c=10 v=42,12,40,25 迭代法。
C程序的运行环境和运行一个C程序的方法实验报告
中北大学理学院实验报告实验课程:_____ 程序设计与算法语言一一 _____________ 专业:信息与计算科学_____________________ 班级:__________________________学号:_________________姓名:_________ 李玥__________________中北大学理学院实验一C程序的运行环境和运行一个C程序的方法【实验类型】验证性【实验学时】2学时【实验目的】1.了解Visual C++编译系统的基本操作方法,学会独立使用该系统。
2•了解在该系统上如何编辑、编译、连接和运行一个C程序。
3.通过运行简单的C程序,初步了解C源程序的特点。
【实验内容】1.用编辑程序,输入教材第一章例程序,并进行编译和运行。
应了解所用的系统是用什么命令进行编译和连接运行的。
编译和连接后所得到的目标程序的后缀是什么形式的int main()<printf ("this is a C progrdm.\n l+): return S;>12.编写一个C程序,输出以下信息:****************************very good!**************************** 3.输入并运行教材第一章中例,了解如何在运行时向程序变量输入数据。
【实验所使用的仪器设备与软件平台】Windows2000 Visual C++【实验结果】(根据题目要求给出结果,对于编程的实验,要附上编写的程序)【实验小结】(主要分析在实验过程中碰到的问题,及如何解决的,另外小结一下实验过程中常犯的错误,怎么解决等)。
中北大学 算法与数据结构实验报告
for(i=n;i>0;--i)
{
p=(LinkList)malloc(sizeof(LNode));
cin>>p->data;
p->next=L->next;
L->next=p;
}
}
int GetElem_L(LinkList L,int i,int &e) //GetElem_L() function
# define ERROR 0
typedef struct LNode//define LNode structure
{int data;
struct LNode *next;
}LNode,*Linklist;
int ListInsert_L(Linklist &L,int i,int e)
{//在带头结点的单链线性表L中第i个位置之前插入元素e
L=node;
L=(Linklist)malloc(sizeof(LNode));
L->next=NULL;
for (i=10;i>0;i--)
{p=(Linklist)malloc(sizeof(LNode));
p->data=array[i-1];
p->next=L->next;
cout<<"OK...!"<<endl;
getch();
}//end of main() function
4、实现单向线性链表取元素
#include <stdlib.h>
#include <iostream.h>
中北大学数据实验报告
算法与数据结构实验班级:学号:姓名:实验一单链表建立及相关操作实验思路线性链表的存储信息包含两个域,一个是数据域,另一个是指针域,单链表的插入先创立一个新结点再让该结点指向第i+1个元素再让第i-1个元素指向该结点;删除第i个结为找到线性表中第i-1个节点修改其指向后继的结点。
运行结果实验二二叉树的建立及遍历实验思路二叉树的链式存储由一个数据域与分别指向其左右子树的两个分支构成,则表示二叉树的链表中的结点至少包含三个域,数据域左右指针域。
先序遍历为先访问根节点再先序遍历左子树后先序遍历右子树;中序遍历为先中序遍历左字数再访问根节点后中序遍历右子树;后序遍历先后序遍历左子树再后序遍历右子树后访问根结点。
运行结果实验三图的存储结构及遍历实验思路图的深度优先遍历为从图中某个顶点v出发,访问其顶点,然后依次从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径相通的顶点都被访问到,若此时尚有顶点未被访问,则另选图中一个未曾被访问的顶点做起始点,重复上诉过程直至图中所有顶点都被访问。
广度优先遍历从图中某顶点v出发,在访问v之后依次访问v的各个未被访问的邻接点,然后分别从这些邻接点出发依次访问它的邻接点,直至图中所有的顶点都被访问。
、运行结果实验四数据记录的内部排序实验思路直接插入排序的基本操作是将一个记录插入到已排好序的序列表中,从而得到一个新的,记录数增一的有序表;折半插入排序在将一个新元素插入已排好序的数组的过程中,寻找插入点时,将待插入区域的首元素设low,末元素设high,则轮比较时将待插入元素与a[m],其中m=(low+high)/2相比较,如果比参考元素大,则选择low到m-1为新的插入区域(即high=m-1),否则选择a[m+1]到a[high]为新的插入区域(即low=m+1),如此直至low<=high不成立,即将此位置之后所有元素后移一位,并将新元素插入入a[high+1]。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中北大学软件学院实验报告
专业:_________________________
方向:_________________________
?
课程名称:_________________________
班级:_________________________
学号:_________________________
姓名:_________________________
辅导教师:_________________________
2016年3月制
#
成绩:
成绩:
?
成绩:
成绩:
成绩:
实验时间2016年4月8日8时至10时学时数2
1.实验名称
实验五汉诺塔问题的程序设计
2.实验目的
(1) 掌握递归的有关概念
(2) 掌握汉诺塔问题的具体求解过程
》
(3) 在掌握的基础上编程实现汉诺塔的具体实现过程
3.实验内容
在A上有按大小排序好的n个金碟,借助B的帮助,将A上的碟子移动到C上,在移动的过程中要严格按照大小顺序,不能将碟子放在比它小的上面,输出结果,输出时要求有文字说明。
请编写程序。
4.实验原理或流程图
汉诺塔问题可以通过以下三个步骤实现:
(1)将塔A上的n-1个碟子借助塔C先移到塔B上。
(2)把塔A上剩下的一个碟子移到塔C上。
(3)将n-1个碟子从塔B借助塔A移到塔C上。
显然,这是一个递归求解的过程。
【下方示意图画不下可省略】
成绩:
成绩:
成绩:
成绩:
@
成绩:
成绩:
实验一 BF算法运行结果截图
$
~
实验二选择排序、起泡排序运行结果截图
[
实验三数字旋转方阵运行结果截图
)
—
实验四归并排序、快速排序运行结果截图
实验五汉诺塔问题运行结果截图
:
实验六折半查找和二叉查找树运行结果截图
》
实验七堆排序运行结果截图
实验八淘汰赛冠军问题运行结果截图
实验九数塔问题运行结果截图
实验十多源点最短路径——Floyd算法运行结果截图
实验十一贪心法解决TSP问题。