← 最新の論文
💻 computer science

Nearly Optimal Internal Dictionary Matching

本論文では、内部辞書照合問題に対して、異なるパターンの出現回数を数えるための初の O~(1)\tilde{O}(1) 時間の解法を含む、ほぼ最適なクエリおよび前処理時間を実現する O(n)O(n) サイズのデータ構造である Basic Substring Structure (BASS) を導入する。

原著者: Jingbang Chen, Jiangqi Dai, Qiuyang Mang, Qingyu Shi, Tingqiang Xu

公開日 2026-07-02
📖 1 分で読めます☕ さくっと読める

原著者: Jingbang Chen, Jiangqi Dai, Qiuyang Mang, Qingyu Shi, Tingqiang Xu

原論文は CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む

想像してみてください。あなたは、膨大な、終わりのない本(これを テキスト T と呼びます)を持っています。その本の中には、特別な単語やフレーズのリスト(辞書 D)が隠されており、それらはすべて本の中に存在しています。

この論文が解決する問題は、「ウォーリーをさがせ!」のようなゲームですが、少しひねりが加えられています。単に特定の単語を一つ見つけたいのではありません。あなたは、本の「どの部分」に対しても質問をしたいのです。例えば:

  • 「ページ50から100までの間に、私の特別な単語は合計で何回出現しますか?」
  • 「そのセクションには、何種類の異なる特別な単語が登場しますか?」
  • 「それらが現れるすべての箇所をリストアップしてください。」

かつて、これらの質問に答えるには、特に辞書が本の中の何千もの小さな断片で構成されている場合、非常に時間がかかったり、膨大なメモリを必要としたりしました。この論文は、これらの質問にほぼ瞬時に答えることができる、極めて効率的な情報の整理方法を導入しています。

大きなアイデア: 「基本部分文字列構造」 (BASS)

著者たちは、BASS と呼ばれる新しいツールを構築しました。BASSとは、本のあらゆる可能な断片をマッピングする、巨大で魔法のような 2Dグリッド またはスプレッドシートのようなものです。

  • グリッド: 行が「単語の開始位置」を表し、列が「単語の終了位置」を表すスプレッドシートを想像してください。このグリッドの各セルには、本の特定のテキストが入っています。
  • 着色: セルに単にテキストを書き込むのではなく、著者たちはセルに「色」を付けました。もしあるテキストの断片があなたの特別な辞書の一部であるなら、そのセルには特別な色が塗られます。
  • ブロック: ここに魔法のトリックがあります。著者たちは、見た目は異なっていても、実際には同じように振る舞う多くのセルがあることに気づきました。彼らはこれらのセルを、「階段状」の形をした「ブロック」としてグループ化しました。一つの階段状ブロック内のすべてのセルは、同じ「個性」(本の中で全く同じ場所に現れるという性質)を共有しています。

この階段状のブロックへと本を整理することで、コンピュータはすべてのページをチェックする必要がなくなります。単に「階段」を見て、そこで何が起きているかを確認するだけでよいのです。

このツールで何ができるのか?

論文によれば、BASSを用いることで、以下の5種類の質問に対して、これまでにない速さと少ないメモリで答えることができます。

  1. 出現回数のカウント (Count): 「私の単語は、このセクションに何回出現しますか?」
    • 改善点: 以前はこれには少し時間がかかっていました。今では、ほぼ一瞬です。著者らは、これがこの種の質問において可能な最速のスピードであることを証明しました。
  2. ユニークな単語のカウント (CountDistinct): 「私のリストにある異なる単語は何種類出現しますか?」
    • 画期的な進歩: これは難しい問題でした。以前は、推測するか、遅い手法を使う必要がありました。著者らはこれを完全に解決し、素早いセットアップの後、ほぼ瞬時(対数時間)に答えを出せるようにしました。
  3. レポート (Report & ReportDistinct): 「単語がどこにあるのか正確に示してください。」
    • 改善点: このツールは、コンピュータがそれらを出力できる最速のスピードで、場所をリストアップします。余計な待ち時間は発生しません。
  4. 存在確認 (Exists): 「このセクションに、私のリストにある単語は一つでもありますか?」
    • 改善点: これは一瞬で回答されます。

仕組み(比喩による説明)

巨大な倉庫(本)の中で、特定の材料を探しているところを想像してください。

  • 従来の方法: あなたはすべての通路を歩き、すべての棚をチェックし、アイテムを数えなければなりませんでした。もし異なるセクションについて知りたければ、再び倉庫全体を歩き直す必要がありました。
  • BASSによる方法: 著者たちは、倉庫の マップ を作成しました。
    • 彼らは、ある通路には常に同じ配置の箱があることに気づきました。そこで、これらの通路を「スーパー通路(等価クラス/ブロック)」としてグループ化しました。
    • 彼らは、これらのスーパー通路を繋ぐ ツリー(家系図のようなもの)を構築しました。ある場所の箱がどこにあるかを知っていれば、そのツリーが、実際にそこまで歩かなくても、関連する他の箱がどこにあるかを教えてくれます。
    • また、倉庫を逆方向(通路の端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端からではなく、端から

自分の分野の論文に埋もれていませんか?

研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。

Digest を試す →