2010-04-16 5 views
3

어떻게하면 C#를 사용하여 집합의 모든 부분 집합을 찾을 수 있습니까? 여기 세트는 문장 (문자열)입니다. 예 : s = "나는 nik"이고, 그 코드는 무엇입니까?세트 (문장)의 모든 부분 집합을 찾기 C#

여기에서 s의 하위 집합은> i, am, nik, 나는, nik, 나는 nik, 나는 nik입니다.

+0

질문에 좀 더 정교한,> _ <내가 혼란 스러워요하시기 바랍니다. – Warty

+0

+1 내 이름을 지어 주었고 비슷한 문제를 물었습니다. – nikhil

답변

6

다음은 주어진 배열에서 불연속적인 모든 부분 집합을 찾기 위해 작성한 함수입니다.

List<T[]> CreateSubsets<T>(T[] originalArray) 
{ 
    List<T[]> subsets = new List<T[]>(); 

    for (int i = 0; i < originalArray.Length; i++) 
    { 
     int subsetCount = subsets.Count; 
     subsets.Add(new T[] { originalArray[i] }); 

     for (int j = 0; j < subsetCount; j++) 
     { 
      T[] newSubset = new T[subsets[j].Length + 1]; 
      subsets[j].CopyTo(newSubset, 0); 
      newSubset[newSubset.Length - 1] = originalArray[i]; 
      subsets.Add(newSubset); 
     } 
    } 

    return subsets; 
} 

그래서 1,2,3,4,5 정수 배열을 주어, 그것을 함유 List<int[]> 31 개 서브 세트를 리턴한다.

편집 : 업데이트를 기반으로 위의 함수로 필요한 6 개의 하위 집합을 생성하고 원본 문장에 string.Split ('')을 사용할 수 있습니다. 고려 :

string originalString = "i am nik"; 
List<string[]> subsets = CreateSubsets(originalString.Split(' ')); 

foreach (string[] subset in subsets) 
{ 
    Console.WriteLine(string.Join("\t", subset)); 
} 
+0

고맙습니다, 대단히 감사합니다 .... – NikRED

+0

null 집합을 생성하지 않습니다. – amitabha

1
// all subsets of given set 
    static void numbcomb (string [] list) 
    {    
     int gelen = (int)Math.Pow(2,list.Length); // number of subsets (2^n) 
     string [] result = new string [gelen]; // array with subsets as elements 

     for(int i=0; i<gelen; i++) // filling "result" 
     { 
      for(int j=0;j<list.Length;j++) // 0,1,2 (for n=3) 
      { 
       int t = (int)Math.Pow(2, j); // 1,2,4 (for n=3) 
       if ((i&t)!=0) // the MAIN THING in the program 
           // i can be: 
           // 000,001,010,011,100,101,110,111 
           // t can be: 001,010,100 
           // take a pensil and think about! 
       { result[i]+=list[j]+" ";} // add to subset 
      } 
      Console.Write("{0}: ",i);// write subset number 
      Console.WriteLine(result[i]);//write subset itself 
     } 
    } 
+0

이것은 완벽합니다. 감사합니다. (! (I & T는) = 0) // 프로그램 에서 중요한 것은 // 내가 될 수 있다면 – amitabha

+0

당신이 설명해주십시오 수 : // 000001010011100101110,111 // t이 될 수 있습니다 : 001,010,100 //이 pensil을 가지고 생각 ! {([i] + = list [j] + "";} // 하위 집합에 추가 – amitabha

+0

왜 우리는 ((i & t)! = 0)을 체크하고 있는가? – amitabha

관련 문제