Re: [問題] 組合排列?
※ 引述《kerrycc (kerry)》之銘言:
: 問題定義:
: 在一有次序的n個字元中,要取k個,且此k個也依然要有依序性的組合
: 例如:"ABCDEF"(依字母大小排列) 六個字元要取 4個的組合
: 有:ABCD, ABCE, ABCF, ABDE, ABDF, ABEF,
: ACDE, ACDF, ADEF, BCDE, BCDF, BCEF, BDEF, CDEF
: 問題點:
: 想了好幾天,一直想不出來,依照平常的做法似乎要如下:
: for (i = 0 ; i < str.length() - k + 1 ; i++){
: for ( j = i + 1 ; j < i + str.length() - k + 1; j++){
: for ( m = j + 1; m < j + str.length() - k + 1; m++){
: for ..
: temp = 第i個字元+第j個字元..
: subset+= temp;
: 用四個迴圈,第一個迴圈去固定第一個字元然後去迴圈第2, 3, 4個字元
: 直到四個迴圈跑完可得最後全部的集合,但這樣的方式總是很土法鍊鋼
: 而且k的值也不固定,也有可能六取三,請問各位版大們是否有更好的建議,
: 小弟試過用遞迴,但似乎功力太弱,一直跑不出來,麻煩各位前輩
這可以算是排出全部可能數(powerset)的一個子問題,
之前在版上所提進位法可用。
(過濾掉最後產出的字串的長度不符的可能性就好了。)
進位法可以參考這篇
● 6922 212/31 TonyQ R: [問題] 字串拆解的問題
圖說:http://std1.mis.yzu.edu.tw/~s932541/alg.GIF
範例碼:http://tony1223.no-ip.info:1223/bmore?codePaste&3
遞迴法的話 可以參考底下的source code
http://tony1223.no-ip.info:1223/bmore?codePaste&2
--
▄▅▆▇███▇▆▅▄▃ ╰┼╯─╮ ╮
◥███████████◣ ╰┼╯=│=│
◥██████───────◣ *. ╯ ╯ ╯ の 物 語 .*
◥███████──────◣ ~ ◢◣ ◢◣
◥██████───────◤ ◥◤* 空白的世界.翼 *◥◤
◥██▁▂▃▄▅▆▇███▆▅▄▃▂▂~telnet://tony1223.no-ip.info
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.59.247
※ 編輯: TonyQ 來自: 220.132.59.247 (01/12 06:13)
推
01/12 10:05, , 1F
01/12 10:05, 1F
討論串 (同標題文章)