GithubHelp home page GithubHelp logo

trie4j's Introduction

# Trie4J - various trie implementation for Java.

Trie4J is the sort of collection of various trie implementation.

Build Status

Available through Maven Central Repository!!

<dependency>
    <groupId>com.github.takawitter</groupId>
    <artifactId>trie4j</artifactId>
    <version>0.9.1</version>
</dependency>
  • 2015/7/20: 0.9.1 released.
  • Coming Release: 0.9.2

Performance comparison:

with 1.27 million words and 10.04 million chars contained in jawiki-20120220-all-titles-in-ns0.gz .
on MacOS X(10.7), Core i7 2.5GHz, Java 7 Update 21. 2013-5-14.

classnotesbuild(ms)contains(ms)used heap(MB)
java.util.HashSet404*1363126.2
java.util.TreeSet416*1235125.9
PatriciaTrie(src) Simple PATRICIA Trie.371*124790.8
TailPatriciaTrie(src) SuffixTrieTailBuilder(src) PATRICIA Trie with tail string. 937*124876.8
ConcatTailBuilder(src) 440*122869.2
DoubleArray(src) Simple Double Array Trie. 362*29852.6
TailDoubleArray(src) SuffixTrieTailBuilder(src) Double Array Trie with tail string. 3,111*218128.9
ConcatTailBuilder(src) 2,532*215433.6
TailLOUDSTrie(src) SuffixTrieTailBuilder(src) LOUDS Succinct Trie with tail string. 620*255415.4
ConcatTailBuilder(src) 111*253720.2
ConcatTailBuilder(src) with sbvTI*3 145*271215.7
TailLOUDSPPTrie(src) SuffixTrieTailBuilder(src) LOUDS++ Succinct Trie with tail string. 654*257115.4
ConcatTailBuilder(src) 119*255220.1
ConcatTailBuilder(src) with sbvTI*3 163*274115.6
*1 - build from string array.
*2 - build from other trie(org.trie4j.patricia.simple.PatriciaTrie).
*3 - shrinked index array using succinct bit vector.

Sample codes:

import org.trie4j.doublearray.DoubleArray;
import org.trie4j.louds.TailLOUDSTrie;
import org.trie4j.patricia.simple.PatriciaTrie;

public class Sample {
	public static void main(String[] args) throws Exception{
		PatriciaTrie pat = new PatriciaTrie();
		pat.insert("Hello");
		pat.insert("World");
		pat.insert("Wonder");
		pat.insert("Wonderful!");
		pat.contains("Hello"); // -> true
		pat.predictiveSearch("Wo"); // -> {"Wonder", "Wonderful!", "World"} as Iterable<String>
		
		DoubleArray da = new DoubleArray(pat); // construct DoubleArray from existing Trie
		da.contains("World"); // -> true
		
		TailLOUDSTrie lt = new TailLOUDSTrie(pat); // construct LOUDS succinct Trie with ConcatTailBuilder(default)
		lt.contains("Wonderful!"); // -> true
		lt.commonPrefixSearch("Wonderful!"); // -> {"Wonder", "Wonderful!"} as Iterable<String>
	}
}

additional notes.

These classes are experimental and not contained in trie4j-SNAPSHOT.jar.

  • Multilayer Patricia Trie (src)
  • optimizes size using Multilayer Trie but no significant improvement.
  • DoubleArray Array with Tail Array and some optimization (src)
  • feature completed but can't support large data (over several 10 thoudsants).

additional notes(ja).

2012年2月、1冊の本が発売されました。

"日本語入力を支える技術" 変わり続けるコンピュータと言葉の世界 (WEB+DB PRESS plus) 徳永 拓之 (著)

日本語入力を支える技術

多くのエンジニアがこの本に触発され、各種アルゴリズムの理解を深めたり、一から勉強を始めたり、 また中にはこれを機に様々なライブラリを実装し公開する人も出てきました。trie4jもそういったライブラリの一つで、各種トライ構造にターゲットを絞り、本書やその分野のブログなどを参考に実装されています。

ほとんどのクラスはシンプルな実装になっていますが、一部独自の最適化が入っています。また、各トライが提供するメソッドは、 極力中間オブジェクトを作らないようになっており、オブジェクト生成/破棄によるパフォーマンス低下を起こさないよう実装されています。

下記クラスは実験的実装で、trie4j-SNAPSHOT.jarには含まれません(src.kitchensinkにあります)。

  • 多層パトリシアトライ(MultilayerPatriciaTrie(src))

  • 多層トライの実験結果 - やた@はてな日記 を参考に、接尾辞を格納するトライを内包しサイズを最適化した実装です。また、子を持たないノード、子を一つだけ持つノード、それぞれの終端/非終端版と、様々な種類のノードを用意して 使い分けることで、極力無駄なメモリを使わないようにしています。但しパトリシアトライのままなので、あまり効率が上がっていません。

  • TAIL配列付き最適化ダブルアレイ(OptimizedTailDoubleArray(src))

    • 未使用領域の開放やcheck配列をshortにした。実装は完了していますが、大規模なデータ(数万レコード超)には対応できません。

trie4j's People

Contributors

takawitter avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.