java算法實現排列組合的方法介紹_第1頁
java算法實現排列組合的方法介紹_第2頁
java算法實現排列組合的方法介紹_第3頁
java算法實現排列組合的方法介紹_第4頁
java算法實現排列組合的方法介紹_第5頁
已閱讀5頁,還剩4頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

本文格式為Word版,下載可任意編輯——java算法實現排列組合的方法介紹java算法實現排列組合的方法介紹

一.利用二進制狀態法求排列組合,此種方法對比輕易懂,但是運行效率不高,小數據排列組合可以使用代碼如下:

importjava.util.Arrays;

//利用二進制算法舉行全排列

//count1:170187

//count2:291656

publicclasstest

publicstaticvoidmainString[]args

longstart=System.currentTimeMillis;

count2;

longend=System.currentTimeMillis;

System.out.printlnend-start;

privatestaticvoidcount2

int[]num=newint[]1,2,3,4,5,6,7,8,9;

forinti=1;iMath.pow9,9;i++

Stringstr=Integer.toStringi,9;

intsz=str.length;

forintj=0;j9-sz;j++

str=0+str;

char[]temp=str.toCharArray;

Arrays.sorttemp;

Stringgl=newStringtemp;

if!gl.equals012345678

continue;

Stringresult=;

forintm=0;mstr.length;m++

result+=num[Integer.parseIntstr.charAtm+];

System.out.printlnresult;

publicstaticvoidcount1

int[]num=newint[]1,2,3,4,5,6,7,8,9;

int[]ss=newint[]0,1,2,3,4,5,6,7,8;

int[]temp=newint[9];

whiletemp[0]9

temp[temp.length-1]++;

forinti=temp.length-1;i0;i--

iftemp[i]==9

temp[i]=0;

temp[i-1]++;

int[]tt=temp.clone;

Arrays.sorttt;

if!Arrays.equalstt,ss

continue;

Stringresult=;

forinti=0;inum.length;i++

result+=num[temp[i]];

System.out.printlnresult;

二.用遞歸的思想來求排列跟組合,代碼量對比大代碼如下:

packagepractice;

importjava.util.ArrayList;

importjava.util.List;

publicclassTest1

/**

*@paramargs

*/

publicstaticvoidmainString[]args

//TODOAuto-generatedmethodstub

Object[]tmp=1,2,3,4,5,6;

//ArrayList

rs=RandomCtmp;

ArrayList

rs=cmntmp,3;

forinti=0;irs.size;i++

//System.out.printi+=;

forintj=0;jrs.geti.length;j++

System.out.printrs.geti[j]+,;

System.out.println;

//求一個數組的任意組合

staticArrayList

RandomCObject[]source

ArrayList

result=newArrayList

;

ifsource.length==1

result.addsource;

else

Object[]psource=newObject[source.length-1];

forinti=0;ipsource.length;i++

psource[i]=source[i];

result=RandomCpsource;

intlen=result.size;//fn組合的長度

result.addnewObject[]source[source.length-1];

forinti=0;ilen;i++

Object[]tmp=newObject[result.geti.length+1];

forintj=0;jtmp.length-1;j++

tmp[j]=result.geti[j];

tmp[tmp.length-1]=source[source.length-1];

result.addtmp;

returnresult;

staticArrayList

cmnObject[]source,intn

ArrayList

result=newArrayList

;

ifn==1

forinti=0;isource.length;i++

result.addnewObject[]source[i];

elseifsource.length==n

result.addsource;

else

Object[]psource=newObject[source.length-1];

forinti=0;ipsource.length;i++

psource[i]=source[i];

result=cmnpsource,n;

ArrayList

tmp=cmnpsource,n-1;

forinti=0;itmp.size;i++

Object[]rs=newObject[n];

forintj=0;jn-1;j++

rs[j]=tmp.geti[j];

rs[n-1]=source[source.length-1];

result.addrs;

returnresult;

三.利用動態規劃的思想求排列和組合代碼如下:

packageAcm;

//強大的求組合數

publicclassMainApp

publicstaticvoidmainString[]args

int[]num=newint[]1,2,3,4,5;

Stringstr=;

//求3個數的組合個數

//count0,str,num,3;

//求1-n個數的組合個數

count10,str,num;

privatestaticvoidcount1inti,Stringstr,int[]num

ifi==num.length

System.out.printlnstr;

return;

count1i+1,str,num;

count1i+1,str+num[i]+,,num;

privatestaticvoidcountinti,Stringstr,int[]num,intn

ifn==0

System.out.printlnstr;

return;

ifi==num.length

return;

counti+1,str+num[i]+,,num,n-1;

counti+1,str,num,n;

下面是求排列代碼如下:

packageAcm;

//求排列,求各種排列或組合后排列

importjava.util.Arrays;

importjava.util.Scanner;

publicclassDemo19

privatestaticbooleanf[];

publicstaticvoidmainString[]args

Scannersc=newScannerSystem.in;

intsz=sc.nextInt;

forinti=0;isz;i++

intsum=sc.nextInt;

f=newboolean[sum];

Arrays.fillf,true;

int[]num=newint[sum];

forintj=0;jsum;j++

num[j]=j+1;

intnn=sc.nextInt;

Stringstr=;

countnum,str,nn;

/**

*

*@paramnum表示要排列的'數組

*@paramstr以排列好的字符串

*@paramnn剩下需要排列的個數,假設需要全排列,那么nn為數組長度

*/

pr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論