Re: [問題] 排列組合問題已回收

看板MATLAB作者 (凱文踢)時間15年前 (2009/04/13 13:03), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串4/7 (看更多)
※ 引述《fother (huss)》之銘言: : 想請問一下 假如輸入a=[1 1 2] 然後要排列組合a : 用perms(a)後 會出現 2 1 1 : 2 1 1 : 1 2 1 : 1 1 2 : 1 1 2 : 1 2 1 : 可是我不要重複的 像2 1 1就重複出現 我知道可以用 unique(perms(a)) : 可是當a很大的時候 執行perms(a)時已經out memory了 也來不及用 unique了 : 所以是不是還有其他什麼方法判斷出來 : 謝謝各位大大 我的寫法很粗暴 所以會付出很多的computation time 而且也不知道對於真正會讓記憶體爆掉的矩陣來說是否可行 所以如果不適用 先說聲抱歉... % 基本想法是說把同元素的矩陣分段作排列 % 每次排列就unique一次 % 以降低該矩陣在workspace的容量 % 因為先對整個矩陣perms會出現超大的矩陣 % 所以才有分段的想法... %% 開始 function output = unique_perms(input) pressed = unique(input); pressed_L = length(pressed); for ii = 1:pressed_L eval(['blk' num2str(ii)... ' = repmat(pressed(ii),[1 length(find(input == pressed(ii)))]);']); end temp1 = blk1; clear blk1; for ii = 2:pressed_L eval(['temp_L = size(temp' num2str(ii-1) ',1);']); eval(['temp' num2str(ii) ' = [];']); for jj = 1:temp_L eval(['target = temp' num2str(ii-1) '(jj,:);']); eval(['temp' num2str(ii) ' = unique([temp' num2str(ii)... '; unique(perms([target blk' num2str(ii)... ']),''rows'')],''rows'');']); end eval(['clear temp' num2str(ii-1) ' blk' num2str(ii)]); end eval(['output = temp' num2str(pressed_L) ';']); end %% 收工 請慢用 -- ╔═╦═╗ ╔═╗ ╔═══╗ ╭──╮ ║ ║╔══╗╔═╦╗╔═╗╔══╗║ ║ ╰╮ ║ ╣║ ═ ║║ ║║ ║║ ║║ ║ ║ ║║ ╣║ ║║ ║║ ║╚╗ ╔╝ ╚═╩═╝╚══╝╚══╝╚═╝╚═╩╝ ╚═╝ →→→→ http://www.wretch.cc/album/kevint ←←←← By luh4 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.148.130

04/13 13:12, , 1F
thank you 非常感謝你
04/13 13:12, 1F
文章代碼(AID): #19uiU_cq (MATLAB)
文章代碼(AID): #19uiU_cq (MATLAB)