질문에 표시된 출력을 얻으려면 동일한 순서가 아니어도되고, 이것이 내가하는 일입니다.
Mathematica 코드를 사용 하겠지만 개념은 보편적입니다.
{"Mary", "had", "a", "little", "lamb"}
5
string = "Mary had a little lamb";
set = StringSplit[string]
n = [email protected]
그래서 당신은 단어 (StringSplit)로 문장을 분해하는 기능이 필요합니다.
그러면 중복 요소를 인식하는 순열 함수와 integer partitions을 생성하는 함수가 필요합니다. 두 알고리즘은 StackOverflow에서 찾을 수 있습니다.
parts = Join @@ Permutations /@ IntegerPartitions[n]
{{5}, {4, 1}, {1, 4}, {3, 2}, {2, 3}, {3, 1, 1}, {1, 3, 1},
{1, 1, 3}, {2, 2, 1}, {2, 1, 2}, {1, 2, 2}, {2, 1, 1, 1}, {1, 2, 1, 1},
{1, 1, 2, 1}, {1, 1, 1, 2}, {1, 1, 1, 1, 1}}
: 우리는 각 파티션을 뒤 바꿔되면 ("각각은"
/@
입니다)
IntegerPartitions[n]
{{5}, {4, 1}, {3, 2}, {3, 1, 1}, {2, 2, 1}, {2, 1, 1, 1}, {1, 1, 1, 1, 1}}
우리는 모든 방법 선형 다섯 개 부분의 집합을 분할 할 수
마지막으로 함수는 일련의 길이에 따라 세트를 분할합니다.나는 광산 dynamicPartition 전화 : <2>가 false로 설정되어있는 경우, 점에서,
dynamicPartition[set, #] & /@ parts // Column
{{Mary,had,a,little,lamb}}
{{Mary,had,a,little},{lamb}}
{{Mary},{had,a,little,lamb}}
{{Mary,had,a},{little,lamb}}
{{Mary,had},{a,little,lamb}}
{{Mary,had,a},{little},{lamb}}
{{Mary},{had,a,little},{lamb}}
{{Mary},{had},{a,little,lamb}}
{{Mary,had},{a,little},{lamb}}
{{Mary,had},{a},{little,lamb}}
{{Mary},{had,a},{little,lamb}}
{{Mary,had},{a},{little},{lamb}}
{{Mary},{had,a},{little},{lamb}}
{{Mary},{had},{a,little},{lamb}}
{{Mary},{had},{a},{little,lamb}}
{{Mary},{had},{a},{little},{lamb}}
니스 :하지만 내 문제는 제약 조건을 가지고, 난에 <3> 또는 <4> 또는 그러한 다음 변수를 가질 수 없습니다 진실 해. 그건 질서를 유지하지 못할거야. 예 : 이러한 조합은 허용되지 않습니다. - { 'Mary', 'little lamb'} – codemaniac
예를 들어 주셔서 감사합니다. – codemaniac
이진 형식으로 생각하면 패턴을 찾기가 어려울 것이라고 생각하지 않습니다. 숫자? – Shahbaz