仓酷云
标题:
了解下JAVA的浅析完成分列组合查询算法
[打印本页]
作者:
若相依
时间:
2015-1-18 11:10
标题:
了解下JAVA的浅析完成分列组合查询算法
关于第二点:俺问问你,如果是企业级项目的话,诸如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,这个工具是微软写的,。
作者:
精灵巫婆
时间:
2015-1-20 15:52
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
作者:
简单生活
时间:
2015-1-30 20:55
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
作者:
再现理想
时间:
2015-1-31 16:53
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
作者:
小魔女
时间:
2015-2-3 23:38
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
作者:
飘灵儿
时间:
2015-2-7 17:50
是一种将安全性(Security)列为第一优先考虑的语言
作者:
变相怪杰
时间:
2015-2-9 05:05
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
作者:
金色的骷髅
时间:
2015-2-9 16:50
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
作者:
冷月葬花魂
时间:
2015-2-27 11:54
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
作者:
因胸联盟
时间:
2015-3-9 02:30
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
作者:
海妖
时间:
2015-3-16 20:10
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
作者:
小妖女
时间:
2015-3-23 00:04
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2