西安电子科技大学算法上机报告
上机实验报告(精选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实验报告及大作业学院:电子信息工程班级:学号:姓名:实验一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的内容有何变化;说明>与>>的区别。
西电算法导论上机实验报告
算法导论上机实验报告册班级:xxxxxx学号:xxxxxxx 姓名:xxxx 教师:xxxxxx目录实验一排序算法 (1)题目一: (1)1、题目描述: (1)2、所用算法: (1)3、算法分析: (1)4、结果截图: (1)5、总结: (2)题目二: (3)1、题目描述: (3)2、所用算法: (3)3、算法分析: (3)4、结果截图: (3)5、总结: (4)题目三: (4)1、题目描述: (4)2、所用算法: (4)3、算法分析: (5)4、结果截图: (5)5、总结: (5)题目四: (6)1、题目描述: (6)3、算法分析: (6)4、结果截图: (6)5、总结: (7)实验二动态规划 (7)题目一: (7)1、题目描述: (7)2、所用策略: (7)3、算法分析: (7)4、结果截图: (8)5、总结: (8)题目二: (9)1、题目描述: (9)2、所用策略: (9)3、算法分析: (9)4、结果截图: (9)5、总结: (10)题目三: (10)1、题目描述: (10)2、所用策略: (10)3、算法分析: (10)4、结果截图: (11)题目四: (12)1、题目描述: (12)2、所用策略: (12)3、算法分析: (12)4、结果截图: (12)5、总结: (13)题目五: (13)1、题目描述: (13)2、所用策略: (13)3、算法分析: (13)4、结果截图: (14)5、总结: (14)实验三贪心算法 (14)题目一: (14)1、题目描述: (14)2、所用策略: (14)3、算法分析: (14)4、结果截图: (15)5、总结: (16)题目二: (16)1、题目描述: (16)3、算法分析: (16)4、结果截图: (17)5、总结: (17)题目三: (17)1、题目描述: (17)2、所用算法: (18)3、算法分析: (18)4、结果截图: (18)5、总结: (19)题目四: (19)1、题目描述: (19)2、所用算法: (19)3、算法分析: (19)实验四回溯法 (19)题目一: (19)1、题目描述: (20)2、所用策略: (20)3、算法分析: (20)题目二: (21)1、题目描述: (21)2、所用策略: (21)实验一排序算法题目一:1、题目描述:描述一个运行时间为θ(nlgn)的算法,给定n个整数的集合S和另一个整数x,该算法能确定S中是否存在两个其和刚好为x的元素。
C程序上机实验报告(西电版)
西安电子科技大学—C程序设计实验报告院系:人文学院姓名:学号:专业:C程序设计上机实验报告1. 实验环境:软件系统:Windows XP SP3Microsoft Visual C++6.0硬件系统:联想台式机2. 实验目的:掌握如何编辑、编译、链接调试运行c程序3. 实验内容:(1)掌握顺序结构程序设计.(2)掌握选择结构程序设计(if 和switch语句的用法)(3)循环结构程序设计(while, do while, for语句的用法)。
(4)掌握数组的定义、输入和输出的方法,字符数组、字符串函数的使用。
(5)了解函数的定义,熟悉函数实参与形参的“值传递”方式,掌握函数的嵌套调用和递归调用方法。
4. 实验要求:(1)输入编写的源程序,检查程序有无错误(语法和逻辑错误),有则改之。
(2)编译和连接,仔细分析编译信息,如有错误应找出原因并改正。
(3)运行程序,输入数据,分析结5实验结果:(1)两个数相加并显示其结果#include<stdio.h>#include<stdlib.h>main( ){int number;float amount;number=100;amount=30.75+70.35;printf(“%d\n”,number);printf(“%5.2f”,amount);system("pause");return 0;}输出结果:100101.10请按任意键继续……实验心得:代码行10是给变量赋值。
整数值100赋给了变量number,在代码行12两个实数相加的结果赋给了变量amount。
而语句number=100;amount=30.75+70.35;称为赋值语句,其是以分号结束。
打印语句:printf(“%d\n”,number);包含两给参数。
(2)整型数据相除。
#include<stdio.h>void main(){int i=100,j=40;float f;f=i/j;printf("f=%f\n",f);}运行结果:f=2.000000实验心得:上述程序中f的结果为2.0,小数部分丢失。
西电最优化上机报告(大作业)
上机报告一.最速下降法算法简述:1.在本例中,先将最速下降方向变量赋一个值,使其二范数满足大于ε的迭代条件,进入循环。
2.将函数的一阶导数化简,存在一个矩阵,将其hesse矩阵存在另一个矩阵。
依照公式求出α,进而求出下一任迭代的矩阵初值。
循环内设置一个计数功能的变量,统计迭代次数。
3.求其方向导数的二范数,进行判别,若小于ε,则跳出循环,否则将继续迭代。
4.显示最优解,终止条件,最小函数值。
心得体会:最速下降法的精髓,无疑是求梯度,然后利用梯度和hesse矩阵综合计算,求解下一个当前最优解。
但是,要求函数是严格的凸函数,结合严格凸函数的大致图像,这就给初值的选取提供了一点参考。
例如在本例中,由于含有两个变量的二次方之和,结合大致图像,想当然的,初值的选取应当在原点附近;又因为变量的二次方之和后面,还减去了变量的一次形式和一次混合积,所以初值的选取应该再向第一象限倾斜。
综合以上考量,第一次选取(1,1)作为初值,判别精度方面,取到千分位,暂定为0.001。
运行以后,结果显示迭代了25次,最优解为(3.9995,1.9996),终止条件为5.4592e-04,目标函数为-8.0000。
这个结果已经相当接近笔算结果。
整体的运行也比较流畅,运算速度也比较快。
第二次取值,决定保留判别精度不变,将初值再适当向第一象限倾斜,取(2,2)作为初值,运行后,显示只迭代了11次!最优结果显示(3.9996,1.9997),终止条件为3.6204e-04,最优解-8.0000。
可见,最优结果更接近理想值,终止条件也变小了,最关键的是,迭代次数减少至第一次的一半以下!这说明以上初选取的方向是对的!第三次再进行初值细化,判别精度仍然不变,初值取(3,3)。
结果令人兴奋,只迭代了四次!最优解已经显示为(4.0000,2.0000),终止条件为2.4952e-04,目标函数-8.0000。
第四次,判别精度不变,取初值(4,4)。
西电软院算法上机报告
算法上机报告学号:13121234姓名:陈恒实验一一、实验内容1.编写程序实现书上2.3.7:运行时间为nlgn的算法确定n个整数的集合中是否存在两个数的和刚好为x。
先对n个整数的集合进行排序。
使用快速排序,时间复杂度即是nlgn,然后计算两数之和,可以知道快速排序(从小到大)后第一个元素begin为最小,最后一个元素end最大。
所以用最小和最大相加和x比较,大于x即是end太大,小于x就是begin太小。
一直循环直到begin==end时还没有就不存在了。
2.实现优先级队列。
用堆排序和一个结构体实现即可。
Java实现用类代替结构体。
并未编写测试用例。
3.实现快速排序。
问题1就是快速排序。
最大数比较是有序的数组,例如123456789.最小的比较是每次partition都能分成恰好两半,例如132。
n个相同的数快排比较计算次数n*(n-1)/2.原理:每次分一半都要从头到尾(比较n-1次)比较一次,最后分到每组只有2个为止(即是分n/2次)。
4.找两个已排序不同数组之间第k大的数。
有a,b两个数组。
把 A ,B平均分为前后两个部分,前部分有 x 个元素,后部分有 n-x 个元素(比如,由于 A 是有序的,所以后一部分的所有元素大于前一部分)。
A[x] = A的后一部分的第一个元素)。
然后使用分枝-限界法和递归。
每次比较k和a.size/2+b.size/2以及a[x]于b[x]的大小。
进而缩小其中一个数组一半大小。
实验截图:第一个:题目1和3 第二个:题目4,优先级队列没有写主方法二、实验心得本次实验对排序几个关键算法进行了实现,还练习了别的几个问题。
本来算法是很简单的,但是由于数组下标的原因总是出现越界问题。
说明在具体编程的时候还缺乏思考,需要多加训练。
还有就是选择分支的时候需要写下来不然光去想是很难把情况完全列出来的。
实验二一、实验内容以动态规划算法解决以下几个问题动态规划思想是找到并求解问题的最优子结构,然后递归定义最优子结构,再用自底向上的方法去构建一张表,最后用查表找到解。
西安电子科技大学数字图像处理上机报告
数字图像处理上机报告专业:电子信息工程班级:020915学号:02091478姓名:陈步华实验一1、实验要求产生右图所示图像 f1(m,n),其中图像大小为256×256,中间亮条128×32,暗处=0,亮处=100。
对其进行FFT:①同屏显示原图f1(m,n)和FFT(f1)的幅度谱图;②若令f2(m,n)=(-1)m+n f1(m,n),重复以上过程,比较二者幅度谱的异同,简述理由;③若将f2(m,n)顺时针旋转90 度得到f3(m,n),试显示FFT(f3)的幅度谱,并与FFT(f2)的幅度谱进行比较;④若将f1(m,n) 顺时针旋转90 度得到f4(m,n),令f5(m,n)=f1(m,n)+f4(m,n),试显示FFT(f5)的幅度谱,并指出其与 FFT(f1)和FFT(f4)的关系;⑤若令f6(m,n)=f2(m,n)+f3(m,n),试显示FFT(f6)的幅度谱,并指出其与 FFT(f2)和FFT(f3)的关系,比较FFT(f6)和FFT(f5)的幅度谱。
2.实验结果①显示的f1(m,n)和FFT(f1)的幅度谱图如下图所示:②FFT(f1)和FFT(f2)同屏显示如图:分析: f2(m,n)=(-1)n m +f1(m,n)⇔F (u-2N ,v-2N),即通过给图像f1(m,n)乘以(-1)n m +可使f1(m,n)从原点(0,0)移到中心(N/2,N/2),从而实现频谱的中心化。
③分析:f3(m,n)为f2(m,n)图像左转90°而得,f3(m,n)的FFT转换图像也是f2(m,n)的FFT转换图像左转90°所得。
④⑤分析:将f5与f6的幅度图像作比较得f6也是对f5实现了频谱中心化实验二1、实验要求产生教材104 页题图4.18(右图)所示的二值图像(白为1,黑为0),编程实现习题4.18 所要求的处理(3´3 的平均滤波和中值滤波)功能(图像四周边界不考虑,处理结果按四舍五入仍取0 或1),显示处理前后的图像,比较其异同。
西电数据结构大作业
题目:数据结构上机报告学院:电子工程学院专业:信息对抗技术学生姓名:甘佳霖学号:14020310092西安电子科技大学数据结构课程实验报告实验名称线性表电子工程学院 1402031 班Array姓名甘佳霖学号 14020310092同作者实验日期 2017 年 3 月 18 日实验一线性表一、实验目的1.熟悉线性表的顺序和链式存储结构2.掌握线性表的基本运算3.能够利用线性表的基本运算完成线性表应用的运算二、实验要求1.设有一个线性表E={e1, e2, … , e n-1, e n},设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E’={ e n, e n-1 , … , e2 , e1 },要求逆线性表占用原线性表空间,并且用顺序表和单链表两种方法表示,分别用两个程序来完成。
2.已知由不具有头结点的单链表表示的线性表中,含有三类字符的数据元素(字母、数字和其他字符),试编写算法构造三个以循环链表表示的线性表,使每个表中只含有同一类的字符,且利用原表中的结点空间,头结点可另辟空间。
三、设计思路1.顺序表做逆置操作时将对应的首尾元素位置交换,单链表的指针end指向链表的末尾,指针start指向链表头结点,指针s用来找到指向end节点的节点,将指向链表末尾和头结点的存储内容交换,然后头结点指针指向下一节点,s指针从start节点开始遍历寻找指向end 指针的节点,并将end指针赋值为s指针,就完成了单链表的逆置,可以看出单链表和顺序表都可以完成线性表的逆置。
2.分解单链表的实现思路是首先新建3个循环链表,然后顺序遍历单链表,ASCII码判断链表中的元素属于哪一类元素,然后将这个元素添加到对应的循环链表中,从而实现分解单链表的功能。
四、运行结果1.单链表逆置:顺序表逆置:2.分解单链表五、实验总结线性表和单链表是最简单的、最常用的数据结构类型,是实现其他数据结构的基础,熟悉对它们的操作有助于后面对数据结构课程的学习和理解。
西电数字信号处理上机实验报告
数字信号处理上机实验报告14020710021 张吉凯第一次上机实验一:设给定模拟信号()1000t a x t e -=,t 的单位是ms 。
(1) 利用MATLAB 绘制出其时域波形和频谱图(傅里叶变换),估计其等效带宽(忽略谱分量降低到峰值的3%以下的频谱)。
(2) 用两个不同的采样频率对给定的()a x t 进行采样。
○1()()15000s a f x t x n =以样本秒采样得到。
()()11j x n X e ω画出及其频谱。
○2()()11000s a f x t x n =以样本秒采样得到。
()()11j x n X e ω画出及其频谱。
比较两种采样率下的信号频谱,并解释。
(1)MATLAB 程序:N=10; Fs=5; T s=1/Fs;n=[-N:T s:N];xn=exp(-abs(n)); w=-4*pi:0.01:4*pi; X=xn*exp(-j*(n'*w)); subplot(211) plot(n,xn);title('x_a(t)时域波形');xlabel('t/ms');ylabel('x_a(t)'); axis([-10, 10, 0, 1]); subplot(212);plot(w/pi,abs(X)); title('x_a(t)频谱图');xlabel('\omega/\pi');ylabel('X_a(e^(j\omega))');ind = find(X >=0.03*max(X))*0.01; eband = (max(ind) -min(ind)); fprintf('等效带宽为%fKHZ\n',eband); 运行结果:等效带宽为12.110000KHZ(2)MATLAB程序:N=10;omega=-3*pi:0.01:3*pi;%Fs=5000Fs=5;T s=1/Fs;n=-N:T s:N;xn=exp(-abs(n));X=xn*exp(-j*(n'*omega));subplot(2,2,1);stem(n,xn);grid on;axis([-10, 10, 0, 1.25]); title('时域波形(f_s=5000)');xlabel('n');ylabel('x_1(n)');subplot(2,2,2);plot(omega/pi,abs(X));title('频谱图(f_s=5000)');xlabel('\omega/\pi');ylabel('X_1(f)');grid on;%Fs=1000Fs=1;T s=1/Fs;n=-N:T s:N;xn=exp(-abs(n));X=xn*exp(-j*(n'*omega));subplot(2,2,3);stem(n,xn);grid on;axis([-10, 10, 0, 1.25]); title('时域波形(f_s=1000)');xlabel('n');ylabel('x_2(n)');grid on;subplot(2,2,4);plot(omega/pi,abs(X));title('频谱图(f_s=1000)');xlabel('\omega/\pi');ylabel('X_2(f)');grid on;运行结果:实验二:给定一指数型衰减信号()()0cos 2at x t e f t π-=,采样率1s f T=,T 为采样周期。
西电软计技术上机
西安电子科技大学机电工程学院软件技术大作业任课老师许威上机报告一、上机目的1.熟悉线性表,链表,队列,二叉树等数据结构2.学习利用C语言实现多种数据结构的建立和多种操作(插入,删除等)3.在编程过程中学习程序的调试方式二、上机内容一共完成5题——1,2,4,5,61题:设有一个由正整数组成的无序单链表,编写完成下列功能的算法:①找出最小值结点,且打印该数值;②若该数值是奇数,则将其与直接后继结点的数值交换;③若该数值是偶数,则将其直接后继结点删除。
2题:编一程序:①建立一个数据域为1至10的带头结点的链表;②将此链表就地逆转。
4题:某百货公司仓库中有一批电视机,试按价格从高到底的次序建立一个循环链表,每个结点有价格、数量和指针三个域。
现新到10台价格为4000元的电视机,修改原链表并输出修改后链表的所有内容。
5题:假设称正读反读都相同的字符序列为回文。
例如,‘abba’,‘abcba’都是回文,‘ababab’不是回文,试编写程序判别从标准输入读入的以’@’为结束符的字符序列是否是回文。
6题:试设计一个程序,求二叉树的结点数目和叶子结点数目。
三、设计说明1题1)用带头结点的单链表是实现2)结点声明typedef struct node{int data;struct node *next;}linklist3)共定义了5个函数CREAT——建立单链表函数DELETE——删除结点函数SEARCH——查找数据域最小的结点函数基本思想:定义两个指针,其中s指针始终记录值较小的结点,并与p所指结点比较,直到将整个链表比较完毕。
EXCHANGE ——交换结点值函数PRINT——打印单链表,显示结点数据值函数4)输入说明:以为单链表由正整数组成,所以以输入0为输入结束标志。
2题1)用带头结点的单链表实现2)共定义了3个函数CREAT——建立单链表REVERSE——将单链表逆置基本思想:有3个指针r,s。
r指向单链表尾部,s指向单链表头部,s为用于交换结点数据值的中间量。
西安电子科技大学数字信号处理上机报告
xbn=[1]; xcn=ones(1,10); han=ones(1,10);
2
西安电子科技大学 电子工程学院 02091478 陈步华
hbn=[1,2.5,2.5,1]; yn=conv(xbn,hbn); %计算信号 xb(n)通过系统 hb(n)的响应 y(n) n1=0:length(yn)-1; n2=0:length(hbn)-1; subplot(2,1,1);stem(n1,yn,'.') %绘制 y(n)的时域特性曲线 xlabel('n');ylabel('y(n)') title('y(n)的时域特性曲线') subplot(2,1,2);stem(n2,hbn,'.') %绘制 hb(n)的时域特性曲线 xlabel('n');ylabel('hb(n)') title('hb(n)的时域特性曲线')
subplot(2,1,2);
plot(w/pi,angle(Hb)); xlabel('\omega/π');ylabel('相位') title('DTFT[hb(n)]的相位');
zn=conv(xcn,han); %观察系统 ha(n)对信号 xc(n)的响应特性
figure(4)
n3=[0:length(zn)-1];
2、实验步骤
8ቤተ መጻሕፍቲ ባይዱ
西安电子科技大学 电子工程学院 02091478 陈步华
(1) 复习 DFT 的定义、 性质和用 DFT 作谱分析的有关内容。 (2) 复习 FFT 算法原理与编程思想, 并对照 DIT-FFT 运算流图和程序框图, 读懂 本实验提供的 FFT 子程序。 (3) 编制信号产生子程序, 产生以下典型信号供谱分析用:
计算方法实验上机报告(完整版)
简单迭代法#include<stdio.h>#include<math.h>#define x0 3.0#define MAXREPT 1000#define EPS 1E-6#define G(x) pow(12*x+sin(x)-1,1.0/3)void main(){int i;double x_k=x0,x_k1=x0;printf("k\txk\n");for(i=0;i<MAXREPT;i++){printf("%d\t%g\n",i,x_k1);x_k1=G(x_k);if (fabs(x_k1-x_k)<EPS){printf("THE ROOT IS x=%g,k=%d\n",x_k1,i);return;}x_k=x_k1;}printf("AFTER %d repeate,no solved.\n",MAXREPT);}结果牛顿迭代法一#include<stdio.h>#include<math.h>#define x0 3.0#define MAXREPT 1000#define EPS 1E-6#define G(x) x-(pow(x,3)-sin(x)-12*x+1)/(3*pow(x,2)-cos(x)-12) void main(){int i;double x_k=x0,x_k1=x0;printf("k\txk\n");for(i=0;i<MAXREPT;i++){printf("%d\t%g\n",i,x_k1);x_k1=G(x_k);if (fabs(x_k1-x_k)<EPS){printf("THE ROOT IS x=%g,k=%d\n",x_k1,i);return;}x_k=x_k1;}printf("AFTER %d repeate,no solved.\n",MAXREPT);}结果埃特金加速法#include<stdio.h>#include<math.h>#define x0 3.0#define MAXREPT 1000#define EPS 1E-6#define G(x) (pow(x,3)-sin(x)+1)/12void main(){int i;double x1=x0,x2=x0;double z,y;printf("k\tx1\tx2\txk\n");for(i=0;i<MAXREPT;i++){if(i==0)printf("%d\t\t\t%g\n",i,x2);elseprintf("%d\t%g\t%g\t%g\n",i,y,z,x2);y=G(x1);z=G(y);x2=z-((z-y)*(z-y))/(z-2*y+x1);if (fabs(x2-x1)<EPS){printf("THE ROOT IS x=%g,k=%d\n",x2,i);return;}x1=x2;}printf("AFTER %d repeate,no solved.\n",MAXREPT);} 结果牛顿迭代法二#include<stdio.h>#include<math.h>#define x0 1.5#define MAXREPT 1000#define EPS 1E-6#define G(x) x-(pow(x,3)+pow(x,2)-3*x-3)/(3*pow(x,2)+2*x-3) void main(){int i;double x_k=x0,x_k1=x0;printf("k\txk\n");for(i=0;i<MAXREPT;i++){printf("%d\t%g\n",i,x_k1);x_k1=G(x_k);if (fabs(x_k1-x_k)<EPS){printf("THE ROOT IS x=%g,k=%d\n",x_k1,i);return;}x_k=x_k1;}printf("AFTER %d repeate,no solved.\n",MAXREPT);}结果弦截法#include<stdio.h>#include<math.h>#define x0 0#define x1 1.5#define MAXREPT 1000#define EPS 1E-6#define G(x) pow(x,3)+pow(x,2)-3*x-3void main(){int i;double x_k=x0,x_k1=x1,x_k2=0;double y,z;printf("k\txk\n");for(i=0;i<MAXREPT;i++){printf("%d\t%g\n",i,x_k2);y=G(x_k);z=G(x_k1);x_k2=x_k1-(z*(x_k1-x_k))/(z-y);if (fabs(x_k2-x_k1)<EPS){printf("THE ROOT IS x=%g,k=%d\n",x_k2,i);return;}x_k=x_k1;x_k1=x_k2;}printf("AFTER %d repeate,no solved.\n",MAXREPT); } 结果高斯顺序消元法#include<stdio.h>#include<math.h>#define N 4static double aa[N][N+1]={{2,4,0,1,1},{3,8,2,2,3},{1,3,3,0,6},{2,5,2,2,3}}; int gauss(double a[][N+2],double x[]);void putout(double a[][N+2]);void main(){int i,j,det;double a[N+1][N+2],x[N+1];for(i=1;i<=N;i++)for(j=1;j<=N+1;j++)a[i][j]=aa[i-1][j-1];det=gauss(a,x);if(det!=0)for(i=1;i<=N;i++)printf(" x[%d]=%g",i,x[i]);printf("\n");}int gauss(double a[][N+2],double x[]){int i,j,k;double c;putout(a);for(k=1;k<=N-1;k++){ if(fabs(a[k][k])<1e-17){printf("\n pivot element is 0.fail!\n");return 0;}for(i=k+1;i<=N;i++){c=a[i][k]/a[k][k];for(j=k;j<=N+1;j++){a[i][j]=a[i][j]-c*a[k][j];}}putout(a);}if(fabs(a[N][N])<1e-17){printf("\n pivot element is 0.fail!\n");return 0;}for(k=N;k>=1;k--){x[k]=a[k][N+1];for(j=k+1;j<=N;j++){x[k]=x[k]-a[k][j]*x[j];}x[k]=x[k]/a[k][k];}return(1);}void putout(double a[][N+2]){for(int i=1;i<=N;i++){for(int j=1;j<=N+1;j++)printf("%-15g",a[i][j]);printf("\n");}printf("\n");}结果雅克比迭代法#include<stdio.h>#include<math.h>#define N 5#define EPS 0.5e-4static double aa[N][N]={{4,-1,0,-1,0},{-1,4,-1,0,-1},{0,-1,4,-1,0},{-1,0,-1,4,-1},{0,-1,0,-1,4}}; static double bb[N]={2,1,2,1,2};void main(){int i,j,k,NO;double a[N+1][N+1],b[N+1],x[N+1],y[N+1];double d,sum,max;for(i=1;i<=N;i++){for(j=1;j<=N;j++)a[i][j]=aa[i-1][j-1];b[i]=bb[i-1];}printf("\n 请输入最大迭代次数(尽量取大值!)NO:");scanf("%d",&NO);printf("\n");for(i=1;i<=N;i++)x[i]=0;k=0;printf(" k",' ');for(i=1;i<=N;i++)printf("%8cx[%d]",' ',i);printf("\n 0");for(i=1;i<=N;i++)printf("%12.8g",x[i]);printf("\n");do{for(i=1;i<=N;i++){sum=0.0;for(j=1;j<=N;j++)if(j!=i) sum=sum+a[i][j]*x[j];y[i]=(-sum+b[i])/a[i][i];}max=0.0;for(i=0;i<=N;i++){d=fabs(y[i]-x[i]);if(max<d) max=d;x[i]=y[i];}printf("%6d",k+1);for(i=1;i<=N;i++)printf("%12.8g",x[i]);printf("\n");k++;}while((max>=EPS)&&(k<NO));printf("\nk=%d\n",k);if(k>=NO) printf("\nfail!\n");elsefor(i=1;i<=N;i++)printf("x[%d]=%g\t",i,x[i]);}结果拉格朗日插值多项式#include<stdio.h>#include<math.h>#define N 4doublex[N]={0.56160,0.56280,0.56401,0.56521},y[N]={0.82741,0.82659,0.82577,0.82495}; void main(){double x=0.5635;double L(double xx);double lagBasis(int k,double xx);void output();output();printf("\n近似值L(%g)=%g\n",x,L(x));}double lagBasis(int k,double xx){double lb=1;int i;for(i=0;i<N;i++)if(i!=k) lb*=(xx-x[i])/(x[k]-x[i]);return lb;}double L(double xx){double s=0;int i;for(i=0;i<=N;i++)s+=lagBasis(i,xx)*y[i];return s;}void output(){int i;printf("\n各节点信息:\nxi:");for(i=0;i<N;i++)printf("\t%g",x[i]);printf("\nyi:");for(i=0;i<N;i++)printf("\t%g",y[i]);}结果牛顿插值多项式#include <math.h>#include <stdio.h>int a;#define M 4double x[M+1]={0.4,0.55,0.65,0.8,0.9},y[M+1]={0.41075,0.57815,0.69675,0.88811,1.02652}; void main(){double x;printf("输入x=");scanf("%lf",&x);printf("次数:");scanf("%d",&a);double N(double xx,int a);void output();output();printf("\n%d次牛顿插值多项式N(%g)=%g\n",a,x,N(x,a));}double N(double xx,int a){double s=y[0],d=1;int i,j;double df[M+1][M+1];for(i=0;i<=M;i++)df[i][0]=y[i];for(j=1;j<=a;j++)for(i=j;i<=a;i++)df[i][j]=(df[i][j-1]-df[i-1][j-1])/(x[i]-x[i-j]);printf("\nx\tf(x)\t");for(j=1;j<=a;j++) printf("%5d阶",j);for(i=0;i<=a;i++){printf("\n%g\t%g",x[i],y[i]);for(j=1;j<=i;j++)printf("\t%7.5g",df[i][j]);}for(i=1;i<=a;i++){d*=(xx-x[i-1]);s+=df[i][i]*d;}return s;}void output(){int i;printf("\n各节点信息:\nxi:");for(i=0;i<=M;i++)printf("\t%7g",x[i]);printf("\nyi:");for(i=0;i<=M;i++)printf("\t%7g",y[i]);}结果复合梯形公式#include<stdio.h>#include<math.h>#define f(x) 1/(x*x+1)#define Pi 3.1415926void main(){double a=0,b=1;double T,h,x;int n,i;printf("please input n:");scanf("%d",&n);h=(b-a)/n;x=a;T=0;for(i=1;i<n;i++){x+=h;T+=f(x);}T=(f(a)+2*T+f(b))*h/2;printf("T(%d)=%g\n",n,T);printf("The exact value is %g\n",Pi/4);}复合辛普森公式#include<stdio.h>#include<math.h>#define f(x) 1/(1+x*x)#define Pi 3.1415926void main(){double a=0,b=1;double S,h,x;int n,i;printf("please input Even n:");scanf("%d",&n);h=(b-a)/n;x=a; S=0;for(i=1;i<n;i++){x+=h;if(i%2==0) S+=2*f(x);else S+=4*f(x);}S=(f(a)+S+f(b))*h/3;printf("S(%d)=%g\n",n,S);printf("The exact value is %g\n",Pi/4);}龙贝格公式加速#include<stdio.h>#include<math.h>#define f(x) sin(x)/(1+x)#define M 3void main(){double a=0,b=1;double Long(double a,double b);printf("近似值I=%g\n",Long(a,b));}double Long(double a,double b){int n=1,i=1,j=1;double T[M+1][M+1],h,x,sum;h=b-a;T[0][0]=(f(a)+f(b))/2;for(j=1;j<=3;j++){x=a;h/=2;n*=2;sum=0;for(i=1;i<=n;i+=2){x=a+i*h;sum+=f(x);}T[j][0]=T[j-1][0]/2+h*sum;}for(i=1;i<=M;i++)for(j=1;j<=i;j++){T[i][j]=(pow(4,j)*T[i][j-1]-T[i-1][j-1])/(pow(4,j)-1);}printf("k\tT0\tT1\tT2\tT3\n");for(i=0;i<=M;i++){printf("%d",i);for(j=0;j<=i;j++)printf(" %g",T[i][j]);printf("\n");}return T[M][M];}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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方法的复杂度高。