Re: [問題] 組合排列?

看板java作者 (骨頭)時間18年前 (2008/01/12 06:08), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《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
看完茅塞頓開!! 謝謝T大 .. 獲益良多Q__Q
01/12 10:05, 1F
文章代碼(AID): #17X-Zbmx (java)
文章代碼(AID): #17X-Zbmx (java)