• 締切済み

条件付組合せ - ある文字列は何番目に出るか?

[ABC]の3文字を組み合わせて出来る文字列を順番に並べると、 1. A 2. B 3. AA 4. AB 5. BA 6. BB 7. AAA ... という風になります。 このとき、「Aの次にはBのみが出る」、「Bの次にはAのみが出る」という規則を適用すると、この順番は 1. A 2. B 3. AB 4. BA ... という風になります。 このような規則を適用したとき、「ある文字列が何番目に現れるか」を求めるには、どのように考えればよいのでしょうか? たとえば上記の例でいくと、「ABAB」という文字列が現れるのは一体何番目になるかという問題を、計算で求めるにはどのようにすれば良いのでしょうか。 つまり、 任意の文字を組み合わせて出来る文字列を順番に並べたパターンに対して、「ある文字の次には特定の文字しか出ない」というような規則をいくつか適用したとき、ある文字列が何番目に該当するかを求めるにはどうすれば良いか、 という問題です。 曖昧な部分がありましたら申し訳ありません。 補足させて頂きます。 ご回答よろしくお願い致します。

みんなの回答

回答No.1

>まずABCを並べる例でCが出てこないのはおかしいです。 >また、どのような規則で制限するかによって、並び方は違ってくるので決まった定式化は難しいと思います。 ただ、文字数の少ない方から辞書順などで番号をつけていくのであれば、2文字(a,b)だとa=0,b=1と考えれば2進法の文字列での表現になります。 ※n文字なら当然n進法です。 a 0 b 1 aa 00=0 ab 01=1・・・となります。 0,1,0,1,10,11となります。  ここにaの次はbがくる、bの次にはaがくるという規則で制限すると a 0 b 1 ab 01=1 ba 10 aba 010=10 とならびます。 ヒントになりましたでしょうか?

youarehere
質問者

お礼

すっかり間違ってしまいました・・・。 ABCではなく、ABを使った例の間違いでした。 申し訳ありません。 定式化は難しいのですか。ありがとうございます。 辞書順で少し思い出しました。 重複を許した順列・・・で合っていますでしょうか。 01で考えると、 1. a = 0 2. b = 1 3. aa = 00 4. ab = 01 5. ba = 10 6. bb = 11 7. aaa = 000 ... 規則をあてると 1. a = 0 2. b = 1 3. ab = 01 = 1 4. ba = 10 5. aba = 010 = 10 6. bab = 101 7. abab = 0101 = 101 8. baba = 1010 ... すみません、もう少し考えてみます。 ご回答ありがとうございました。

youarehere
質問者

補足

なんとか解けました。 ご回答有り難うございます。

関連するQ&A

  • 任意の文字の組み合わせ

    Math::BaseCalc モジュールを使って 10 進数をアルファベットに変換すると、 $ perl -MMath::BaseCalc -le 'print Math::BaseCalc -> new(digits => ['A' .. 'Z']) -> to_base(26);' BA このように 26 -> BA になりますが、これが 26 -> AA となるようなモジュールはないのでしょうか? 0 (A) == 00 (AA) なので、基数変換ならば 26 -> BA で正しいのは分かります。 しかし、文字列的な変換方法を探しています。 別な言い方をすると、A-Z の組み合わせでできる文字列を順番に得たいと思っています。 すなわち、A, B, C, ..., Z, AA, AB, AC, ..., ZZ, AAA のような文字列です。 アルファベットならば範囲演算子 (..) を使って得られますが、任意の digits で同じような文字列を得ることができるようなモジュールはないのでしょうか? (例えば、0-9 A-Z a-z ならば 0, 1, 2, ..., 9, A, B, C, ..., Z, a, b, c, ..., z, 00, 01, 02, ...) 現在は拙作のサブルーチンを使っているのですが、もし定番のモジュールがありましたら、お教え頂きたいです。 ご回答よろしくお願い申し上げます。

    • ベストアンサー
    • Perl
  • 列のユニークな文字列の個数を数える(条件付き)

    こんにちは。 「Excel 列の中のユニークな文字列の個数を数える」 http://okwave.jp/qa/q7469801.htmlではお世話になりました。 Excel 2007でA列にあるユニークな文字列の個数を数える マクロを教えていただき助かりました。 次のステップですが、 A列    H列 ABC12345 AB ABC12345 AB ABC12345 AB ABC12345 AB のようにH列がABだけのものの個数を数えたいです ABC54321 AB ABC54321 CD ABC54321 AB ABC54321 AB の様なものは数えません どのような条件をつければユニークな個数が数えられますか? おわかりの方お教えください。

  • A列の文字列からB列の文字列を

    A列の文字列からB列の文字列を 引く(マイナス)することはできないでしょうか? 例) A列 - B列 - C列 ABCD - CD - AB ABCD - BCD - A ABCD - GH - ABCD という風にC列に関数で結果を表示したいのです。 方法はないでしょうか? よろしくお願いします。

  • 文字列の組合わせについて

    仕事でこまっています。できるだけ早めに教えていただけると幸いです。 ABCDEFという文字列があるとします。この文字列の組合わせのパターン とそのパターンがいくつあるかしらべたいと思っています。 パターン化する際の条件としては ■重複する文字列のパターンは除く AABCDFとかABBDFDなどは除いてください ■文字数は1文字から6文字までです。 A、Bという組み合わせからABCDEFまでの中からの組合わせになります。 ■順番については、違っていても同一のものとする。 ABCでもBCAでも同じ組合わせということになります。 またこういう作業をする際にどうやって算出するのかも併せて教えて いただけると助かります。 以上よろしくお願いいたします。

  • perlの文字列組み合わせ

    perlでプログラムを作成中です。 作成したモノはうまく動かないので掲載できませんが、 どなたかお知恵を貸してください。  入力文字列に対して 1をA、2をB、3をC に置換するプログラムを作成中です。 ただし、全ての組み合わせを出力したいのです。 つまり、”213”と入力すると回答は、 B13 BA3 BAC 2A3 21C 2AC B1C と出力したいのです。  プログラムとしては、入力文字列を1つずつを配列に入れて、それぞれの変換 をかけ、1つずつ組み合わせて出力しているのですが、どうもうまくいきません。 手法は特に固執してませんので、どの様な形でも結構です。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 文字列検索で・・・

    Instr関数で文字列の存在チェックを行っています。 この場合、変数indexに1が入った場合 Instr("aaa1_a.sql","index") <----- この場合問題はないのですが、 Instr("aaa12_a.sql","index") <-----となる場合も値がとれてしまうので どうしたものかと困っています。 うまく検索させる方法はないでしょうか? ちなみに検索する文字列には aaa数字.sql aaa数字_a.sql aaa数字_b.sql というパターンがあります。 どなたかよきアドバイスをいただけませんでしょうか? よろしくお願い致します。

  • スペースを含んだ文字列から文字列の抽出

    エクセルバージョン2007 スペースを含む文字列で、A列に文字列がある時、以下の式を組んで文字列を抽出しています。 先頭にIDの数字が有る場合は、それぞれの目的に合った文字列を抽出しています。 B1=LEFT(A1,SEARCH(" ",A1,1)-1) C1=LEFT(MID(A1,SEARCH(" ",A1,1)+1,LEN(A1)-SEARCH(" ",A1,1)),SEARCH(" ",MID(A1,SEARCH(" ",A1,1)+1,LEN(A1)-SEARCH(" ",A1,1)),1)-1) 3 3df-32654-10 CCCCHH 10 1ab-12345-00 AAABBBB この文字列の場合、B列に3と10が表示、C列に 3df-32654-10 1ab-12345-00が表示されます。 先頭に、IDの無い文字列は以下の様な構成です。 6rt-95132-00 PPPKKK この文字列の場合、B列に6rt-95132-00、C列にPPPKKKが表示されてしまい、この場合、IDの数字が無い場合はB列には表示させない又は、C列に6rt-95132-00させたいと思っています。 ご教授頂ければ幸いです。 以上、宜しくお願い致します。

  • エクセルでの文字列操作

    間に空白がある文字列「AB C」を「AB C 」           「A BC」は「A  BC」           「A B」 は「A  B 」 と言う風に変更したいのですが何か良い方法はないでしょうか? 前が苗字で空白後名前なのですが印字する時のバランスをとりたいのです。皆さんどうかお願いします。

  • 複数セルから同じ文字列を抽出、並べ替え

    お世話になります。 セル式で定義したいのですが、いい考えが浮かびません。 A列に以下のような文字が並んでいるとします。実際は下に無制限とします。 A1  AAA A2  BBB A3  CCC A4  AAA A5  CCC A6  DDD A7  AAA これらのセル中の文字列から以下のように並べ替えてB列に配置したいのです。 B1  AAA B2  BBB B3  CCC B4  DDD 4種類の文字列となるのでB1:B4まで並べたいと思います。 B列のセルにセル式を記述したいと思います。 以上、ご教授下さい。

  • エクセルの文字列順に画像をリネームしたい

    csvデータにリネームしたい文字列と現在のファイル名があります。 A列にはリネームしたい文字列、B列には、現在のファイル名が順番に並んでいます。 これをどうにかしてリネームしたいのですが、何か良い方法はありませんでしょうか? A列リネームする文字列 | B列 現在のファイル名  -----------------------|------------------------ 1234 |010.jpg 2334 |030.jpg 4534 |abc.jpg 1258 |aaa.jpg 3134 |ddd.jpg