




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
C++實現(xiàn)生成組合算法學(xué)號:姓名:TOC\o"1-5"\h\z\o"CurrentDocument"組合的基本概念 1\o"CurrentDocument"生成組合的需求 1\o"CurrentDocument"2.1生成全部組合 2\o"CurrentDocument"2.1.1基于2字典的生成全部組合算法流程 2\o"CurrentDocument"2.1.2C++代碼 2\o"CurrentDocument"2.1.3運行結(jié)果 5\o"CurrentDocument"2.2生成r-組合 6\o"CurrentDocument"2.2.1基于字典序序的r-組合算法流程 6\o"CurrentDocument"2.2.2C++代碼 6\o"CurrentDocument"2.2.3運行結(jié)果 9組合的基本概念1) 集合S={1,2,......n},所有元素組成一組的集合(不考慮排列的順序),稱為S的全部組合;2) 集合S={1,2, n},從中選出r個元素組成一組(不考慮排列的順序),稱為S的一個r-組合。生成組合的需求Main字典序生成算法全部組合遞歸算法基于2字典序生產(chǎn)算法 Even算法Main字典序生成算法全部組合遞歸算法基于2字典序生產(chǎn)算法 Even算法生成組合包括:全部組合和r-組合。全部組合的算法有,基于2
的字典序,Even算法,遞歸算法;r-組合的算法有字典序生成算法。
2.1生成全部組合2.1.1基于2字典的生成全部組合算法流程十進制nCreate轉(zhuǎn)換為2進制,使用棧存儲。輸入集合S:初始化nMax>=從棧中輸出數(shù)據(jù);即一個組合2.1.2C++代碼#include<iostream>#include<math.h>#include<afxtempl.h>usingnamespacestd;typedefCArray<char,char&>BinaryData;voidGetBinaryData(unsignedintnData,BinaryData&nBinaryArry,intnSize)(nBinaryArry.RemoveAll();if(0==nData)(return;unsignedintnRes=0;charnMod=0;intnPos=0;while(1!=nData)(nMod=nData%2;nData/=2;nBinaryArry.Add(nMod);nPos++;}if(1==nData)(charnTemp=1;nBinaryArry.Add(nTemp);}intn1=nBinaryArry.GetSize();if(n1<nSize)(for(intj=0;j<nSize-n1;j++)(charnTemp=0;nBinaryArry.Add(nTemp);}}//Debug//intnSize=nBinaryArry.GetSize();//for(inti=nSize-1;i>=0;i--)// (//printf("%d",nBinaryArry.GetAt(i));// }}int_tmain(intargc,TCHAR*argv[],TCHAR*envp[])(intnRetCode=0;//initializeMFCandprintanderroronfailureif(!AfxWinInit(::GetModuleHandle(NULL),NULL,::GetCommandLine(),0))(//TODO:changeerrorcodetosuityourneedscerr<<_T("FatalError:MFCinitializationfailed")<<endl;nRetCode=1;}else(BinaryDatanBinaryData;〃輸ANunsignedintN=0;printf("請輸AN:\n");cin>>N;unsignedintnCreate=0;〃計算n位個的值unsignedintnMax=0;for(unsignedinti=0;i<N;i++)(nMax+=pow(2,i);}//2字典序輸出while(nMax>=nCreate)(GetBinaryData(nCreate,nBinaryData,N);intnSize=nBinaryData.GetSize();for(intj=0;j<nSize;j++)(intnTemp=nBinaryData.GetAt(j);if(1==nTemp)(printf("%d",j+1);}}nCreate++;nBinaryData.RemoveAll();printf("\n");}}returnnRetCode;2.1.3運行結(jié)果1)3的全部組合2)4的全部組合生成下一個r-生成下一個r-組合2.2生成r-組合2.2.1基于字典序序的r-組合算法流程算法流程如下圖所示:V
組合集合數(shù):n
;求解組合數(shù):V計算第一個r-組合和最后一個r-組合B 7當前r-組合=第
一個r-組合AA==B'Ndo/返回當前r-組合可以加1的位置p和該位置的值v;do/算生成下一個r-組合需要更改的位置數(shù)t=r-p;do/計算下一個r-組合nMax=v+1+r-p;do/從位置r到位置t填入nMax到v+1。輸出一個r-組
合2.2.2C++代碼intmain()(R_Combination(6,4);return0;}//求解r-組合voidR_Combination(intn,intr)(
//初始化int*pBuff=newint[n];for(inti=0;i<n;i++)(pBuff[i]=i+1;}//第一個r-組合int*pFirst=newint[r];〃最后一個r-組合int*pLast=newint[r];for(intj=0;j<r;j++)(pFirst[j]=j+1;pLast[j]=n-r+j+1;//pLast[j]=j;}//debugprintf(-第一個%d-組合:\n”,r);for(inta=0;a<r;a++)(printf("%d”,pFirst[a]);}printf("\n");TRACE(-最后一個%d-組合:",r);for(intb=0;b<r;b++)(TRACE("%d”,pLast[b]);}TRACE("\n");intk=0;intp=0;while(!CompareEqual(pFirst,pLast,r))(GetMaxPosion(pFirst,r,n,&k,&p);intnMax=k+1+r-p;for(intnFill=r-1;nFill>=p-1;nFill--)(pFirst[nFill]=nMax;nMax--;for(inta=0;a<r;a++)(printf("%d”,pFirst[a]);}printf("\n");}〃釋放內(nèi)存if(NULL!=pLast)(delete[]pLast;}if(NULL!=pFirst)(delete[]pFirst;}if(NULL!=pBuff)(delete[]pBuff;}}〃比較數(shù)組內(nèi)容是否相等boolCompareEqual(int*pData1,int*pData2,intnSize)(boolbRes=true;intnV1=0;intnV2=0;for(inti=0;i<nSize;i++)(nV1=*(pData1+i);nV2=*(pData2+i);if(nV1!=nV2)(bRes=false;i=nSize+1;}}returnbRes;}voidGetMaxPosion(int*pData/*一個r-組合的指針*/,intr/*r--組合大小*/,intn/*求解的組合大小*/,int*pK/*允許加一的值*/,int*pPosition/*r-組合的位置*/)intnValue_K=0;intnValue_R=r;intnPosion=0;intnValue=0;for(inti=0;i<nValue_R;i++)(nValue=pData[i];if(nValue>nValue_K&&(nValue+1)<=n&&!IsExit(pData,r,nValue+1))(nPosion=i+1;nValue_K=*(pData+i);}}〃賦值返回*pK=nValue_K;*pPosition=nPosion;TRACE("K值
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 水廠出租轉(zhuǎn)讓合同范本
- 電梯安裝改裝合同范本
- 瑜伽教師聘用合同范本
- 基于BDNF-AKT-mTOR通路探討百合抗抑郁作用的有效成分及其機制的研究
- 語文知識掌握提升方案
- 信息技術(shù)2.0 教師家校合作方案
- 氟喹諾酮項目籌資方案
- 鎳壓延加工材項目籌資方案
- 公路建設(shè)土方開挖施工方案
- 農(nóng)業(yè)基礎(chǔ)設(shè)施建設(shè)材料與設(shè)備配置方案
- 骶髂關(guān)節(jié)損傷郭倩課件
- 內(nèi)科學(xué)疾病概要-支氣管擴張課件
- 2025陜西渭南光明電力集團限公司招聘39人易考易錯模擬試題(共500題)試卷后附參考答案
- 預(yù)防感冒和流感的方法
- 2024年黑龍江職業(yè)學(xué)院高職單招語文歷年參考題庫含答案解析
- 2024年南京旅游職業(yè)學(xué)院高職單招語文歷年參考題庫含答案解析
- 股指期貨基礎(chǔ)知識介紹培訓(xùn)課件
- 2024年北京東城社區(qū)工作者招聘筆試真題
- xx學(xué)校培訓(xùn)部工作職責
- T-GXAR 005-2024 制冷機房運行維護規(guī)程
- 開工第一課安全培訓(xùn)總結(jié)精彩
評論
0/150
提交評論