Re: [問題]排列組合

看板MATLAB作者 (郝渴連)時間13年前 (2012/12/06 23:47), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《loveweib (無情鬱金香)》之銘言: : 我的程式需要對 "1到n取k個" 的所有組合作運算(k=1:n), : 我現在的做法是 先令 M = nchoosek(1:n,k)去儲存所有組合, : 然後再用for迴圈對每一種組合做運算,但是當n太大會出現 Out of memory。 : 想請問是否有其他方式,對一(n,k),每次只出現一個組合,運算完後, : 再接著出現下一個組合作運算,避免掉儲存所有組合數這個步驟。謝謝!! 若把 nchoosek(1:5, 3) 不選的項補成NaN 1 2 3 NaN NaN 1 2 NaN 4 NaN 1 NaN 3 4 NaN NaN 2 3 4 NaN 1 2 NaN NaN 5 1 NaN 3 NaN 5 NaN 2 3 NaN 5 1 NaN NaN 4 5 NaN 2 NaN 4 5 NaN NaN 3 4 5 等效於 選1 選2 選3 選4 選5 1 1 1 0 0 1 1 0 1 0 1 0 1 1 0 0 1 1 1 0 1 1 0 0 1 1 0 1 0 1 0 1 1 0 1 1 0 0 1 1 0 1 0 1 1 0 0 1 1 1 把此結果視為5bit的2進位數值,則每一個組合可用一數值代表 28 26 22 14 25 21 13 19 11 7 也就是說 for n = 1:N for k = 1:n for i = 0:2^(n-1) if( sum( dec2bin(i)=='1' )==k ) % do something in here end end end end 給您參考參考 -- 哀愁猶如雪花梢然飄落, 白雪厚積, 終究成了孤獨的小結晶, 誰能融化我冰凍已久的孤寂? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.67.61.223

12/07 18:12, , 1F
謝謝 ^^
12/07 18:12, 1F
文章代碼(AID): #1GmBuVi8 (MATLAB)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1GmBuVi8 (MATLAB)