鉴于大家对Java类作品十分关注,我们编辑小组在此为大家搜集整理了“基于JAVA的算法的演示系统的设计与实现”一文,供大家参考学习!
客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn |
算法演示系统详细功能说明 一、 引言 本项目要做的是一个算法演示系统,这6种算法都是基于概率的算法。 (1) 数值概率计算:PI(π)的计算 (2) 在一个数组中找到“a”使用Las Vegas算法 (3) 在一个数组中找到“a”使用Monte Carlo算法。 (4) 快速排序:Las Vegas算法的代表。 (5) 验证两个数组的乘积是否正确,即输入A,B,C三个数组判断C==AxB? : 使用Monte Carlo 算法。 (6) 商旅问题 : 使用概率算法简化求解过程。 这6种算法选题是有规律的,先从基本的概率数值计算,再到简单的在一个数组中找到“a”的算法引入,之后分别举2个例子来详细说明Las Vegas和Monte Carlo算法。最后是比较难的商旅问题。 这6种算法的基本思路及伪代码我都会给出。 二、 系统语言要求: 需要使用Java语言来完成。(试用JFrame,JPanel等等那些GUI) 三、 系统界面: 界面大致就是这个样子,主要分为6个比较大的模块。 (1) 左上角的选择算法。 (2) 右上角的代码展示区(不可编辑区域)。 (3) 图像演示区 (4) 属性修改区 (5) 属性观察窗口 (6) 功能按钮栏 只要有这6各部分即可,不必拘束于图中给的布局方式。 四、 各个模块功能说明: 算法选择区:可以用来选择以上6种算法,选择不同的算法,相应的代码区,图像演示区,属性修改区,属性观察窗口里的内容要相应的变化。 代码演示区:里面的代码为当前算法的核心代码。 图像演示区:里面显示的内容为当前算法的算法演示。 属性修改区:里面显示的内容为当前算法的可修改属性,可修改几个核心的变量即可。 这种修改不需要是即时的,修改将对下次算法运行产生影响。 观察窗口:可以显示出当前执行代码段内所有变量的值。 按钮栏: 重置:终止当前正在执行的算法,回归到初始状态,清空算法图像演示区里的图像,并且修改变量值为属性修改区里的数值。 演示模式:在该模式下程序(图像演示区)将以适当的速度演示算法。在该模式下只有暂停和继续两个按钮有效。 暂停:暂停演示模式下的算法。 继续:继续刚刚暂停的算法。 单步执行模式:点击后,进入单步执行模式,在该模式下只有下一步按钮有效。 下一步:执行下一条代码演示区里的算法的语句,并且相应的代码段变红:变红的代码为刚刚执行过的代码。 五、 对于每个算法所要演示的内容介绍: (1) 数值概率计算:PI(π)的计算 图中已经给出: 算法的思想是: 设有一半径为r的圆及其外切四边形。向该正方形随机地投掷n个点。设落入圆内的点数为k。由于所投入的点在正方形上均匀分布,因而所投入的点落入圆内的概率为 。所以当n足够大时,k与n之比就逼近这一概率。从而
其实就是 再一倒就出来了 下面是参考代码: public double darts(int n) { // 用随机投点法计算p值 int k=0; for (int i=1;i <=n;i++) { double x=dart.fRandom(); double y=dart.fRandom(); if ((x*x+y*y)<=1) k++; } return 4*k/(double)n; } (2) 在一个数组中找到“a”使用Las Vegas算法 Input: An array of n elements, in which half are '' a ''s and the other half are '' b ''s. 一个有n个元素数组的数组,一般是‘a’一半是‘b’ Output: Find an '' a '' in the array. 找到数组中的‘a’ 伪代码: findingA_LV(array A, n) begin repeat Randomly select one element out of n elements. until''a'' is found end 该算法一定成功,但效率是不确定的。 (3) 在一个数组中找到“a”使用Monte Carlo算法。 伪代码: findingA_MC(array A, n) begin i=1 repeat Randomly select one element out of n elements. i= i + 1 until i=k end 根据调整k的值 可以控制该算法的成功概率。 (4) 快速排序:Las Vegas算法的代表。 快速排序,不需多解释,但是要随机的选取index for the pivot 快速排序的演示过程,请参见 myeducs.cn (5) 验证两个数组的乘积是否正确,即输入A,B,C三个数组判断C==AxB? : 使用Monte Carlo 算法。 Input: Matrix A ∈ Rm × p, B ∈ Rp × n, and C ∈ Rm × n. Output: True if C = A · B; false if C ≠ A · B 算法伪代码 begin i=1 repeat Choose r=(r1,...,rn) ∈ {0,1}n at random. Compute C · r and A · (B · r) if C · r ≠ A · (B · r) return FALSE endif i = i + 1 until i=k return TRUE end k仍然是用来控制算法的正确率的。 (6) 商旅问题 : 我还不太懂,但是应该可以用概率算法来简化该问题的难度,还要研究一下,3天后给出答复,或者你们也可以看看怎么弄。 以上我给出的代码段就是要显示在,代码区中的代码部分,在那个区域里的代码不应该出现绘图语句,实际上绘图语句执行了,只不过不用放到演示代码段里,那里只要显示算法思路就可以了。 |
本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT |
本文选自计算机毕业设计http://myeducs.cn |