作者TonyQ (骨头)
看板java
标题Re: [问题] 组合排列?
时间Sat Jan 12 06:08:35 2008
※ 引述《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)
1F:推 kerrycc:看完茅塞顿开!! 谢谢T大 .. 获益良多Q__Q 01/12 10:05