2014-04-14 2 views
1

코드 고려 : 여기서세트 생성 알고리즘 : matlab에

clear all 


N = 7; 
Set = 1:N; 
for i = 1:N-1 
    Set1 = nchoosek(Set,i); 
    [ L_Set1 , C_Set1] = size(Set1); 
    A = zeros(L_Set1,N-C_Set1); 
    ASS_R7 = zeros(L_Set1 , N+1); 
    for i1 = 1:L_Set1 
     A(i1,:) = setdiff(1:N , Set1(i1,:)); 
     ASS_R7(i1,:) = [ Set1(i1,:), 0 ,A(i1,:) ]; 

    end 
    ASS_R(i) = {ASS_R7}; 
end 

ASS_R이 요소가 고유 모든 가능한 [ (N-k) 0 k ] 세트 제공을 (과에 속하는 [1,7] .Also K> 0).

저는이 코드를 모두 N<=7에 대해 일반화하려고 시도해 왔으며 해결 방법을 찾지 못했습니다.

더 명확하게하려면 :

[ 1 2 3 4 5 6 0 7 ]   . . .   [ 1 0 2 3 4 5 6 7 ] 
     .            . 
{   .   }   . . .   {   .   } 
     .            . 
[ 2 3 4 5 6 7 0 1 ]   . . .   [ 7 0 1 2 3 4 5 6 ] 

그러나, 나는 모든 세포

[ 1 0 2 ]  [ 1 0 2 3]          [ 1 0 2 3 4 5 6 7 ] 
    .    .             . 
{ . } . . { .  } . . .       {   .   } 
    .    .             . 
[ 7 0 6 ]  [ 7 0 6 5]          [ 7 0 1 2 3 4 5 6 ] 


        [ 1 2 0 3 ]         [ 1 2 0 3 4 5 6 7 ] 
         .             . 
       { .  }   . . .     {   .   } 
         .             . 
        [ 6 7 0 5 ]         [ 6 7 0 1 2 3 4 5 ] 



                   [ 1 2 3 4 5 6 0 7 ]    
                     .      
                   {   .   }    
                     .      
                   [ 2 3 4 5 6 7 0 1 ] 

모든 아이디어, 사람이 원하는 : 우리는 다음과 같이 다양한 크기의 세포와 세포 배열을 얻을?

+0

당신은 생성 할 수있는 모든 가능한 시퀀스의 셀 어레이를 원하는? – RDizzl3

+0

제가 언급 한 패션에 더 많은 부분이 있습니다. ''0 ''의 앞과 뒤의 같은 요소는 고유해야합니다. 또한, 나는'[1 2 0 3]'과'[2 1 0 3]'과 같은 순열을 원하지 않습니다. 0은 빈 교차점이있는 두 세트 사이의 구분 기호와 같습니다. – enigmae

답변

1

코드

%%// Array of elements whose sets are to be formed 
arr1 = 1:7; 

%%// Get a size estimate of the final output cell array and initialize it 
lim1 = cumsum(1:numel(arr1)-1); 
outmat = cell(lim1(end),1); 

%%// Get the cell array of sets, into outmat 
cc1=1; 
for k3 = 1:numel(arr1)-1 
    t1 = nchoosek(arr1,k3); 
    for k2=1:numel(arr1)-k3 
     mat1 =[]; 
     for k1 = 1:size(t1,1) 
      t11 = t1(k1,:); 
      t2 = arr1(~ismember(arr1,t11)); 
      t3 = nchoosek(t2,k2); 
      t4 = [repmat([t11 0],size(t3,1),1) t3]; 
      mat1= [mat1; t4]; 
     end 
     outmat(cc1)={mat1}; %%// Output 
     cc1 = cc1+1; 
    end 
end 
+1

감사합니다. 나는 내 자신의 코드를 가지고 왔지만 이것이 더 효율적으로 보인다 (+1). – enigmae