要獲得您的問題中顯示的輸出,雖然不是以相同的順序,這是我會做的。
我將使用Mathematica代碼,但概念是通用的。
string = "Mary had a little lamb";
set = StringSplit[string]
n = [email protected]
{"Mary", "had", "a", "little", "lamb"}
5
所以,你需要打破的句子翻譯成字(StringSplit)的功能。
然後,您將需要一個函數來生成integer partitions和一個知道重複元素的置換函數。這兩種算法都可以在StackOverflow上找到。
IntegerPartitions[n]
{{5}, {4, 1}, {3, 2}, {3, 1, 1}, {2, 2, 1}, {2, 1, 1, 1}, {1, 1, 1, 1, 1}}
一旦置換每個分區( 「每個」 是/@
)我們得到了所有的方式來線性分割一組五個部分:
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}}
最後我們需要一個函數根據一系列長度來分割一個集合。我把我的dynamicPartition:
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}}
尼斯:)但我的問題有一個約束,因爲,如果<2>設置爲false,我不能有<3>或<4>或任何此類以下變量是真實的。這不會維持秩序。 示例:不允許這樣的組合 - {'Mary','little lamb'} – codemaniac
感謝您的示例:)幫助 – codemaniac
如果您在二進制中思考它,我不認爲這很難找到該模式數字,對吧? – Shahbaz