仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 354|回复: 11
打印 上一主题 下一主题

[学习教程] 了解下JAVA的浅析完成分列组合查询算法

[复制链接]
若相依 该用户已被删除
跳转到指定楼层
#
发表于 2015-1-18 11:10:39 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
关于第二点:俺问问你,如果是企业级项目的话,诸如RMI,EJB,等一些关键技术,这些难道都不需要学么?如果光是使用jsp,servlet,javabean的话。
所谓的分列组合查询就相称于GOOGLE初级查询中“包括以下全体的字词”查询,也就是说查询中必需包括一切查询关头词,并且他们的按次能够是恣意。以下程序段完成了这一功效。好比输出查询关头字:tomtina则最一样平常的情形是在程序中利用相似于"selectsexfromstudentwherenamelike%tom%tina%ornamelike%tina%tom%orderedbyage"的查询语句完成以上的查询,因而怎样失掉%tina%tom%和%tom%tina%就是该程序和算法要完成的.
起首想到的就是写出一个分列组合的算法,然后用该算法输入所要查询关头字的一切情形,好比我输出了以下几个关头字:EGGAPPLETIME则要写一个程序输入这3个单词的一切分列情形,好比:EGGAPPLETIME情形2EGGTIMEAPPLE,情形3APPLEEGGTIME......不必说,人人一看就晓得应当是3的阶乘种情形也就是1*2*3这里就纷歧一列出了。
写出一段程序,大概一个函数好比:publicStringpaileizuhe(Stringinputstr){......}该函数前往一个分列组合好的QUERY字符串,好比利用该函数并付与他两个字符串参数(tom,tina)则:publicStringpailiezuhe("tom","tina");则输入:"selectsexfromstudentwherenamelike%tom%tina%ornamelike%tina%tom%orderedbyage"这里,我们体贴的是怎样天生tomtina的组合即%tina%tom%和%tom%tina%至于天生全部如上的字符串长短常复杂的只需用StringBuffer将那些常量吊挂起来最初组合一下就能够了.以下程序给出了分列组合输入的完成:
importjava.math.BigInteger;
importjava.util.*;
publicclassPermutationGenerator{
privateint[]a;
privateBigIntegernumLeft;
privateBigIntegertotal;
publicPermutationGenerator(intn){
if(n<1){
thrownewIllegalArgumentException("Min1");
}
a=newint[n];
total=getFactorial(n);
reset();
}
//------
//Reset
//------
publicvoidreset(){
for(inti=0;i<a.length;i++){
a[i]=i;
}
numLeft=newBigInteger(total.toString());
}
//------------------------------------------------
//Returnnumberofpermutationsnotyetgenerated
//------------------------------------------------
publicBigIntegergetNumLeft(){
returnnumLeft;
}
//------------------------------------
//Returntotalnumberofpermutations
//------------------------------------
publicBigIntegergetTotal(){
returntotal;
}
//-----------------------------
//Aretheremorepermutations?
//-----------------------------
publicbooleanhasMore(){
returnnumLeft.compareTo(BigInteger.ZERO)==1;
}
//------------------
//Computefactorial
//------------------
privatestaticBigIntegergetFactorial(intn){
BigIntegerfact=BigInteger.ONE;
for(inti=n;i>1;i--){
fact=fact.multiply(newBigInteger(Integer.toString(i)));
}
returnfact;
}
//--------------------------------------------------------
//Generatenextpermutation(algorithmfromRosenp.284)
//--------------------------------------------------------
publicint[]getNext(){
if(numLeft.equals(total)){
numLeft=numLeft.subtract(BigInteger.ONE);
returna;
}
inttemp;
//Findlargestindexjwitha[j]<a[j+1]
intj=a.length-2;
while(a[j]>a[j+1]){
j--;
}
//Findindexksuchthata[k]issmallestinteger
//greaterthana[j]totherightofa[j]
intk=a.length-1;
while(a[j]>a[k]){
k--;
}
//Interchangea[j]anda[k]
temp=a[k];
a[k]=a[j];
a[j]=temp;
//Puttailendofpermutationafterjthpositioninincreasingorder
intr=a.length-1;
ints=j+1;
while(r>s){
temp=a[s];
a[s]=a[r];
a[r]=temp;
r--;
s++;
}
numLeft=numLeft.subtract(BigInteger.ONE);
returna;
}
//程序测试出口
publicstaticvoidmain(String[]args){
int[]indices;
String[]elements={"1","2","3"};
PermutationGeneratorx=newPermutationGenerator(elements.length);
StringBufferpermutation;
while(x.hasMore()){
permutation=newStringBuffer("%");
indices=x.getNext();
for(inti=0;i<indices.length;i++){
permutation.append(elements[indices[i]]).append("%");
}
System.out.println(permutation.toString());
}
}
}
<p>
为什么外国人还要写那些框架进行代码封装,他们不就是为了别人使用时可以更简单么!如果要达到一个企业级项目的不用框架是很难的。小一些的项目还行,大的光是MVC模式的设计的编码量就够大的了。还有性能方面,单轮windows,这个工具是微软写的,。
小妖女 该用户已被删除
11#
发表于 2015-3-23 00:04:40 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
海妖 该用户已被删除
10#
发表于 2015-3-16 20:10:40 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
因胸联盟 该用户已被删除
9#
发表于 2015-3-9 02:30:06 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
冷月葬花魂 该用户已被删除
8#
发表于 2015-2-27 11:54:10 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
金色的骷髅 该用户已被删除
7#
发表于 2015-2-9 16:50:21 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
变相怪杰 该用户已被删除
6#
发表于 2015-2-9 05:05:05 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
飘灵儿 该用户已被删除
5#
发表于 2015-2-7 17:50:29 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
小魔女 该用户已被删除
地板
发表于 2015-2-3 23:38:12 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
再现理想 该用户已被删除
板凳
发表于 2015-1-31 16:53:38 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
简单生活 该用户已被删除
沙发
发表于 2015-1-30 20:55:27 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
精灵巫婆 该用户已被删除
楼主
发表于 2015-1-20 15:52:29 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 19:22

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表