조합 조합 및 열거에 대한 질문이 많다는 것을 알고 있습니다. 그러나 필자는 검색 한 내용과 이후에 수행 한 내용을 구체적으로 찾지 못했습니다. 내가 뭔가를 놓친 경우에는 그 점을 지적 해주십시오. 그러면 질문을 닫을 수 있습니다.단일 집합에서 조합 조합 조합을 나열하는 방법
따라서 N 개의 요소 집합이 있다고 가정하고 Sum (k1, ..., kx) < = N 인 x 개의 양의 정수 k1, ..., kx를가집니다. 모든 방법을 열거합니다. 나는 원본 N 세트에서 (교체없이) 주어진 크기의 서브 세트를 선택할 수있다.
나는 그것이 올바르게 표현되기를 바란다. 내가 가지고 있지 않은 경우에, 간단한 예입니다. = 1
우리 열거한다
N = 4, X = 2, K1 = 2, K2
- {1, 2} {3}
- {1, 2} {4}
- {1, 3} {2}
- {1, 3} {4}
- {1,4} {2}
- {1,4} {3}
- {2 3} {1}
- {2, 3} {4}
- {2, 4} {1}
- {2, 4} {3}
- {3, 4} {1}
- {3 4} {2} 일반적인 경우
총 수는 I 일 수 생각 :
C (N, K1) * C (N - K1, K2) * ... * C (N - 합 (k1, ..., kn-1), kn).
초기 생각에 스택을 사용하면 상당히 쉽게 할 수 있습니다. 각 스택 레벨 i에서, 표준 조합 열거를 사용하여 부분 집합 ki를 생성 할 수 있으며, 선택된 요소를 각 레벨에서 소스 집합에서 제거하거나 원래 집합에서 열거하고 요소가 포함 된 경우를 건너 뛸 수 있습니다 .
내 질문에 더 빠르고 우아한 솔루션이 있습니까?
SOs 형식 검사기가 어리 석다. 내 코드가 올바르게 형식이 지정되지 않았기 때문에 내 질문에 동의하도록 45 분을 보냈다. 코드는 없으며 처음에 미리보기에서 미리 형식을 정했습니다. 나는 그저 포기하는 것에 가까웠다. – kamrann
나는 첫 번째 하위 집합을 만들고 두 번째 하위 집합을 만드는 재귀 함수를 사용하여이 작업을 수행해야한다고 생각합니다. – alestanis