あなたの質問に示された出力を得るには、同じ順序ではありませんが、これは私がやることです。
私はMathematicaコードを使用しますが、概念は普遍的です。
string = "Mary had a little lamb";
set = StringSplit[string]
n = [email protected]
{"Mary", "had", "a", "little", "lamb"}
5
だから、言葉(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}}
は、我々はすべての方法は、直線的に5つの部分のセットを分割して取得します
最後に、一連の長さに従ってセットを分割する機能。私は鉱山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}}
ニース:)しかし、私の問題は制約があり、iが<3>または<4>またはそのような次の変数を持つことができません本当だ。それは注文を保存しません。 例:このような組み合わせは許可されていません - {'Mary'、 'little lamb'} – codemaniac
ありがとうございました:)助けられました – codemaniac
バイナリで考えるとパターンが見つからないとは思いません数字? – Shahbaz