• ベストアンサー

不安ですから、教えて下さいませ。

例えば、2つの文字列が有りまして、 もし両者が一致している箇所の位置を探索するのでしたら、 『力任せ探索』とか『ボイヤームーア法』とかを適用させまして、 短い文字列の側を横へとずらしていく様ですが、 「逆に長い文字列の側を横へとずらしていく」という遣り方は、 効率の都合で中々採用されないのでしょうか?

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

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.1

はい,非効率ですからその方法を敢えて採用する理由がありません。

SakuraiMisato
質問者

補足

漠然とした内容の確認にも協力して下さいまして、 誠に有り難う御座います。 御返事の送信が酷く遅延しまして、 申し訳が御座いませんでした。

関連するQ&A

  • BM法(ボイヤームーア法)について

    BM法(ボイヤームーア法)について VisualC++にて、BM法のプログラムを作りたいと思いましたが、書き方が、わかりません。 概要を下記にまとめますので、どなたか、作ってみてくれませんか? お早めにお願いします!! 1.scanf(入力関数(これ以外でも可))にて、テキスト(検索される文字列)を入力する。 2.上記にて、パターン(比較する文字列)を入力する。 3.BM法にて、1.と2.を比べて、あったら、"○○文字目にありました。\n\n" 4.続けて検索するか、しないか(While(これ以外でも可))を入力してもらう。(C(大文字か、小文字のC)を入力したら、続ける。E(大文字か、小文字のE)を入力したら、終了する))) 上記のような、プログラム作りは可能でしょうか? 可能なら、作ってみてくれませんか? 不可能なら、どこがダメか、どうしたらよいか、を踏まえ、サンプル的なプログラムを作ってみてくれませんか? お願いします。

  • 文字列の置換

    VB6で開発してます。 以下のようなことをやりたいのですが、 効率のよい方法はないものでしょうか? <やりたいこと>  文字列1の中にある『_』と同じ位置にある  文字列2の文字を『_』に置き換えたい。  [変換前]   文字列1:12_3456_   文字列2:ABCDEFGH  [変換後]   文字列1:12_3456_   文字列2:AB_DEFG_ どなたかわかる方がいらっしゃったら教えて下さいm(_ _)m 

  • リストからデータを紐付けしたい

    エクセルで別シートのリストからデータを紐付けするには、 どのようにすればよろしいでしょうか? 関数でもVBAでも良いので教えてください。 リストのA列、B列に文字列が記入してあります。 Sheet1のB列の文字列を検索値として、 リストのA列の文字列と部分一致するものの横の列(B列)の値を Sheet1のC列に紐付けしたいのですが、どのようにすればよろしいでしょうか? ※リストの「1AA111」という文字列とSheet1の「1AA111-G」という文字列の場合    「1AA111」の箇所で紐付けしたい(図を参照下さい) エクセルは2007,2010を使用しております。 よろしくお願い致します。

  • CSS:ボックス内でaタグのリンク文字列を折り返したい。

    お世話になっております。 grandswellと申します。 div指定したボックス内に <a>でボックスの横幅を超える 長いリンク文字列を設定すると IE: <a>リンク文字列がボックス内に収まるよう ボックスが横に拡張される。 Firefox: <a>リンク文字列はボックスからはみ出る。 といったように両者挙動が違います。 これによりIE側の画面全体レイアウトが 崩れてしまい困っています。 下記設定ができる方法をご教示ください。 ------ IE、Firefoxとも <a>のリンク文字列をボックス内で折り返す。 もしくは IEで <a>リンク文字列はボックスからはみ出る。 ------

    • 締切済み
    • CSS
  • BM法(ボイヤームーア法)について(Visual Basic)

    BM法(ボイヤームーア法)について(Visual Basic) VisualBasicにて、BM法のプログラムを作りたいと思いましたが、書き方が、わかりません。 概要を下記にまとめますので、どなたか、作ってみてくれませんか? お早めにお願いします!! 1.テキストボックス(入力(これ以外でも可))にて、テキスト(検索される文字列)を入力する。 2.上記にて、パターン(比較する文字列)を入力する。 3.BM法にて、1.と2.を比べて、あったら、ラベル(これ以外も可)にて a(たとえば) & "文字目にありました。" & Chr(13) & Chr(13) 4.続けて検索するか、しないか(While(これ以外でも可))をテキストボックス(これ以外でも可)にて入力してもらう。(C(大文字か、小文字のC)を入力したら、続ける。E(大文字か、小文字のE)を入力したら、終了する))) すべての入力には、テキストボックス(これ以外でも可)にて入力してもらい、ボタンをクリックすることによって、変数に代入される。 こちらの方法では、フォームのイラストを載せていただければ、ありがたいです。 上記のような、プログラム作りは可能でしょうか? 可能なら、作ってみてくれませんか? 不可能なら、どこがダメか、どうしたらよいか、を踏まえ、サンプル的なプログラムを作ってみてくれませんか? お願いします。

  • EXCELの検索関数について

    EXCELの関数等で、ある文字数をシート全体で検索し、完全一致する文字列が記入されたセルの位置を返してくれるような方法はありますでしょうか?

  • エクセルを使って、文章の任意の箇所に指定したセルの文字列を代入したいと

    エクセルを使って、文章の任意の箇所に指定したセルの文字列を代入したいと考えているのですができるでしょうか? 例えば、A1セルに 「これはB1です。C1の形をしています。」という文字列を記入したとします。 "B1"と書かれている箇所にはB1セルに書いた文字列が、"C1"と書かれている箇所にはC1に書いた文字列が表示されるようにしたいのです。 アナログな方法としては、文章を区切って、A2セルに「これは」、A3セルに「です。」、A4セルに「の形をしています。」と記入し、任意のセルで&を使って(文字列結合っていうのでしょうか)、「=A2&B1&A3&C1$A4」とすればできますよね。 ただ、これだと繋げるセルの個数が多い時に効率が悪いのだろうな、と思うのです。 他の方法でもっと効率よく実行する方法がありましたら、どなたかご教授頂けると光栄です。 宜しくお願いいたします。

  • INSTR

    こんにちわ。 なぜかオラクルシルバーという資格を取らなければいけないことになりました。 私パソコンなんて全然わからないのに・・。 今、翔泳社から出ている「オラクルマスター教科書 Silver」という本で勉強中ですが、わからない事がありますので教えていただけたら嬉しいです! 文字列関数のINSTRについてなんですが、教科書に例として INSTR('SYSTEMTECHNOLOGY-I','E',8,1) ----------------------------------- 9 と載っています。 INSTRの定義は、INSTR(char1,char2,n,m)で、 char1のn番目の文字からchar2の探索を開始し、char2がm番目に現れる位置を戻す、とあります。 なので、この例題の場合は、 'SYSTEMTECHNOLOGY-I'の8版目の文字列→E から E の探索を開始し、 E が 1 番目に現れる位置を戻すのですから、 答えは0だと思うのですが・・・・・・・ 私の考え方はどこが間違っているのでしょうか。 数学は苦手なんです~~~ 宜しくお願いします!!

  • Excel97で、If文をなんとかしたい

    IF文でなんとかなりそうなんですが、IF文を使った事がなくて。 A列   B列   C列    任意の位置のセルD 数式  文字列   数式  文字列 数式  文字列 数式  文字列 こんな表で、Bの文字列の値と、Dのセルの値が一致した時、Aの数式の値(数字)をCの列に表示させ、BとDの文字が一致しない時は、”エラー”を表示させたいんですが、どういう風にすればいいのでしょうか? IF文を使えばいいのでしょうか? どういう風に、数式を立てればいいのかわかりません。 どなたか詳しい方、教えていただけませんか?

  • 部分文字列の一致を検出

    2つの文字列がありstring1とstring2とします。 やりたいことは、string1の中のある部分文字列がstring2の部分文字列と一致する場合、真を返す関数を作りたいのです。関数プロトタイプのイメージはこんな感じです。 bool CheckPartialMatch(char* string1, char* string2, int minChars); [機能] string1とstring2の部分文字列(minChars文字数以上)の一致の有無を調査する。 大文字と小文字の区別はしない。 [パラメータ] string1:比較元のNULL終端文字列 string2:比較先のNULL終端文字 minChars:最小一致文字数 例として下記のようなケースを考えます。 string1="BananaAppleOrange" string2="LemonPineappleKiwi" minChars=4の場合、上記例では"appl"の4文字が一致しますのでtrueが返ることになります。 上記例では、minChars<=5ならtrue, minChars>=6ならfalseとなります。 部分一致が1か所でも見つかれば、その時点で以降の調査を打ち切ります。 何か所一致したとか、一致した位置といった情報は返しません。(位置情報は追加コストなしで返せるでしょうが、今回は必要ありません) もちろん、ベタにstring1の1文字目から順に逐一string2と比較すれば実現できるのですが、それでは時間がかかります。 実際には、この処理をあるフォルダ内の全ファイル名に対して行いたいと思っています。 例えばファイル数が100とすると、組み合わせの数は100*(100-1)/2で4950となります。 仮に1ペアのチェックの所要時間が10msとしても、トータルで約50秒かかることになります。 1000ファイルともなると優に1時間を超える所要時間となり、現実的ではありません。 メモリを食い尽くすような処理ではないので放っておけば終わるのでしょうが、本当は数千のファイルに対してこの処理を行いたいと思っています。 以上を高速に処理する手段やアルゴリズムはないでしょうか? boostなど外部のライブラリを使用した方が早いのであれば、それをご提案頂いても構いません。 実際の使用環境ではminCharsが4程度、比較文字列は平均して20文字程度(2バイト文字含む)を想定しています。 処理時間を低減するため、対象文字を英数字('A-Z'、'a-z'、'0-9')のみに限定することもオプションとして考慮したいと思っています。ファイル名ですので、実際には文字列内に2バイト文字や記号類も混じっています。 あらかじめ全ての入力文字列に対して英字を小文字に変換しておくとか、英数字以外の文字を(連続する場合はまとめて)代替文字("@"等)に置換しておけば少しは負荷軽減になるかとは思いますが、効果のほどは不明です。

専門家に質問してみよう