アルゴリズム
文字列検索 †
HSPでは黙ってinstr()使えばいいと思いますが、プログラミングをやるうえで知っておいて損はないと思いますので・・・。
実行速度に興味のある人はinstr()と比較するのも面白いかも知れませんよ^^
ここで使う用語をまとめておきたいと思います。
- テキスト・・・検索対象の文字列
- パターン・・・検索する文字列
一番簡単な方法はテキストの先頭から1つづつずらしながらパターンと比較する方法です。
A l g o r i t h m :
はじめに・・・
検索開始点をテキストの先頭に置く。
テキストの注目点を開始点に置く。
パターンの注目点をパターン先頭に置く。
- テキストの注目点とパターンの注目点を比較する。
- 1で一致ならばそれぞれの注目点を進める。
- 1で不一致ならば検索開始点を進め、テキストの注目点を開始点に、パターンの注目点をパターン先頭に置く。
- どちらかの注目点がそれぞれの文字列の末尾に来るまで1を繰り返す。
- パターンの注目点が文字列の末尾なら検索開始点が見つかった位置となる。
|
力づく法では常に移動量が1だったのに対して、KMP法では比較に失敗した場合の移動量を事前に調べておき、それを元にパターンをずらすというアルゴリズムです。
A l g o r i t h m :
- 雛形です。
|
A l g o r i t h m :
- 雛形です。
|
A l g o r i t h m :
- 雛形です。
|
- っていうかねぇ・・・僕はこれらを自分で本買って覚えたんだけどね、これを書いちゃうとこれから覚える人はタダってこと?と思ってちょっと躊躇。(ケチ
というかちょっとWEBで解説しているところが無いか検索してみます。 -- kz3
- RK法という初耳のアルゴリズムが見つかりました。というかアルゴリズムの特許とか問題ないのかな? -- kz3
- 実装例を載せなければいいのか^^ -- kz3
- 僕の認識では特許とは、著作権と違い、技術の発展を目指し広く技術を公開することを指す。と認識しています。その技術を流用して商売をしなければ問題なしなはず。 -- araran
- なるほど・・・araranさんありがとうございます! -- kz3
- 書き途中で申し訳ありませんが、今日は隣町に買い物いったり髪切ったりなので続きは夕方になりそうですorz -- kz3
- ぁ、問題を簡単にするために2バイト文字は扱わないようにしているのは暗黙の了解ということで。 -- kz3