Shift-orアルゴリズムとは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > Shift-orアルゴリズムの意味・解説 

Bitapアルゴリズム

(Shift-orアルゴリズム から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/01/08 17:36 UTC 版)

Bitapアルゴリズム: Bitap algorithm)とは、ビット演算並列性を利用した文字列探索アルゴリズムである。Baeza–Yates–Gonnetアルゴリズムや、shift-andアルゴリズムshift-orアルゴリズムとも呼ばれる(andとorがあるのは、ブール代数の双対性にもとづくバリエーションである)。レーベンシュタイン距離などの編集距離に基づく「似た」文字列を見つけ出すあいまい検索英語版に利用できることが、他の文字列探索アルゴリズムにない特徴である。


  1. ^ 直訳すれば「ビット並列近似的パターンマッチング」。
  2. ^ ~ビット単位のNOT
  3. ^ 例えば pattern: "acbaca" なら6文字なので下位6ビット分。
  4. ^ この場合のレーベンシュタイン距離は、1文字挿入、1文字除去、1文字置換の全てを距離1として計測したものとなる。記載のアルゴリズムに幾許かの変更を施すことで、置換の距離を2にすることもできる。(#文字の挿入・置換・除去に対応した検索を参照)
  5. ^ WuとManberの原論文は、この記事の実装例と同じくshift-and型ではあるものの、ビット順が逆(1文字目が上位でマッチングを進める度に右シフトしていく)で説明されており、また右シフトは必ず最上位ビットを1で埋める ("We assume that the right shift fills the first position with a 1."[5]:3) とあらかじめ規定して説明している。ここでは左シフトでマッチングが進行し、1でのORも明記する形で説明する。
  6. ^ OR用マスクを連想配列でない配列で ormask[S] のように取得することを考えると、OR用マスクは巨大なものになりえる。例えば32文字のパターンでマッチングするとき、通常の配列で単純にOR用マスクを実装すると 4294967296 (配列の要素数: すなわち32ビット整数の取りえる全ての値の数) * 4 (OR用マスクのバイト長) = 16 GB ものメモリが必要になる。連想配列を使用すれば、Sが取りえない値についてメモリを確保しないですむため問題は緩和されるが、それでもXなどのマーカーが32個あるような複雑な正規表現の場合は同じ問題に直面する。OR用マスクが使用するメモリを削減する方法としては、Sの値を1バイト(8ビット)ごとに分割し、それぞれのバイトごとにOR用マスクの配列を用意することが考えられる[5]:11。この対策により、前記の32文字パターンの場合、通常配列でもOR用マスクが使用するメモリ量は 256 (配列の要素数: すなわち8ビット整数の取りえる全ての値の数) * 4 (OR用マスクのバイト長) * 4 (Sの分割数) = 4 KB ですむ。



Shift-orアルゴリズム

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/09/12 03:39 UTC 版)

Bitapアルゴリズム」の記事における「Shift-orアルゴリズム」の解説

上の説明はshift-and型のバリエーション前提としている。ブール代数双対性により、このアルゴリズムにはshift-or型のバリエーションがある。shift-orアルゴリズムでは、shift-andアルゴリズムにおけるビット反転させた上でビット単位のORで探索を行う。すなわち、#実装例Rubyコードstate(#アルゴリズムの表のR)の初期状態 (R0) は全て1が立っているビット列になり、文字列比較をしていた部分である state = (state << 1 | 1) & mask[tc] は state = (state << 1) | ~mask[tc] になる。state使用するビット範囲最上位ビットが0になったときにパターンマッチする部分発見されたことになる。 まとめると、shift-orでは実装例コード黄色ハイライトした部分が以下のように変更される。 # 実際にtext照合させる state = ~0 # 状態遷移保持 ret = Array.new # マッチし位置をまとめるための配列 text.chars.each_with_index do |tc, i| state = (state << 1) | ~mask[tc] if (state & finish) == 0 # 最上位ビットが0である ret.push(i) # マッチし位置iを配列追加 end end mask[tc] をあらかじめビット反転しておけば、 state = (state << 1) | mask[tc] としてやや効率化できる。Shift-andと比較すると、1とのビット単位のORを取る操作減っているが、実際の性能への影響例えC言語実装機械語コンパイルされた時、実行速度がどの程度改善するか)は微妙だろう。

※この「Shift-orアルゴリズム」の解説は、「Bitapアルゴリズム」の解説の一部です。
「Shift-orアルゴリズム」を含む「Bitapアルゴリズム」の記事については、「Bitapアルゴリズム」の概要を参照ください。

ウィキペディア小見出し辞書の「Shift-orアルゴリズム」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ

「Shift-or アルゴリズム」の例文・使い方・用例・文例

Weblio日本語例文用例辞書はプログラムで機械的に例文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「Shift-orアルゴリズム」の関連用語

Shift-orアルゴリズムのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Shift-orアルゴリズムのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのBitapアルゴリズム (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのBitapアルゴリズム (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。
Tanaka Corpusのコンテンツは、特に明示されている場合を除いて、次のライセンスに従います:
 Creative Commons Attribution (CC-BY) 2.0 France.
この対訳データはCreative Commons Attribution 3.0 Unportedでライセンスされています。
浜島書店 Catch a Wave
Copyright © 1995-2024 Hamajima Shoten, Publishers. All rights reserved.
株式会社ベネッセコーポレーション株式会社ベネッセコーポレーション
Copyright © Benesse Holdings, Inc. All rights reserved.
研究社研究社
Copyright (c) 1995-2024 Kenkyusha Co., Ltd. All rights reserved.
日本語WordNet日本語WordNet
日本語ワードネット1.1版 (C) 情報通信研究機構, 2009-2010 License All rights reserved.
WordNet 3.0 Copyright 2006 by Princeton University. All rights reserved. License
日外アソシエーツ株式会社日外アソシエーツ株式会社
Copyright (C) 1994- Nichigai Associates, Inc., All rights reserved.
「斎藤和英大辞典」斎藤秀三郎著、日外アソシエーツ辞書編集部編
EDRDGEDRDG
This page uses the JMdict dictionary files. These files are the property of the Electronic Dictionary Research and Development Group, and are used in conformance with the Group's licence.

©2024 GRAS Group, Inc.RSS