조합 데이터 의 출력 (2) 순환 처리

2661 단어
배열 조합 은 고등학교 에서 배 운 지식 으로 이론 적 으로 잘 알 지만 코드 를 어떻게 사용 하여 실현 하 는 지 시도 해 본 적 이 없다. 최근 에 프로젝트 의 수요 로 인해 조합의 알고리즘 을 쓰 는 데 많은 시간 이 걸 릴 줄 은 몰 랐 다.
 조합 데이터 의 출력 한 글 에 몇 가지 출력 방법 을 열거 하 였 으 나, 모두 재 귀적 인 방법 이지 만, 재 귀적 이지 않 고 순환 만 하 는 방법 은 없 습 니까?그래서 스스로 생각 하기 시 작 했 어 요. 다 알 아 요.
4 개의 요소 의 모든 조합 을 출력 하려 면 4 번, 4 층 의 순환 에 대응 해 야 합 니 다. 5 개의 요소 의 모든 조합 을 출력 하려 면 5 번, 5 층 의 순환 에 대응 해 야 합 니 다. 한 시간 동안 재 귀 를 순환 으로 바 꾸 는 방법 을 찾 지 못 했 습 니 다.그래서 자신 은 가장 간단 한 방법 으로 한 요소 의 조합, 두 요소 의 조합, 세 요소 의 조합 을 생각한다.
뜻밖에도 깨 우 침 이 있 을 줄 은 생각 지도 못 했다.
1, 2, 3 의 조합
고찰: 1 의 조합, 단 1
고찰: 1, 2 의 조합, 1;2;1,2;
고찰: 1, 2, 3 의 조합, 1;2;1,2;1,3;2,3;1,2,3
변경:
고찰: 1 의 조합, {1}
고찰: 1, 2 의 조합, {1};{1,2};{2};
고찰: 1, 2, 3 의 조합, {1};{1,2};{2};{1,3};{2,3};{1,2,3}
다시 한 번 변경:
고찰: 1 의 조합, {1}
고찰: 1, 2 의 조합, {1};2{1};{2};
고찰: 1, 2, 3 의 조합, {1};2{1};{2};3{{1};2{1};{2};} ;{3}; 수학 정 의 를 사용 하면 유사 하 다.
a(1)=1,a(n)=a(n-1)+n(a(n-1))+n
하나의 원 소 를 추가 할 때마다 실제 적 으로 이미 집합 한 모든 집합 에 이 새로운 원 소 를 추가 하 는 것 을 발견 했다.그리고 이 새로운 원소 의 집합 을 더 하면
그래서 순환 만 사용 하 는 조합 알고리즘 이 생 겼 다.
 public static void CreatSumData4(List<string> columnNameList)
        {
            List<string> list = new List<string>();
            for (int i = columnNameList.Count-1;i>=0 ; i--)
            {
                string name=columnNameList[i];
                int count = list.Count;
                for (int j = 0; j < count; j++)
                {
                    string item = list[j];
                    list.Add(name+","+item);
                }
                list.Add(name);
            }
            StringBuilder strs = new StringBuilder();
             for (int j = 0; j < list.Count; j++)
            {
                string item = list[j];
                strs.AppendLine(item);              
            }
             WrieData(strs.ToString());
        }
        private static void WrieData(string text)
        {
            string file = "ZuheTestout.js";
            StreamWriter sr = new StreamWriter(file);
            sr.WriteLine(text);
            sr.Close();
        }
        public static void Test()
        {
            List<string> columns = new List<string>();
            columns.Add("c0");
            columns.Add("c1");
            columns.Add("c2");
            columns.Add("c3");
            columns.Add("c4");
            //  CreatSumData1(columns);
            //  string text = CreateAllGroupingData(columns);
            //   WrieData(text);
            CreatSumData4(columns);

        }

좋은 웹페이지 즐겨찾기