この記事はCompetitive Programming Advent Calendar Div2013の13日目の記事です。 競プロにおいて、文字列関連の問題への解法は、ローリングハッシュだのManacherだのKMPだのZだのTrieだのSuffix Arrayだの、色々なアルゴリズム・データ構造を使います。今回はその中でSuffix Automatonを取り上げたいと思います。 Suffix AutomatonはSuffix AutomataとかDAWG(Directed Acyclic Word Graph)とかの名前で呼ばれることもあるデータ構造です。一言で言ってしまえば、"Suffix Treeのノードをまとめたもの", "文字列Tのすべての連続部分文字列を受理するオートマトン"ですが、色々便利な性質を持っています。ですが、Suffix Automatonそのものについてほとん
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? これは「文字列アルゴリズム Advent Calendar 2017」4日目の記事です. 3日目の記事は@itomomotiによる「周期性補題」でした. 5日目の記事は@kazu0x17による「木の同型性判定」です. 昨年の文字列アルゴリズム Advent Calendar では「Suffix Tree + Suffix Array = Suffix Tray」という記事を書きました. はじめに 文字列アルゴリズム,特に文字列に対する索引が好きです. 古典的な全文索引であるCompact Directed Acyclic Word Gr
JohnPaul Adamovsky (http://www.pathcom.com/~vadco/dawg.html) noticed that the fully reduced prefix+suffix tree contains minimal number of nodes, but every node contains the list of child nodes which requires a lot of space: the bare minimum is the number of children and one node index per child. In case of DAWG representing a large set of words there might be thousands of nodes, and the index size
トライをダブル配列で表現する Darts に対して,Darts clone は,基礎のデータ構造として Directed Acyclic Word Graph (DAWG) というグラフ構造を採用し,DAWG をダブル配列で表現するようになっています. Directed Acyclic Word Graph (DAWG) トライの共通部分木を併合することで得られるグラフ構造が DAWG です.トライからDAWG への変換では,登録するキーの末尾に共通性があるほど,多くのノードを取り除くことができます.これまでの実験により,日本語や英語の単語をたくさん登録する場合であれば,全体の 60 〜 70% 程度のノードを取り除けることが分かっています.特に有効なデータの例として,日本の郵便番号を DAWG に登録すると,そのサイズはトライの約 1/10 になります. DAWG はトライを圧縮したデー
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く