2012-01-21 18 views
1

の順序を維持しながら、組み合わせは、文字列が与えられた単語

例:事前に

{'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'} and so on... 

感謝:)

答えて

4

それについてこのように考える:

Mary <1> had <2> a <3> little <4> lamb 

これら<number> Sのそれぞれは、真または偽のいずれかになります。それが真実ならば、あなたはその場所で文を切ります。

あなたは+ nは1つの単語を持っている場合は、あなたの問題は、nビットで数値のバイナリ表現を通過するまで減少しますので、それは0からn-1^2の

例からである:

0110 -> {'Mary had', 'a', 'little lamb'} 
1111 -> {'Mary', 'had', 'a', 'little', 'lamb'} 
0001 -> {'Mary had a little', 'lamb'} 
1011 -> {'Mary', 'had a', 'little', 'lamb'} 
+0

ニース:)しかし、私の問題は制約があり、iが<3>または<4>またはそのような次の変数を持つことができません本当だ。それは注文を保存しません。 例:このような組み合わせは許可されていません - {'Mary'、 'little lamb'} – codemaniac

+0

ありがとうございました:)助けられました – codemaniac

+0

バイナリで考えるとパターンが見つからないとは思いません数字? – Shahbaz

0

ここには4つの区切り文字(スペース)があります。すべてのスペースは、文区切り記号で置き換えられてもよい(またはそうでなくてもよい)。したがって、16 = 2^4の場合、2進数0000 ... 1111に対応します。

1

あなたの質問に示された出力を得るには、同じ順序ではありませんが、これは私がやることです。
私は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}} 
関連する問題