java算法演示系统代码的简单介绍

题目1:一个简单的算法演示程序(JAVA语言实现)1. 选择一个算法(提供选择见下)java算法演示系统代码,利用各种方法(图形、动画等)演示算法的演示过程 。
2. 可以进行手动演示java算法演示系统代码,也可以自动步进式演示 。
3. 允许用户设置算法的各个输入参数,以及自动步进式演示中的时间间隔 。
4. 不同的算法输入要求见下 。
界面要求java算法演示系统代码:
1. 尽量使用图形界面实现,要符合日常软件使用规范来设计菜单和界面 。
2. 如果无法实现图形界面,则在命令行方式下也需要提供菜单,方便用户操作 。
其他要求:
1. 标识符命名遵循Windows命名规范 。
2. 能够注意各种异常处理 , 注重提高程序运行效率 。
提交内容:
1. 全部源代码 。
2. 软件设计和使用说明书(UML类图java算法演示系统代码;实现的功能、主要技术java算法演示系统代码;使用帮助文档)
参考算法:
1. 最小生成树算法:Prim算法、Kruskal算法 。允许以下方式输入一个图形:绘制图形、输入邻接矩阵、输入边及其关联的顶点 。要求在图形方式下进行演示算法执行步骤 。
2. 单源最短路算法:Dijkstra算法 。允许以下方式输入一个图形:绘制图形、输入邻接矩阵、输入边及其关联的顶点 。要求在图形方式下进行演示算法执行步骤 。
3. 最优编码算法:Huffman编码算法 。允许用户输入一段英文文字,或者打开一个txt文档(英文内容),据此文档内容进行编码 。要求动态列出每个字符的出现概率统计结果以及对应编码 。
4. 其他可供演示的具有一定难度的算法,如关键路径问题、有向图的极大连通分支等 。
关于各种排列组合java算法实现方法 一 利用二进制状态法求排列组合 此种方法比较容易懂 但是运行效率不高 小数据排列组合可以使用
复制代码代码如下: import java util Arrays;
//利用二进制算法进行全排列 //count : //count :
public class test { public static void main(String[] args) { long start=System currentTimeMillis(); count (); long end=System currentTimeMillis(); System out println(end start); } private static void count (){ int[] num=new int []{ }; for(int i= ;iMath pow( );i++){ String str=Integer toString(i ); int sz=str length(); for(int j= ;j sz;j++){ str=" "+str; } char[] temp=str toCharArray(); Arrays sort(temp); String gl=new String(temp); if(!gl equals(" ")){ continue; } String result=""; for(int m= ;mstr length();m++){ result+=num[Integer parseInt(str charAt(m)+"")]; } System out println(result); } } public static void count (){ int[] num=new int []{ }; int[] ss=new int []{ }; int[] temp=new int[ ]; while(temp[ ] ){ temp[temp length ]++; for(int i=temp length ;i ;i ){ if(temp[i]== ){ temp[i]= ; temp[i ]++; } } int []tt=temp clone(); Arrays sort(tt); if(!Arrays equals(tt ss)){ continue; } String result=""; for(int i= ;inum length;i++){ result+=num[temp[i]]; } System out println(result); } } }
二 用递归的思想来求排列跟组合 代码量比较大
复制代码代码如下: package practice;
import java util ArrayList; import java util List;
public class Test {
/** * @param args */ public static void main(String[] args) { // TODO Auto generated method stub Object[] tmp={ }; // ArrayListObject[] rs=RandomC(tmp); ArrayListObject[] rs=cmn(tmp ); for(int i= ;irs size();i++) { // System out print(i+"="); for(int j= ;jrs get(i) length;j++) { System out print(rs get(i)[j]+" "); } System out println(); } }
// 求一个数组的任意组合 static ArrayListObject[] RandomC(Object[] source) { ArrayListObject[] result=new ArrayListObject[](); if(source length== ) { result add(source); } else { Object[] psource=new Object[source length ]; for(int i= ;ipsource length;i++) { psource[i]=source[i]; } result=RandomC(psource); int len=result size();//fn组合的长度 result add((new Object[]{source[source length ]})); for(int i= ;ilen;i++) { Object[] tmp=new Object[result get(i) length+ ]; for(int j= ;jtmp length ;j++) { tmp[j]=result get(i)[j]; } tmp[tmp length ]=source[source length ]; result add(tmp); } } return result; } static ArrayListObject[] cmn(Object[] source int n) { ArrayListObject[] result=new ArrayListObject[](); if(n== ) { for(int i= ;isource length;i++) { result add(new Object[]{source[i]}); } } else if(source length==n) { result add(source); } else { Object[] psource=new Object[source length ]; for(int i= ;ipsource length;i++) { psource[i]=source[i]; } result=cmn(psource n); ArrayListObject[] tmp=cmn(psource n ); for(int i= ;itmp size();i++) { Object[] rs=new Object[n]; for(int j= ;jn ;j++) { rs[j]=tmp get(i)[j]; } rs[n ]=source[source length ]; result add(rs); } } return result; }

推荐阅读