Get every possible combination of an array
    2 views (last 30 days)
  
       Show older comments
    
    kanav prashar
 on 26 Feb 2020
  
    
    
    
    
    Commented: kanav prashar
 on 26 Feb 2020
            I have an array that contains n number of 1s and -1s for example:
[1 -1 1 -1 1 1 1 -1] 
I'd like every possible combination of this array (like [1 - 1-1 1 1 1 1 -1] ect...) 
I tried using perms, but perms has a limit of size 10 and I need to be able to do upto 32. Another thing about perms is I'll have repeating numbers (which I can remove with ease)
Accepted Answer
  Benjamin Großmann
      
 on 26 Feb 2020
        
      Edited: Benjamin Großmann
      
 on 26 Feb 2020
  
      This could be a starting point:
clearvars, close all
clc
arr = [-1 1 -1 1 1 1 1 1 -1];
num_arr_elements = numel(arr);
% find the number of -1
num_minus_one = sum(arr == -1);
% get all possible positions of -1
idx = nchoosek(1:num_arr_elements, num_minus_one);
% Initialize the matrix of combinations with ones
out = ones(size(idx,1), num_arr_elements);
% Place the -1s on the idx position
for ii = 1:size(idx,1)
    out(ii,idx(ii,:)) = -1;
end
Two more aspects:
- We have to get rid of this for loop
 - Number of possible combinations is 
 with n: array length, s1: number of 1s and s2: number of -1s; for n = 32 and (worst case) s1=s2=16, we have an output array of size 9 x 601.080.390. Optimization is heavily needed or buy a lot of RAM. 
4 Comments
  Benjamin Großmann
      
 on 26 Feb 2020
				
      Edited: Benjamin Großmann
      
 on 26 Feb 2020
  
			You are welcome! As Steven said, the brute force method is mostly not optimal to solve a specific task. I am also interested in the underlying problem. Furthermore, I would propose to use a logical array, since you have "bitnumbers" and then solve the task using bit-operations.
More Answers (0)
See Also
Categories
				Find more on Get Started with MATLAB in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!