西安电子科技大学算法上机报告

合集下载

上机实验报告(精选11篇)

上机实验报告(精选11篇)

上机实验报告篇1用户名se××××学号姓名学院①实验名称:②实验目的:③算法描述(可用文字描述,也可用流程图):④源代码:(.c的文件)⑤用户屏幕(即程序运行时出现在机器上的画面):2.对c文件的要求:程序应具有以下特点:a可读性:有注释。

b交互性:有输入提示。

c结构化程序设计风格:分层缩进、隔行书写。

3.上交时间:12月26日下午1点-6点,工程设计中心三楼教学组。

请注意:过时不候哟!四、实验报告内容0.顺序表的插入。

1.顺序表的删除。

2.带头结点的单链表的\'插入。

3.带头结点的单链表的删除。

注意:1.每个人只需在实验报告中完成上述4个项目中的一个,具体安排为:将自己的序号对4求余,得到的数即为应完成的项目的序号。

例如:序号为85的同学,85%4=1,即在实验报告中应完成顺序表的删除。

2.实验报告中的源代码应是通过编译链接即可运行的。

3.提交到个人空间中的内容应是上机实验中的全部内容。

上机实验报告篇2一、《软件技术基础》上机实验内容1.顺序表的建立、插入、删除。

2.带头结点的单链表的建立(用尾插法)、插入、删除。

二、提交到个人10m硬盘空间的内容及截止时间1.分别建立二个文件夹,取名为顺序表和单链表。

2.在这二个文件夹中,分别存放上述二个实验的相关文件。

每个文件夹中应有三个文件(.c文件、.obj文件和.exe文件)。

3. 截止时间:12月28日(18周周日)晚上关机时为止,届时服务器将关闭。

三、实验报告要求及上交时间(用a4纸打印)1.格式:《计算机软件技术基础》上机实验报告用户名se××××学号姓名学院①实验名称:②实验目的:③算法描述(可用文字描述,也可用流程图):④源代码:(.c的文件)⑤用户屏幕(即程序运行时出现在机器上的画面):2.对c文件的要求:程序应具有以下特点:a 可读性:有注释。

b 交互性:有输入提示。

算法上机实验报告

算法上机实验报告

实验名称:排序算法性能比较实验目的:1. 理解常见的排序算法及其原理。

2. 分析不同排序算法的时间复杂度和空间复杂度。

3. 通过实际编程实现排序算法,并进行性能比较。

实验环境:1. 操作系统:Windows 102. 编程语言:Python3.83. 开发环境:PyCharm实验内容:1. 实现冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序算法。

2. 对随机生成的数据集进行排序,比较不同算法的执行时间和稳定性。

3. 分析不同排序算法在不同数据规模下的性能差异。

实验步骤:1. 实现冒泡排序算法。

2. 实现选择排序算法。

3. 实现插入排序算法。

4. 实现快速排序算法。

5. 实现归并排序算法。

6. 实现堆排序算法。

7. 生成不同规模的数据集,对每个数据集使用上述算法进行排序。

8. 记录每个算法的执行时间,并进行比较。

9. 分析不同排序算法在不同数据规模下的性能差异。

实验结果与分析:一、冒泡排序冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。

遍历数列的工作是重复地进行,直到没有再需要交换,也就是说该数列已经排序完成。

冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1)。

在数据规模较小的情况下,冒泡排序的性能较好。

二、选择排序选择排序是一种简单直观的排序算法。

它的工作原理是:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

以此类推,直到所有元素均排序完毕。

选择排序的时间复杂度为O(n^2),空间复杂度为O(1)。

在选择排序中,元素的移动次数较少,因此在某些情况下,选择排序的性能可能优于冒泡排序。

三、插入排序插入排序是一种简单直观的排序算法。

它的工作原理是:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

插入排序的时间复杂度为O(n^2),空间复杂度为O(1)。

算法设计与分析上机实习报告

算法设计与分析上机实习报告

算法设计与分析上机实习报告姓名:学号:指导老师:1.分治法求解棋盘覆盖问题●问题描述:在一个2k×2k 个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。

在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。

●算法思想:将棋盘分割为4个2k-1×2k-1的子棋盘。

对无特殊方格的3个子棋盘,在靠近中心的位置上各添一个特殊方格,转化为特殊棋盘。

对四个已成特殊子棋盘的棋盘进行同样处理●算法:#include<iostream>#define max 1000using namespace std;int Board[max][max];//最大数组int tile=1;//骨牌号码void ChessBoard(int tr,int tc,int dr,int dc,int size)//tr长,tc宽, dr,dc特殊方格位置,size大小{if(size == 1){return ;}int t =tile++,//L骨牌号码s=size/2;//左上角if(dr<tr+s && dc<tc+s)//方格在棋盘中{ChessBoard(tr,tc,dr,dc,s);}else//方格不在棋盘中{Board[tr+s-1][tc+s-1] =t;//在这部分中的右下角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//方格不在棋盘中{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//方格不在棋盘中{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//方格不在棋盘中{Board[tr+s][tc+s]=t;ChessBoard(tr+s,tc+s,tr+s,tc+s,s);}}int main(){for(int i=0;i<max;i++){for(int j=0;j<max;j++){Board[i][j]=0;}}int n,a,b;cin>>n;cin>>a>>b;a--;b--;//Board[0][0]=0;tile=1;//设置数目为1/*for(int i=0;i<n;i++){for(int j=0;j<n;j++){printf("%3d",Board[i][j]);}cout<<endl;}cout<<endl;*/ChessBoard(0,0,a,b,n);//初始骨牌在左上角,//tr长,tc宽, dr,dc特殊方格位置,size大小for(int i=0;i<n;i++){for(int j=0;j<n;j++){printf("%3d",Board[i][j]);}cout<<endl;}cout<<endl;return 0;}测试数据8*8的棋盘,特殊棋子在(2,2)上,结果为:2. 修改3.1节的算法,找出计算n 个矩阵之积的最少乘法数,并完成添括号过程。

西电DSP上机实验报告

西电DSP上机实验报告

DSP实验报告及大作业学院:电子信息工程班级:学号:姓名:实验一VISUAL DSP++的使用入门一、实验目的1、熟悉VISUAL DSP++的开发环境。

针对ADSP-21065L SHARC DSP,利用几个用C、C++和汇编语言写成的简单例子来描述VISUAL DSP+十编程环境和调试器(debugger)的主要特征和功能。

2、对于运行在其它类型SHARC处理器的程序只需对其链接描述文件(.LDF)做一些小的变化,用于ADSP-21065L硬件仿真。

二、实验内容实验一:启动Visual DSP++,建立一个用C源代码的工程(Project),同时用调试器来评估用C语言所编写代码的性能;实验二:创立一个新的工程,修改源码来调用一个汇编(asm)程序,重新编译工程,用调试器来评估用汇编语言所写程序的性能;实验三:利用调试器的绘图(plot)功能来图形显示一个卷积算法中的多个数据的波形;实验四:利用调试器的性能统计功能(Statistical profile来检查练习三中卷积算法的效率。

利用所收集到的性能统计数据就能看出算法中最耗时的地方。

三、实验步骤及结果练习一:1、进入Visual DSP++,显示Visual DSP++的集成开发和调试环境窗口。

选择菜单中的Session\New Session\SHARK\ADSP-21065L SHARK processing Simulator.此过程为将要编译运行的程序建立了一个Session.2、选择菜单File 中Open 打开Project\E:\float\unit_1\dot_product_c \dotprodc.dpj。

(注:练习中将float压缩包解压与E盘)3、在菜单Project中选择Build Project来对工程进行编译。

在本例子中,编译器会检测到一个未定义的错误,显示为:“.\dotprod_main.c”,line 115:error #20:identifier“itn”is undefined itn i;双击该行文字,光标会自动定位出错行,再该行中将“itn”改为“int”,重新编译后没有错误。

西安电子科技大学数字信号处理上机报告

西安电子科技大学数字信号处理上机报告

数字信号处理大作业院系:电子工程学院学号:02115043姓名:邱道森实验一:信号、系统及系统响应一、实验目的(1) 熟悉连续信号经理想采样前后的频谱变化关系,加深对时域采样定理的理解。

(2) 熟悉时域离散系统的时域特性。

(3) 利用卷积方法观察分析系统的时域特性。

(4) 掌握序列傅里叶变换的计算机实现方法,利用序列的傅里叶变换对连续信号、离散信号及系统响应进行频域分析。

二、实验原理采样是连续信号数字处理的第一个关键环节。

对连续信号()a x t 进行理想采样的过程可用(1.1)式表示:()()()ˆa a xt x t p t =⋅ 其中()t xa ˆ为()a x t 的理想采样,()p t 为周期冲激脉冲,即 ()()n p t t nT δ∞=-∞=-∑()t xa ˆ的傅里叶变换()j a X Ω为 ()()s 1ˆj j j a a m X ΩX ΩkΩT ∞=-∞=-∑进行傅里叶变换,()()()j ˆj e d Ωt a a n X Ωx t t nT t δ∞∞--∞=-∞⎡⎤=-⎢⎥⎣⎦∑⎰ ()()j e d Ωtan x t t nT t δ∞∞--∞=-∞=-∑⎰()j e ΩnTan x nT ∞-=-∞=∑式中的()a x nT 就是采样后得到的序列()x n , 即()()a x n x nT =()x n 的傅里叶变换为()()j j e enn X x n ωω∞-=-∞=∑比较可知()()j ˆj e aΩTX ΩX ωω==为了在数字计算机上观察分析各种序列的频域特性,通常对()j e X ω在[]0,2π上进行M 点采样来观察分析。

对长度为N 的有限长序列()x n ,有()()1j j 0eekk N nn X x n ωω--==∑其中2π,0,1,,1k k k M Mω==⋅⋅⋅-一个时域离散线性时不变系统的输入/输出关系为()()()()()m y n x n h n x m h n m ∞=-∞=*=-∑上述卷积运算也可以转到频域实现()()()j j j e e e Y X H ωωω= (1.9)三、实验内容及步骤(1) 认真复习采样理论、 离散信号与系统、 线性卷积、 序列的傅里叶变换及性质等有关内容, 阅读本实验原理与方法。

算法上机实验报告

算法上机实验报告

算法上机实验报告课程实验报告课程名称:算法设计与分析专业班级:信息安全1303学号:U201315182姓名:刘⽴鹏指导教师:王多强报告⽇期:2015-6-16计算机科学与技术学院⽬录⽬录 (2)实验⼀最近点对问题 (1)1.1实验内容与要求 (1)1.2算法设计 (1)1.3 实验结果与分析 (2)1.4编程技术与⽅法 (3)1.5 源程序及注释 (3)实验⼆⼤整数乘法 (8)2.1实验内容与要求 (8)2.2算法设计 (9)2.3 实验结果与分析 (12)2.4编程技术与⽅法 (12)2.5 源程序及注释 (12)实验三单源点 (14)3.1实验内容与要求 (14)3.2算法设计 (14)3.3 实验结果与分析 (14)3.4编程技术与⽅法 (16)3.5 源程序及注释 (16)实验四最优⼆分检索树 (19)4.1实验内容与要求 (19)4.2算法设计 (19)4.3实验结果与分析 (20)六、参考书⽬ (27)实验⼀最近点对问题1.1 实验内容与要求已知平⾯上分布着点集P 中的n 个点p 1,p 2,...p n ,点i 的坐标记为(x i ,y i ),1≤i≤n 。

两点之间的距离取其欧式距离,记为22)()(),(j i j i j i y y x x p p d -+-=问题:找出⼀对距离最近的点。

注:允许两个点位于同⼀个位置,此时两点之间的距离为0 要求:⽤分治法实现最近点对的问题。

1.2 算法设计(1)⾸先将所有的点按照x 坐标排序。

排序过程需要O(nlogn)的时间,不会从整体上增加时间复杂度的数量级。

(2)划分:由于点已经按x 坐标排序,所以空间上可以“想象” 画⼀条垂线,作为分割线,将平⾯上的点集分成左、右两半P L 和P R 。

如下图所⽰:d Ld CdR分割线P L P R记, d L:P L中的最近点对距离;d R:P R中的最近点对距离;d C:跨越分割线的最近点对距离。

西安电子科技大学计组实验报告

西安电子科技大学计组实验报告

西安电子科技大学计算机组织与体系结构课程实验报告实验名称计算机组织与体系结构计算机学院班Array姓名陈宁学号同作者罗超实验日期 2017 年 9 月 24 日实验地点E-II-311 实验批次第二批一.实验目的1.深入理解基本模型计算机的功能、组成知识;2.深入学习计算机各类典型指令的执行流程;3.学习微程序控制器的设计过程和相关技术,掌握LPM_ROM的配置方法。

4.在掌握部件单元电路实验的基础上,进一步将单元电路组成系统,构造一台基本模型计算机。

5.定义五条机器指令,并编写相应的微程序,上机调试,掌握计算机整机概念。

掌握微程序的设计方法,学会编写二进制微指令代码表。

6.通过熟悉较完整的计算机的设计,全面了解并掌握微程序控制方式计算机的设计方法。

二.实验原理1.在部件实验过程中,各部件单元的控制信号是人为模拟产生的,而本实验将能在微过程控制下自动产生各部件单元控制信号,实现特定的功能。

实验中,计算机数据通路的控制将由微过程控制器来完成,CPU 从内存中取出一条机器指令到指令执行结束的一个指令周期,全部由微指令组成的序列来完成,即一条机器指令对应一个微程序。

2.指令格式 (1)指令格式采用寄存器直接寻址方式,其格式如下:其中,OP -CODE 为操作码,rs 为源寄存器,rd 为目的寄存器,并规定:1,存储器读操作(KRD ):下载实验程序后按总清除按键(CLR )后,控制台SWA 、SWB 为“0 0”时,可对RAM 连续手动读入操作。

2,存储器写操作(KWE ):下载实验程序后按总清除按键(CLR )后,控制台SWA 、SWB 为“0 1”时,可对RAM 连续手动写操作。

3、启动程序(RP ):下载实验程序后按总清除按键(CLR )后,控制台SWA 、SWB 为“1 1”时,即可转入到微地址“01”号“取指令”微指令,启动程序运行。

表6-2 A 、B 、C 各字段功能说明:图6-1 数据通路框图24位微代码中各信号的功能(1) uA5—uA0:微程序控制器的微地址输出信号,是下一条要执行的微指令的微地址。

操作系统上机实验报告(西电)

操作系统上机实验报告(西电)

操作系统上机题目一、题目实验1:LINUX/UNIX Shell部分(一)系统基本命令1.登陆系统,输入whoami 和pwd ,确定自己的登录名和当前目录;登录名yuanye ,当前目录/home/yuanye2.显示自己的注册目录?命令在哪里?a.键入echo $HOME,确认自己的主目录;主目录为/home/yuanyeb.键入echo $PA TH,记下自己看到的目录表;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/gamesc.键入which abcd,看看得到的错误信息;再键入which ls 和which vi,对比刚刚得到的结果的目录是否在a.、b.两题看到的目录表中;/bin/ls /usr/bin/vi3.ls 和cd 的使用:a.键入ls,ls -l ,ls -a ,ls -al 四条命令,观察输出,说明四种不同使用方式的区别。

1. examples.desktop 公共的模板视频图片文档音乐桌面; 总计322.-rw-r--r-- 1 yuanye yuanye 357 2011-03-22 22:15 examples.desktopdrwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 公共的drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 模板drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 视频drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 图片drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 文档drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 音乐drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 桌面3. . .fontconfig .local .Xauthority.. .gconf .mozilla .xsession-errors.bash_logout .gconfd .nautilus 公共的.bashrc .gksu.lock .profile 模板.cache .gnome2 .pulse 视频.chewing .gnome2_private .pulse-cookie 图片.config .gnupg .recently-used.xbel 文档.dbus .gstreamer-0.10 .scim 音乐.dmrc .gtk-bookmarks .sudo_as_admin_successful 桌面.esd_auth .gvfs .update-manager-coreexamples.desktop .ICEauthority .update-notifier4. 总计156drwxr-xr-x 28 yuanye yuanye 4096 2011-03-24 16:55 .drwxr-xr-x 3 root root 4096 2011-03-22 22:15 ..-rw-r--r-- 1 yuanye yuanye 220 2011-03-22 22:15 .bash_logout-rw-r--r-- 1 yuanye yuanye 3115 2011-03-22 22:15 .bashrcdrwxr-xr-x 3 yuanye yuanye 4096 2011-03-22 23:30 .cachedrwx------ 2 yuanye yuanye 4096 2011-03-22 23:24 .chewingdrwxr-xr-x 4 yuanye yuanye 4096 2011-03-22 23:30 .configdrwx------ 3 yuanye yuanye 4096 2011-03-22 22:31 .dbus-rw------- 1 yuanye yuanye 49 2011-03-24 16:54 .dmrc-rw------- 1 yuanye yuanye 16 2011-03-22 22:31 .esd_auth-rw-r--r-- 1 yuanye yuanye 357 2011-03-22 22:15 examples.desktopdrwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:15 .fontconfigdrwx------ 4 yuanye yuanye 4096 2011-03-24 16:54 .gconfdrwx------ 2 yuanye yuanye 4096 2011-03-24 16:56 .gconfd-rw-r----- 1 yuanye yuanye 0 2011-03-22 23:19 .gksu.lockdrwx------ 6 yuanye yuanye 4096 2011-03-22 23:20 .gnome2drwx------ 2 yuanye yuanye 4096 2011-03-22 22:32 .gnome2_privatedrwx------ 2 yuanye yuanye 4096 2011-03-22 22:31 .gnupgdrwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 22:32 .gstreamer-0.10-rw-r--r-- 1 yuanye yuanye 156 2011-03-24 16:55 .gtk-bookmarksdr-x------ 2 yuanye yuanye 0 2011-03-24 16:54 .gvfs-rw------- 1 yuanye yuanye 479 2011-03-24 16:54 .ICEauthoritydrwx------ 3 yuanye yuanye 4096 2011-03-22 23:30 .localdrwx------ 4 yuanye yuanye 4096 2011-03-22 23:29 .mozilladrwxr-xr-x 3 yuanye yuanye 4096 2011-03-22 22:32 .nautilus-rw-r--r-- 1 yuanye yuanye 675 2011-03-22 22:15 .profiledrwx------ 2 yuanye yuanye 4096 2011-03-24 16:54 .pulse-rw------- 1 yuanye yuanye 256 2011-03-22 22:31 .pulse-cookie-rw------- 1 yuanye yuanye 861 2011-03-22 23:30 .recently-used.xbeldrwx------ 3 yuanye yuanye 4096 2011-03-22 23:24 .scim-rw-r--r-- 1 yuanye yuanye 0 2011-03-22 22:35 .sudo_as_admin_successful drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 22:33 .update-manager-core drwx------ 2 yuanye yuanye 4096 2011-03-22 22:32 .update-notifier-rw------- 1 yuanye yuanye 117 2011-03-24 16:54 .Xauthority-rw-r--r-- 1 yuanye yuanye 3385 2011-03-24 16:56 .xsession-errorsdrwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 公共的drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 模板drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 视频drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 图片drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 文档drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 音乐drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 桌面b.利用cd 转到/bin,/sbin ,/etc ,/dev,再利用ls 列出各个目录的内容,如果"迷路",可以利用pwd 确定位置,或键入cd ,cd ~ 观察效果.cd ,cd ~的区别: 1. bash dnsdomainname mountpoint sleepbunzip2 dumpkeys mt sttybzcat echo mt-gnu subzcmp ed mv syncbzdiff egrep nano tailfbzegrep false nc tarbzexe fgconsole nc.traditional tempfilebzfgrep fgrep netcat touchbzgrep fuser netstat truebzip2 fusermount ntfs-3g ulockmgr_serverbzip2recover grep ntfs-3g.probe umountbzless gunzip open unamebzmore gzexe openvt uncompresscat gzip pidof unicode_startchgrp hostname ping vdirchmod ip ping6 whichchown kbd_mode ps zcatchvt kill pwd zcmpcp ld_static rbash zdiffcpio ln readlink zegrepdash loadkeys rm zfgrepdate login rmdir zforcedbus-cleanup-sockets ls rnano zgrepdbus-daemon lsmod run-parts zlessdbus-uuidgen mkdir sed zmoredd mknod setfont znewdf mktemp setupcondir more shdmesg mount sh.distrib2. acpi_available getty mii-tool resize_reiserfsalsa grub-install mkdosfs rmmodalsactl halt mke2fs routeapm_available hdparm mkfs rtacctapparmor_parser hwclock mkfs.bfs rtmonbadblocks ifconfig mkfs.cramfs runlevelblkid ifdown mkfs.ext2 sfdisk blockdev ifup mkfs.ext3 shadowconfig brltty init mkfs.ext4 shutdownbrltty-setup initctl mkfs.ext4dev slattachcfdisk insmod mkfs.minix sscrda installkernel mkfs.msdos startctrlaltdel ip mkfs.reiserfs start-stop-daemon debugfs ip6tables mkfs.vfat status debugreiserfs ip6tables-restore mkreiserfs stopdepmod ip6tables-save mkswap sulogin dhclient ipmaddr modinfo swapoff dhclient3 iptables modprobe swapon dhclient-script iptables-restore mount.fuse sysctldmsetup iptables-save mount.ntfs syslogddosfsck iptunnel mount.ntfs-3g tcdosfslabel isosize mount.vmhgfs telinitdumpe2fs iwconfig nameif tune2fse2fsck iwevent on_ac_power udevadme2image iwgetid pam_tally udevde2label iwlist parted umount.hale2undo iwpriv partprobe unix_chkpwd fdisk iwspy pccardctl unix_update findfs kbdrate pivot_root update-grubfsck killall5 plipconfig usplashfsck.cramfs klogd poweroff usplash_down fsck.ext2 ldconfig rarp usplash_write fsck.ext3 ldconfig.real raw vol_idfsck.ext4 logd readahead-list vstpfsck.ext4dev logsave readahead-watch wpa_action fsck.minix losetup reboot wpa_clifsck.msdos lrm-manager regdbdump wpa_supplicant fsck.nfs lsmod reiserfsckfsck.reiserfs lspcmcia reiserfstunefsck.vfat MAKEDEV resize2fs3. acpi login.defsadduser.conf logrotate.confadjtime logrotate.dalsa lsb-basealternatives lsb-base-logging.shanacrontab lsb-releaseapm ltrace.conf apparmor magicapparmor.d magic.mimeapport mailcapapt mailcap.orderat.deny manpath.configavahi mime.typesbash.bashrc mke2fs.confbash_completion modprobe.dbash_completion.d modules bindresvport.blacklist monoblkid.tab motdblkid.tab.old motd.tailbluetooth mtabbogofilter.cf mtools.confbonobo-activation nanorcbrlapi.key netscsid.confbrltty networkbrltty.conf NetworkManagerca-certificates networksca-certificates.conf nsswitch.confcalendar obex-data-server chatscripts openoffice checkbox.d optcompizconfig pam.conf ConsoleKit pam.dconsole-setup pangoconsole-tools papersizecron.d passwdcron.daily passwd-cron.hourly pcmciacron.monthly perlcrontab pmcron.weekly pnm2ppa.confcups PolicyKitdbus-1 popularity-contest.conf debconf.conf powerdebian_version pppdefault profiledefoma profile.ddeluser.conf protocolsdepmod.d pulse dhcp3 purple dictionaries-common pythondm python2.6 doc-base rc0.ddpkg rc1.de2fsck.conf rc2.d emacs rc3.d environment rc4.d esound rc5.d event.d rc6.d firefox-3.0 rc.localfonts rcS.d foomatic readahead fstab resolvconf fuse.conf resolv.conf gai.conf rmtgamin rpcgconf samba gdm sane.d gimp scim gnome screenrc gnome-app-install scsi_id.config gnome-system-tools securetty gnome-vfs-2.0 security gnome-vfs-mime-magic sensors.conf gre.d services groff sgmlgroup shadow group- shadow- grub.d shells gshadow skel gshadow- soundgtk-2.0 sshhal ssl hdparm.conf sudoers hesiod.conf sysctl.conf host.conf sysctl.d hostname syslog.conf hosts terminfo hosts.allow timezonehosts.deny tpvmlp.confhp ts.confifplugd ucf.confinit.d udevinitramfs-tools ufwinputrc updatedb.confiproute2 updatedb.conf.BeforeVMwareToolsInstallissue update-manager update-motd.dkbd update-notifierkernel usplash.confkernel-img.conf vimlaptop-mode vmware-toolsldap w3mld.so.cache wgetrcld.so.conf wodim.confld.so.conf.d wpa_supplicantlftp.conf X11libpaper.d xdglocale.alias xmllocaltime xulrunner-1.9logcheck zsh_command_not_foun4. adsp loop7 ram7 tty15 tty43 usbdev1.1_ep00agpgart lp0 ram8 tty16 tty44 usbdev1.1_ep81audio mapper ram9 tty17 tty45 usbdev2.1_ep00block mem random tty18 tty46 usbdev2.1_ep81bus midi rtc tty19 tty47 usbmon0cdrom1 mixer rtc0 tty2 tty48 usbmon1char net scd0 tty20 tty49 usbmon2console network_latency sda tty21 tty5 vcscore network_throughput sda1 tty22 tty50 vcs1cpu_dma_latency null sda2 tty23 tty51 vcs2disk oldmem sda5 tty24 tty52 vcs3dmmidi parport0 sequencer tty25 tty53 vcs4dsp pktcdvd sequencer2 tty26 tty54 vcs5ecryptfs port sg0 tty27 tty55 vcs6fd ppp sg1 tty28 tty56 vcs7fd0 psaux shm tty29 tty57 vcs8full ptmx snapshot tty3 tty58 vcsafuse pts snd tty30 tty59 vcsa1hpet ram0 sndstat tty31 tty6 vcsa2initctl ram1 sr0 tty32 tty60 vcsa3input ram10 stderr tty33 tty61 vcsa4kmem ram11 stdin tty34 tty62 vcsa5kmsg ram12 stdout tty35 tty63 vcsa6log ram13 tty tty36 tty7 vcsa7loop0 ram14 tty0 tty37 tty8 vcsa8loop1 ram15 tty1 tty38 tty9 vmciloop2 ram2 tty10 tty39 ttyS0 vsockloop3 ram3 tty11 tty4 ttyS1 xconsoleloop4 ram4 tty12 tty40 ttyS2 zeroloop5 ram5 tty13 tty41 ttyS3loop6 ram6 tty14 tty42 urandom区别:(二)基本操作1.用cp 将/usr/share 目录下的exercise 子目录连同目录下的文件拷贝到自己的主目录下,然后进入自己的exercise 目录:cp -r /usr/share ./.2.输入/输出重定向和cat,more 等显示命令的配合使用:a.输入cat 命令列出目录下longtext 文件中的内容;b.输入cat 命令列出目录下longtext 文件中的内容,是否发现一屏显示不完?c.使用more 命令列出longtext 的内容;d.输入cat hello.txt> hello2.txt,再输入cat hello.txt>>hello2.txt,再检查hello2.txt的内容有何变化;说明>与>>的区别。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

西安电子科技大学(2018年度)算法分析实验报告实验名称:渗透实验班级:1603012*名:**学号:***********实验一:渗透问题(Percolation)一、实验题目使用合并-查找(union-find)数据结构,编写程序通过蒙特卡罗模拟(Monte Carlo simulation)来估计渗透阈值的值。

给定由随机分布的绝缘材料和金属材料构成的组合系统:金属材料占多大比例才能使组合系统成为电导体?给定一个表面有水的多孔渗水地形(或下面有油),水将在什么条件下能够通过底部排出(或油渗透到表面)?科学家们已经定义了一个称为渗透(percolation)的抽象过程来模拟这种情况。

模型:我们使用N×N网格点来模型一个渗透系统。

每个格点或是open格点或是blocked格点。

一个full site是一个open格点,它可以通过一连串的邻近(左,右,上,下)open格点连通到顶行的一个open格点。

如果在底行中有一个full site格点,则称系统是渗透的。

(对于绝缘/金属材料的例子,open格点对应于金属材料,渗透系统有一条从顶行到底行的金属路径,且full sites格点导电。

对于多孔物质示例,open格点对应于空格,水可能流过,从而渗透系统使水充满open格点,自顶向下流动。

)问题:在一个著名的科学问题中,研究人员对以下问题感兴趣:如果将格点以空置概率p 独立地设置为open格点(因此以概率1-p被设置为blocked格点),系统渗透的概率是多少?当p = 0时,系统不会渗出; 当p=1时,系统渗透。

下图显示了20×20随机网格和100×100随机网格的格点空置概率p与渗滤概率。

当N足够大时,存在阈值p*,使得当p <p*,随机N⨯N网格几乎不会渗透,并且当p> p*时,随机N⨯N网格几乎总是渗透。

尚未得出用于确定渗滤阈值p*的数学解。

你的任务是编写一个计算机程序来估计p*。

Percolation数据类型:模型化一个Percolation系统,创建含有以下API的数据类型Percolation。

public class Percolation {public Percolation(int N) // create N-by-N grid, with all sites blockedpublic void open(int i, int j) // open site (row i, column j) if it is not alreadypublic boolean isOpen(int i, int j) // is site (row i, column j) open?public boolean isFull(int i, int j) // is site (row i, column j) full?public boolean percolates() // does the system percolate?public static void main(String[] args) // test client, optional}约定行i列j下标在1和N之间,其中(1, 1)为左上格点位置:如果open(), isOpen(), or isFull()不在这个规定的范围,则抛出IndexOutOfBoundsException例外。

如果N≤ 0,构造函数应该抛出IllegalArgumentException例外。

构造函数应该与N2成正比。

所有方法应该为常量时间加上常量次调用合并-查找方法union(), find(), connected(), and count()。

蒙特卡洛模拟(Monte Carlo simulation).要估计渗透阈值,考虑以下计算实验:•初始化所有格点为blocked。

•重复以下操作直到系统渗出:o在所有blocked的格点之间随机均匀选择一个格点(row i, column j)。

o设置这个格点(row i, column j)为open格点。

•open格点的比例提供了系统渗透时渗透阈值的一个估计。

例如,如果在20×20的网格中,根据以下快照的open格点数,那么对渗滤阈值的估计是204/400 = 0.51,因为当第204个格点被open时系统渗透。

50 open sites100 open sites150 open sites204 open sites通过重复该计算实验T次并对结果求平均值,我们获得了更准确的渗滤阈值估计。

令x t是第t次计算实验中open格点所占比例。

样本均值μ提供渗滤阈值的一个估计值;样本标准差σ测量阈值的灵敏性。

μ=x1+x2+⋯+x TT , σ2=(x1−μ)2+(x2−μ)2+⋯+(x T−μ)2T−1假设T足够大(例如至少30),以下为渗滤阈值提供95%置信区间:[μ−√T μ√T]我们创建数据类型PercolationStats来执行一系列计算实验,包含以下API。

public class PercolationStats {public PercolationStats(int N, int T) // perform T independent computational experiments on an N-by-N gridpublic double mean() // sample mean of percolation thresholdpublic double stddev() // sample standard deviation of percolation threshold public double confidenceLo() // returns lower bound of the 95% confidence interval public double confidenceHi() // returns upper bound of the 95% confidence interval public static void main(String[] args) // test client, described below}在N≤ 0或T≤ 0时,构造函数应该抛出ng.IllegalArgumentException例外。

此外,还包括一个main( )方法,它取两个命令行参数N和T,在N×N网格上进行T次独立的计算实验(上面讨论),并打印出均值μ、标准差σ和95%渗透阈值的置信区间。

使用标准库中的标准随机数生成随机数;使用标准统计库来计算样本均值和标准差。

Example values after creating PercolationStats(200, 100)mean() = 0.5929934999999997stddev() = 0.00876990421552567confidenceLow() = 0.5912745987737567confidenceHigh() = 0.5947124012262428Example values after creating PercolationStats(200, 100)mean() = 0.592877stddev() = 0.009990523717073799confidenceLow() = 0.5909188573514536confidenceHigh() = 0.5948351426485464Example values after creating PercolationStats(2, 100000)mean() = 0.6669475stddev() = 0.11775205263262094confidenceLow() = 0.666217665216461confidenceHigh() = 0.6676773347835391运行时间和内存占用分析。

使用quick-find算法(QuickFindUF.java from algs4.jar)实现Percolation数据类型。

进行实验表明当N加倍时对运行时间的影响;使用近似表示法,给出在计算机上的总时间,它是输入N和T的函数表达式。

使用weighted quick-union算法(WeightedQuickUnionUF.java from algs4.jar)实现Percolation 数据类型。

进行实验表明当N加倍时对运行时间的影响;使用近似表示法,给出在计算机上的总时间,它是输入N和T的函数表达式。

二、算法设计程序要求实现对一个NxN矩阵的连通性判断问题,则可以使用quick-find算法和加权quick-union算法来实现,因为算法中的数组是一维的,所以首要解决的问题就是将NxN矩阵中的点经过变换转换到一维数组中对应的位置来完成之后的算法求解。

将它们在连通分量数组中的编号依次设置为0~NxN-1。

为了之后检验连通性的问题,有一个非常巧妙的方法。

抽象出在矩阵的顶部有一个单独的注水口,它和第一行的所有点都是连通的,在矩阵的底部有一个出水口,它和最后一行的所有点是连通的,并分别将注水口和出水口在连通分量数组中的编号设为NxN和NxN+1。

按照题目的要求每次随机打开矩阵中的一个点,然后判断与它邻近的点(上下左右)是否已经被打开,若已经打开就将它们连接起来。

那么每次打开一个新的结点之后检验连通性,只需要检验注水口和出水口是否连通即可。

具体设计:设计Percolation类,分别使用quick-find和weight quick-union算法进行合并。

Percolation 类中设计open方法打开一个点,并将该点与其它相邻的点合并。

public class Percolation {private int matrixLength; //网格大小private boolean[] matrix; //记录方格是否打开数组private QuickFindUF qu; //合并查找类变量//或者:private WeightedQuickUnionUF wqu;private int virtualTop; //注水口private int virtualbottom; //出水口public Percolation(int N){if (N <= 0) {throw new IllegalArgumentException("length must be positive");}matrixLength = N;virtualTop = matrixLength * matrixLength;virtualbottom = matrixLength * matrixLength + 1;matrix = new boolean[N * N];qu = new QuickFindUF(N * N + 2);}//检查边界private void checkValidIndex(int row,int col){if(row <= 0 || row >matrixLength){throw new IndexOutOfBoundsException("row index out of bounds"); }if(col <= 0 || col >matrixLength){throw new IndexOutOfBoundsException("col index out of bounds"); }}//计算点(row i, col j)的一维坐标private int rowCol_to_real(int row,int col){return (row - 1) * matrixLength + col - 1;}//打开一个点public void open(int row,int col){checkValidIndex(row, col); //检查边界int real = rowCol_to_real(row, col); //转换成一维坐标if (matrix[real]) {return; //如果已经是打开的,就直接返回 }matrix[real] = true;if (row == 1) { //如果是第一行的情况,那么让他连接top的虚拟点 qu.union(real, virtualTop);}if (row == matrixLength) { //如果是最后一行的情况,那么让他连接bottom的虚拟点qu.union(real, virtualbottom);}int neighbor; //记录相邻点的坐标//判断周围的四个点是否是打开的,如果是的话就连接if (row > 1) { // upneighbor = rowCol_to_real(row - 1, col);if (matrix[neighbor]) {qu.union(real, neighbor);}}if (row < matrixLength) { // downneighbor = rowCol_to_real(row + 1, col);if (matrix[neighbor]) {qu.union(real, neighbor);}}if (col > 1) { // leftneighbor = rowCol_to_real(row, col - 1);if (matrix[neighbor]) {qu.union(real, neighbor);}}if (col < matrixLength) { // rightneighbor = rowCol_to_real(row, col + 1);if (matrix[neighbor]) {qu.union(real, neighbor);}}}public boolean isOpen(int row,int col){ //判断这个点是不是已打开的 checkValidIndex(row, col);return matrix[rowCol_to_real(row, col)];}public boolean isPercolated(){ //判断网格是否渗透 return qu.isConnect(virtualTop, virtualbottom);}}QuickFindUF算法核心:每个点所在连通分量记录在以该点为下标的数组中,find方法的复杂度低,但合并时要遍历数组中的所有点,将其中一个连通分量中所有点的连通分量记录改为另一个连通分量,union方法的复杂度高。

相关文档
最新文档