SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine(コードジン) DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

編集距離アルゴリズムを使って文字列を変換する

2つのドキュメントや文字列を比較して変更箇所を調べる方法

編集距離のプログラミング

 2つの任意の文字列について、編集グラフを作成し、そのグラフに対して最短経路の計算を行って最良解と編集距離を得るためのプログラムを作成できます。最短経路全般の検出方法については、私の記事「Network Know-How: Finding Shortest Paths」を参照ください。今回の編集グラフは最短経路の検出に都合のよい特殊な構造を備えているので、それを利用してプログラムを作成します。

 基本的な考え方は、左上隅の開始ノードからグラフ内のすべてのノードへの最短経路を計算することです。リンクはすべて右と下(斜めの場合はその両方)に向かうので、左上隅を起点として右方向と下方向に進む距離を計算します。

 最初に、左上隅のノードに距離0を割り当てます。このノードからそれ自体への経路は0だからです。次に、左端の列の各ノードに1、2、3という順序で値を割り当てます。これらのノードへの経路は、次にくる文字を変換後の文字列に追加する操作に対応します。図1では、「t」ノードのコストが1、「u」ノードのコストが2という具合になります。

 同様に、グラフの最上部の行の各ノードに1、2、3という順序で値を割り当てます。これらの経路は、元の文字列から文字を削除する操作に対応します。これで、グラフ内を進みながら他の値を記録できるようになります。

 2列目の上から下に並んでいる各ノードについて考えてみましょう。各ノードに到達するために取り得る経路は3つあります。

 1つ目は、上のノードから到達する経路です。この移動は文字列に新しい文字を1つ追加する操作に対応するので、このノードに到達するためのコストは、上のノードに到達するときにかかったコストより1大きくなります。

 2つ目は、左のノードから到達する経路です。この移動は元の文字列から文字を1つ削除する操作に対応するので、このノードに到達するためのコストは、左のノードに到達するときにかかったコストより1大きくなります。

 3つ目は、斜めのリンクに沿って到達する経路です。斜めのリンクのコストは0なので、コストは左上のノードに到達するときにかかったコストと同じになります。

 このノードに到達する最良のコストを見つけるために、アルゴリズムはこれら3つの経路をすべて検討し、最良の経路を選択します。アルゴリズムはこのノードの新しい距離を記録し、最良の経路を示すように求められた場合に備えて、それがどのノードからの経路かを記録します。

 図2に示すStringEditDistanceプログラムでは、このアルゴリズムを使っています。表示される結果は図1の青色の経路と同じになっている点に注目してください。つまり、「pa」を削除し、「tu」を追加し、「s」を削除しています。

図2 全部の経路を通過:StringEditDistanceプログラムは「parsnip」を5つのステップで「turnip」に変換する
図2 全部の経路を通過:StringEditDistanceプログラムは「parsnip」を5つのステップで「turnip」に変換する

次のページ

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Rod Stephens(Rod Stephens)

10冊以上の書籍と200点以上の雑誌記事の著者にしてコンサルタント。著作の大部分はVisual Basicに関するものである。これまで、修復ディスパッチ、燃料税トラッキング、プロフェッショナルなフットボールトレーニング、廃水処理、地図作成、チケット販売などの種々雑多なアプリケーションに従事してきた。彼のWebサイト「VB Helper」は、1か月に7百万以上のヒットを記録しており、Visual Basicプログラマ向けに3つのニューズレターと何千ものヒントや例を提供している。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4801 2012/07/09 15:32

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー