




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
本文格式為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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 肌肉拉伸與養生考核試卷
- 航空器飛行器結構優化與輕量化考核試卷
- 網絡安全防護在智慧城市的智能環衛系統評估考核試卷
- 腈綸纖維制造基礎與工藝考核試卷
- 液力傳動裝置設計與分析考核試卷
- 毛皮制品檢測儀器選擇考核試卷
- 2025年中國咸蛋數據監測研究報告
- 中專招聘考試試題及答案
- 工大入學考試試題及答案
- 公務員體育試題及答案
- 新標準大學英語綜合教程4教師用書
- 新疆森林資源補充調查數據字典
- 學生檔案補辦申請表1
- 風機基礎計算書
- 運動醫學 教學大綱
- 十進制和二進制之間轉換
- DB11T 2000-2022 建筑工程消防施工質量驗收規范
- 工商管理專業調查匯總報告
- 承包商、供應商管理制度(大全五篇)
- EN779-2012一般通風過濾器——過濾性能測定(中文版)
- 緩蝕阻垢劑安全技術說明書MSDS
評論
0/150
提交評論