Dame

出典: やる気向上作戦

メインページ


目次

何ですかこれは?

効率的なTrieの実装方法であるDouble-ArrayのC++ライブラリ。

割合 http://citeseer.ist.psu.edu/aoe92efficient.html に忠実に作っています。

ヘッダライブラリなので、includeするだけで使えます。多分プラットフォーム非依存。 なお、以下の拡張を実装しています。

  • TAIL
  • G-link

できること

  • std::set<std::string> 的動作 (完全互換ではありません)
  • Common prefix search
  • Longest prefix match

使い方

#include <iostream>
#include "dame.h"
 
dame::DoubleArrayTrie trie;
trie.insert("bachelor");
trie.insert("jar");
trie.insert("badge");
trie.insert("baby");
 
// babyを検索
dame::DoubleArrayTrie::iterator it = trie.find("baby");
if (it != trie.end()) {
std::cout << "baby found!" << std::endl;
}
 
// "ba"で始まる全てのキーを探索
dame::DoubleArrayTrie::iterator endit;
it = trie.findPrefixedBy("ba", endit);
while (it != endit) {
std::cout << *it << std::endl;
++it;
}
 
// "bachelorism"の最長prefixを探索
it = trie.findLongestPrefixOf("bachelorism");
if (it != trie.end()) {
std::cout << *it << std::endl;
}

バグ

バグ?あー、うん、有るんじゃないかな。多分。

ライセンス

Public Domain

ダウンロード

履歴

  • 2006/5/30 ver. 1.3
    • iteratorが、キー以外を指さないようにした。DoubleArrayTrieElementからvalueメンバを削除。代わりにTAILの先頭に詰めるようにした。
  • 2006/5/29 ver. 1.2
    • iteratorを引数にとるinsert(), erase()を追加。
    • charとarray_index_tのマッピングを行うクラスを切り出し、テンプレート引数で与えるようにした。
  • 2006/5/28 ver. 1.1
    • 空文字列も挿入できるように仕様を変更。
    • reserve()追加。
    • find(), insert(), erase()がconst std::string&を引数にとることができるようにした。
    • std::setとの整合性のため、insert()がstd::pair<iterator,bool>を返すよう変更。
  • 2006/5/27 ver. 1.0
    • iterator実装。プレフィックスサーチ実装。
  • 2006/5/26 ver. 0.1
    • G-link実装。衝突解決のバグを修正。
  • 2006/5/24 Public Release
個人用ツール