• ベストアンサー

条件付でのパターン抽出がわかりません

以下のような条件でのパターンで作成される文字列を抽出したいと思い、 処理を考えるのですがわかりません。 ヒントでも結構ですので、ご教授願います。 条件1  ○={a,b,c,d}  △={e,f,g}  □={h,i} 条件2  ○2つ、△2つ、□1つを選択。   ex.)○○△□△, ○△□○△, ○△△□○, ... 条件3  ○から重複しない2文字、△から重複しない2文字、□からは重複しない1文字を選択。   ex.)○={a,b}△={e,g}□={h}... 上記条件により作成される5文字の全てのパターンを抽出したい場合、 どのように考えればよいでしょうか? (条件2の全パターン)*(条件3の全パターン)で抽出可能?? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#94461
noname#94461
回答No.2

○2つ△2つが各々相互に区別出来ないと考えた場合のパターン数が30個、 異なった文字ペアの数が36種となります。 但し2文字ペアのものは相互に入れ替えたら2種の別の5文字パターンとなります。 その結果4000種前後の文字パターンになるはずです。 以上は途中/最終結果を略していますので、略さないで計算してください。

tkeno
質問者

お礼

回答ありがとうございます。 以下のように解釈しましたが、いかがでしょうか? > ○2つ△2つが各々相互に区別出来ないと考えた場合のパターン数が30個、 5P2/2*3P2/2 = 30  ※Pはパーミュテーション > 異なった文字ペアの数が36種となります。 4C2*3C2*2C1 =36   ※Cはコンビネーション > 但し2文字ペアのものは相互に入れ替えたら2種の別の5文字パターンとなります。 これは○○、△△ということでしょうか?? 理解できません。 上記より、パターン数としては30*36=1080通りにはならないのでしょうか?

その他の回答 (3)

  • R_Earl
  • ベストアンサー率55% (473/849)
回答No.4

ANo.1です。 プログラムで作るということで良いのでしょうか? 大雑把に作るなら次のようになるでしょう。 <処理1> まず適当な大きさの配列patternを作り、 「○2つ、△2つ、□1つからなる文字列」を格納します。 この時、i ≠ jならpattern[i] ≠ pattern[j]となるように 格納してください。 次のような感じです。 pattern[0] = "○○△△□" pattern[1] = "○○△□△" pattern[2] = "○○□△△" ・ ・ ・ pattern[N] = "□△△○○" (ここが末尾) <処理2> 各patternについて、 ○、△、□に文字を当てはめます。

tkeno
質問者

お礼

回答ありがとうございます。 処理で考えてるので、そのPattern[x]、および○、△、□それぞれの パターンが必要になりそうです。 重複しないパターンの実際の文字列作成を処理で行おうとすれば、 (全通りパターン)-(重複パターン)しかないんですかね。 ○であれば、4文字の中から2文字を作成するので、16文字を 作成しながら、2文字同じものを除外する形でしょうかね。

noname#94461
noname#94461
回答No.3

>上記より、パターン数としては30*36=1080通りにはならないのでしょうか? ここまでは正しいです。 但し、(ab),(ef),hの文字ペアを選んだ時、作成できる文字パターンはたとえば ab,ef,h; ab,fe,h; ba,ef,h; ba,fe,h の4種が作成できます。 従って全部で1080*4=4320通りになります。 

tkeno
質問者

お礼

重ねてありがとうございます。 納得できました。 もしくはパーミュテーションで○、△はそれぞれ異なる○、△ であるという考えでもいいのかもしれないですね。

  • R_Earl
  • ベストアンサー率55% (473/849)
回答No.1

文字列を抽出したい文章のコピーを作成します。 コピー文章のa, b, c, dを全て○に置換し、 e, f, g全てを△、h, i全てを□に置換します。 そして「○2つ、△2つ、□1つからなる文字列」を全て探します。 この時、条件を満たす文字列の位置情報をどこかに記録します。 後は先ほどの位置情報を利用して 元の文章中から「○2つ、△2つ、□1つからなる文字列」を抽出し、 条件3を満たすかどうかチェックしていけば良いと思います。

tkeno
質問者

お礼

回答ありがとうございます。 しかしながら、質問内容の曖昧さにより、誤解させてしまいました。 申し訳ありません。 質問文にて、正しくは「抽出」ではなく「作成」になります。 ですので、条件を全て満たした「abeif」「aghce」「defhc」...といった 文字列を作成するパターン処理をどう考えればよいかということでした。 わかりますでしょうか?

関連するQ&A