ram issue while generating subsets

alright, I wrote a code in matlab which in a part of that it needs to generate all subsets of a vector and process all of them one by one. For example having vector X, I first used the function combntns(X, k) to generate the subsets but there is a problem that X can be in a very high dimension so to save the all subsets of X it requires massive amount of ram! And I always run out of ram memory while running the code. That is so unnecessary to save all the subsets since the algorithm will process them one by one. I wonder is there any function to do this for me or I have to write a code manually to do so?

2 个评论

Matt J
Matt J 2013-7-10
编辑:Matt J 2013-7-10
I think the path forward is to explain why you think you need ALL subsets, so that we can assess whether that is true or not. It sounds like a brute force approach that's probably meant to be done differently, maybe with a few compromises.
ok, I don't need ALL subsets I have a limit for subset size for example ALL subsets with length 3

请先登录,再进行评论。

 采纳的回答

sina
sina 2013-7-10
编辑:sina 2013-7-10
I just used this code I wrote, in case anyone faced this problem in future.
function nextSubset = getNextSubset(set, currentSubset)
% this function returns indexes of next subset
% subsets will return with their length order
% returns NaN if end of subsets reached
if exist('currentSubset', 'var') == 0
nextSubset = [];
return
end
if isempty(currentSubset)
nextSubset = 1;
return
end
n = length(set);
m = length(currentSubset);
if currentSubset == n-m+1:n
if m == n
nextSubset = NaN;
return
end
nextSubset = 1:m+1;
return
end
nextSubset = currentSubset;
nextSubset(m) = nextSubset(m) + 1;
if nextSubset(m) == n+1
c = m - 1;
while nextSubset(c) == n-m+c
c = c - 1;
if c == 0
nextSubset = NaN;
return
end
end
nextSubset(c:m) = nextSubset(c)+1:m-c+nextSubset(c)+1;
end
end

更多回答(1 个)

Matt J
Matt J 2013-7-10
编辑:Matt J 2013-7-10
ok, I don't need ALL subsets I have a limit for subset size for example ALL subsets with length 3
If the length of the subset is small (typically around 3 if that's what you're saying), then nchoosek should give you what you're looking for pretty easily and without too much strain in memory,
Xsubsets=nchoosek(X,3);

1 个评论

nop, it has the the previous problem too. I just didn't want to save the subset all at once to prevent occupying memory. The code I wrote manually does exactly what is needed to be done.

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 MATLAB 的更多信息

产品

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by