


全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
3全排列的生成算法 全排列的生成算法全排列的生成算法就是對(duì)于給定的字符集,用有效的方法將所有可能的全排列無(wú)重復(fù)無(wú)遺漏地枚舉出來(lái)。任何n個(gè)字符集的排列都可以與1n的n個(gè)數(shù)字的排列一一對(duì)應(yīng),因此在此就以n個(gè)數(shù)字的排列為例說(shuō)明排列的生成法。n個(gè)字符的全體排列之間存在一個(gè)確定的線性順序關(guān)系。所有的排列中除最后一個(gè)排列外,都有一個(gè)后繼;除第一個(gè)排列外,都有一個(gè)前驅(qū)。每個(gè)排列的后繼都可以從 它 的前驅(qū)經(jīng)過(guò)最少的變化而得到,全排列的生成算法就是從第一個(gè)排列開(kāi)始逐個(gè)生成所有的排列的方法。全排列的生成法通常有以下幾種:字典序法遞增進(jìn)位數(shù)制法遞減進(jìn)位數(shù)制法鄰位交換法遞歸類算法1.字典序法字典序法中,對(duì)于數(shù)字1、2、3.n的排列,不同排列的先后關(guān)系是從左到右逐個(gè)比較對(duì)應(yīng)的數(shù)字的先后來(lái)決定的。例如對(duì)于5個(gè)數(shù)字的排列12354和12345,排列12345在前,排列12354在后。按照這樣的規(guī)定,5個(gè)數(shù)字的所有的排列中最前面的是12345,最后面的是54321。字典序算法如下:設(shè)P是1n的一個(gè)全排列:p=p1p2.pn=p1p2.pj-1pjpj+1.pk-1pkpk+1.pn1)從排列的右端開(kāi)始,找出第一個(gè)比右邊數(shù)字小的數(shù)字的序號(hào)j(j從左端開(kāi)始計(jì)算),即 j=maxi|pipj(右邊的數(shù)從右至左是遞增的,因此k是所有大于pj的數(shù)字中序號(hào)最大者)3)對(duì)換pi,pk4)再將pj+1.pk-1pkpk+1pn倒轉(zhuǎn)得到排列p=p1p2.pj-1pjpn.pk+1pkpk-1.pj+1,這就是排列p的下一個(gè)下一個(gè)排列。例如839647521是數(shù)字19的一個(gè)排列。從它生成下一個(gè)排列的步驟如下:自右至左找出排列中第一個(gè)比右邊數(shù)字小的數(shù)字4 839647521在該數(shù)字后的數(shù)字中找出比4大的數(shù)中最小的一個(gè)5 839647521將5與4交換 839657421將7421倒轉(zhuǎn) 839651247所以839647521的下一個(gè)排列是839651247。2.遞增進(jìn)位數(shù)制法在遞增進(jìn)位制數(shù)法中,從一個(gè)排列求另一個(gè)排列需要用到中介數(shù)。如果用 ki表示排列p1p2.pi.pn中元素pi的右邊比pi小的數(shù)的個(gè)數(shù),則排列的中介數(shù)就是對(duì)應(yīng)的排列k1 . ki. kn-1。例如排列839647521的中介數(shù)是72642321,7、2、6、.分別是排列中數(shù)字8、3、9、.的右邊比它小的數(shù)字個(gè)數(shù)。中介數(shù)是計(jì)算排列的中間環(huán)節(jié)。已知一個(gè)排列,要求下一個(gè)排列,首先確定其中介數(shù),一個(gè)排列的后繼,其中介數(shù)是原排列中介數(shù)加1,需要注意的是,如果中介數(shù)的末位kn-1+1=2,則要向前進(jìn)位,一般情形,如果ki+1=n-i+1,則要進(jìn)位,這就是所謂的遞增進(jìn)位制。例如排列839647521的中介數(shù)是72642321,則下一個(gè)排列的中介數(shù)是67342221+1=67342300(因?yàn)?+1=2,所以向前進(jìn)位,2+1=3,又發(fā)生進(jìn)位,所以下一個(gè)中介數(shù)是67342300)。得到中介數(shù)后,可根據(jù)它還原對(duì)應(yīng)得排列。算法如下:中介數(shù)k1、k2、.、kn-1的各位數(shù)字順序表示排列中的數(shù)字n、n-1、.、2在排列中距右端的的空位數(shù),因此,要按k1、k2、.、kn-1的值從右向左確定n、n-1、.、2的位置,并逐個(gè)放置在排列中:i放在右起的ki+1位,如果某位已放有數(shù)字,則該位置不算在內(nèi),最后一個(gè)空位放1。因此從67342300可得到排列849617523,它就是839647521的后一個(gè)排列。因?yàn)?最先放置,k1=6,9放在右起第7位,空出6個(gè)空位,然后是放8,k2=7,8放在右起第8位,但9占用一位,故8應(yīng)放在右起第9位,余類推。3.遞減進(jìn)位制數(shù)法在遞增進(jìn)位制數(shù)法中,中介數(shù)的最低位是逢2進(jìn)1,進(jìn)位頻繁,這是一個(gè)缺點(diǎn)。把遞增進(jìn)位制數(shù)翻轉(zhuǎn),就得到遞減進(jìn)位制數(shù)。839647521的中介數(shù)是67342221(k1k2.kn-1),倒轉(zhuǎn)成為12224376(kn-1.k2k1),這是遞減進(jìn)位制數(shù)的中介數(shù):ki(i=n-1,n-2,.,2)位逢i向ki-1位進(jìn)1。給定排列p,p的下一個(gè)排列的中介數(shù)定義為p的中介數(shù)加1。例如p=839647521,p的中介數(shù)為12224376,p的下一個(gè)排列的中介數(shù)為12224376+1=12224377,由此得到p的下一個(gè)排列為893647521。給定中介數(shù),可用與遞增進(jìn)位制數(shù)法類似的方法還原出排列。但在遞減進(jìn)位制數(shù)中,可以不先計(jì)算中介數(shù)就直接從一個(gè)排列求出下一個(gè)排列。具體算法如下:1)如果p(i)=n且in,則p(i)與p(i-1)交換2)如果p(n)=n,則找出一個(gè)連續(xù)遞減序列9、8、.、i,將其從排列左端刪除,再以相反順序加在排列右端,然后將i-1與左邊的數(shù)字交換例如p=893647521的下一個(gè)排列是983647521。求983647521的下一個(gè)排列時(shí),因?yàn)?在最左邊且第2位為8,第3位不是7,所以將8和9從小到大排于最右端364752189,再將7與其左方數(shù)字對(duì)調(diào)得到983647521的下一個(gè)排列是367452189。又例如求987635421的下一個(gè)排列,只需要將9876從小到大排到最右端并將5與其左方數(shù)字3對(duì)調(diào),得到534216789。4.鄰位對(duì)換法鄰位對(duì)換法中下一個(gè)排列總是上一個(gè)排列某相鄰兩位對(duì)換得到的。以4個(gè)元素的排列為例,將最后的元素4逐次與前面的元素交換,可以生成4個(gè)新排列:1 2 3 4 1 2 4 3 1 4 2 3 4 1 2 3然后將最后一個(gè)排列的末尾的兩個(gè)元素交換,再逐次將排頭的4與其后的元素交換,又生成四個(gè)新排列:4 1 3 2 1 4 3 2 1 3 4 2 1 3 2 4再將最后一個(gè)排列的末尾的兩個(gè)元素交換,將4從后往前移:3 1 2 4 3 1 4 2 3 4 1 2 4 3 1 2如此循環(huán)既可求出全部排列。5.元素增值法(n進(jìn)制法)1)從原始排列p=p1p2.pn開(kāi)始,第n位加n-1,如果該位的值超過(guò)n,則將它除以n,用余數(shù)取代該位,并進(jìn)位(將第n-1位加1)2)再按同樣方法處理n-1位,n-2位,.,直至不再發(fā)生進(jìn)位為止,處理完一個(gè)排列就產(chǎn)生了一個(gè)新的排列3)將其中有相同元素的排列去掉4)當(dāng)?shù)谝粋€(gè)元素的值n則結(jié)束以3個(gè)數(shù)1、2、3的排列為例:原始排列是1 2 3,從它開(kāi)始,第3個(gè)元素是3,3+2=5,5 Mod 3=2,第2個(gè)元素是2,2+1=3,所以新排列是1 3 2。通過(guò)元素增值,順序產(chǎn)生的排列是:1 2 3,1 3 2,2 1 1,2 1 3,2 2 2,2 3 1,2 3 3,3 1 2,3 2 1有下劃線的排列中存在重復(fù)元素,丟棄,余下的就是全部排列。6.遞歸類算法全排列的生成方法用遞歸方式描述比較簡(jiǎn)潔,實(shí)現(xiàn)的方法也有多種。1)回溯法回溯法通常是構(gòu)造一顆生成樹(shù)。以3個(gè)元素為例;樹(shù)的節(jié)點(diǎn)有個(gè)數(shù)據(jù),可取值是1、2、3。如果某個(gè)為0,則表示尚未取值。初始狀態(tài)是(0,0,0),第1個(gè)元素值可以分別挑選1,2,3,因此擴(kuò)展出3個(gè)子結(jié)點(diǎn)。用相同方法找出這些結(jié)點(diǎn)的第2個(gè)元素的可能值,如此反復(fù)進(jìn)行,一旦出現(xiàn)新結(jié)點(diǎn)的3個(gè)數(shù)據(jù)全非零,那就找到了一種全排列方案。當(dāng)嘗試了所有可能方案,即獲得了問(wèn)題的解答。2)遞歸算法如果用P表示n個(gè)元素的排列,而Pi表示不包含元素i的排列,(i)Pi表示在排列Pi前加上前綴i的排列,那么,n個(gè)元素的排列可遞歸定義為:如果n=1,則排列P只有一個(gè)元素i如果n1,則排列P由排列(i)Pi構(gòu)成(i=1、2、.、n-1)。根據(jù)定義,容易看出如果已經(jīng)生成了k-1個(gè)元素的排
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工作區(qū)域空間優(yōu)化計(jì)劃表
- 旅游業(yè)個(gè)性化定制旅游線路方案
- 2018優(yōu)化方案新高考地理二輪專題復(fù)習(xí)教案-專題二-大氣運(yùn)動(dòng)
- 教育領(lǐng)域課程開(kāi)發(fā)與運(yùn)營(yíng)合作協(xié)議
- 大學(xué)圖書(shū)館及研究生院教學(xué)樓、第二食堂工程建設(shè)項(xiàng)目可行性方案
- 供應(yīng)鏈管理軟件實(shí)施與維護(hù)協(xié)議
- 2025-2030年中國(guó)汽車安全氣囊行業(yè)市場(chǎng)現(xiàn)狀調(diào)查及投資前景研判報(bào)告
- 脫硫石膏爐渣銷售承包合同
- 2024-2030全球萬(wàn)能工具磨床行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 漁業(yè)養(yǎng)殖技術(shù)培訓(xùn)與合作社合作協(xié)議
- 金川集團(tuán)股份有限公司招聘筆試題庫(kù)2024
- 2024年吉林省高職高專單獨(dú)招生考試數(shù)學(xué)試卷真題(含答案)
- 油氣勘探行業(yè)技術(shù)趨勢(shì)分析
- 技術(shù)研發(fā)主管崗位招聘筆試題及解答(某大型國(guó)企)
- 2024年全國(guó)職業(yè)院校技能大賽高職組(中藥傳統(tǒng)技能賽項(xiàng))考試題庫(kù)(含答案)
- 浙江省金華市2024年初中畢業(yè)升學(xué)適應(yīng)性檢測(cè) 科學(xué)試題卷
- 2024年六年級(jí)語(yǔ)文下冊(cè)全冊(cè)單元教材分析
- 2024年江西省中考生物·地理合卷試卷真題(含答案逐題解析)
- 延長(zhǎng)石油招聘筆試試題
- 2020-2021年度廣東省職業(yè)院校學(xué)生專業(yè)技能大賽(高職組)CAD機(jī)械設(shè)計(jì)賽項(xiàng)競(jìng)賽規(guī)程
- DB-T 29-22-2024 天津市住宅設(shè)計(jì)標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論