0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonで学ぶアルゴリズム 第27弾:文字列探索の力任せ法

Posted at

#Pythonで学ぶアルゴリズム< 文字列探索の力任せ法 >

##はじめに
基本的なアルゴリズムをPythonで実装し,アルゴリズムの理解を深める.
その第27弾として文字列探索の力任せ法を扱う.

##文字列探索の力任せ法
前から順に一致する文字列を探すという非常に単純な方法.ここでは,検索対象を「テキスト」,見つけたい文字列を「パターン」と呼ぶこととする.例えば,'she sells sea shells'というテキストの中で,'sea'というパターンが最初に登場する位置を探すことを想定する.そのイメージ図を次に示す.
image.png
上図は少し省略して描いている.本当は,一致しなかったときには検索開始位置を1つ文字分ずつずらしていく.ここでは,イメージしやすいように,1文字目で不一致となる部分を省略している.上図からも分かるとおり,見つけ次第終了,見つけるまではひたすらずらしては探してという操作を繰り返す.文字通り,力任せ法である.

##実装
上の説明に従って,Pythonでの実装を行う.以下にソースコードとそのときの出力を示す.

#####ソースコード

search_string.py
"""
2021/02/01
@Yuya Shimizu

文字探索の力任せ法
"""

def search_string(text, pattern):
    for i in range(len(text)):
        match = True    #patternと一致すると仮定

        for j in range(len(pattern)):
            #patternを順に1文字ずつ比較する
            if text[i + j] != pattern[j]:
                match = False   #不一致
                break   #探索箇所を次に移行するため,これ以上の探索はしない

        if match:   #すべて一致した ⇒ 発見 ⇒ 探索終了
            return i


if __name__ == '__main__':

    TEXT = 'she sells sea shells'
    PATTERN = 'sea'

    where = search_string(TEXT, PATTERN)

    print(f"{where}\nthat is, you can find {PATTERN} by running 'TEXT[{where}: {where}+len(PATTERN)]'")

#####出力

10
that is, you can find sea by running 'TEXT[10: 10+len(PATTERN)]'

探索の結果,テキストのにおけるパターンの開始位置を出力し,その結果からどのようにしてそのパターンをテキストにおいてアクセスできるかというのも出力として表示させてみた.実際にその指示に従って,print()などで表示させれば,パターンが得られることが確認できる.

##注意
テキストが今回のようなサイズであれば一瞬で処理は終了するが,長いテキストになると長時間かかることは原理から容易にわかる.

##感想
今回は非常に単純であったが,注意にもあるように長いテキストだと大変なようだ.しかしながら,このような探索をしたいときというのは長いテキストから何かを見つけたいときが多いような気がする.もう少し工夫して高速にした方法は次回学ぶため,非常に楽しみである.また,参考文献では,テキストとターゲットをlist()を使ってリスト化していたが,文字列のままでも大丈夫であった.ここには何か違いがあるのだろうか.また調べてみたい.

##参考文献
Pythonで始めるアルゴリズム入門 伝統的なアルゴリズムで学ぶ定石と計算量
                         増井 敏克 著  翔泳社

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?