• Stars
    star
    268
  • Rank 153,144 (Top 4 %)
  • Language
    Java
  • Created about 12 years ago
  • Updated over 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Java porting of Darts (Double ARray Trie System)

darts-java: Double-ARray Trie System Java implementation.

概要

Taku Kudo さんの Double Array Trie の C++ 実装 (*1) を MURAWAKI Yugo さんが Java ポーティングしたバージョン (*2) に対して、 より Java らしいインタフェースに変更し、また性能面も改善した Darts の Java 実装です。

元実装 (Java ポーティング版) からの改善点

  • インタフェースの改善
  • 文字列の char[] 表現や配列の多用を改め、より Java らしいインタフェースで、かつ手軽に利用できるインタフェースとしました。
  • 入力データによってエラーとなるケースへの対処
  • ヒープ消費量の改善
  • Trie 構築時、および構築後のヒープ消費量が少なくなるようにしました (元実装の約 26% のヒープ消費量)。
  • 実行速度の改善
  • Trie の構築 (約 2.6 倍) や exact match での検索 (約 1.7 倍)、common prefix での検索 (約 1.2 倍) それぞれについて処理性能を向上しました。

使い方

DoubleArrayTrie.java を単品でご利用ください(実装はこのファイル一つで完結しています)。

Benchmark

テストデータ

Ubuntu 12 の /usr/share/dict/words (916 KB、99171 語) をテストデータとして利用しています。

測定方法

  • ヒープ消費量
  • DoubleArrayTrie#build() の呼び出し前後それぞれにおいて、ヒープ消費量を Runtime#totalMemory() / Runtime#freeMemory() にて計測し、その差分をとることで 構築後のヒープ消費量を算出しています。
  • build() 処理時間
  • ファイルから読み込んだテストデータを build() で 50 回処理し、その平均と標準偏差を算出しています。
  • exactMatchSearch() 処理時間
  • テストデータをもとに構築された Trie に対して、テストデータの語句すべてを 順に exact match 検索する処理を 50 回実施し、その平均と標準偏差を算出しています。
  • commonPrefixSearch() 処理時間
  • exactMatchSearch() と同様に、テストデータをもとに構築された Trie に対して、 テストデータの語句すべてを順に common prefix 検索する処理を 50 回実施し、その平均と標準偏差を算出しています。
  • 元実装では、commonPrefixSearch() の結果を同メソッドに渡した int 配列で受け取るインタフェースと なっているため、検索結果の個数を求めるためと、実際の結果を受け取るためのそれぞれ1回ずつ (合計2回)、commonPrefixSearch() を呼び出しています。

測定結果

                              original     imploved
====================================================
ヒープ消費量 [byte]         62,287,864   16,780,160
----------------------------------------------------
build() [msec]                  165.68        64.26
  (標準偏差)                    (82.87)       (6.74)
----------------------------------------------------
exactMatchSearch() [msec]        10.88         6.24
  (標準偏差)                     (7.21)       (7.73)
----------------------------------------------------
commonPrefixSearch() [msec]      17.18        14.04
  (標準偏差)                     (4.68)       (4.75)
----------------------------------------------------

License

LGPL と修正 BSD のデュアルライセンスです。 各ライセンスの詳細は LGPL ファイル、BSD ファイルをご覧ください。

TODO

  • Javadoc を記述する。

More Repositories

1

xgboost-predictor-java

Pure Java implementation of XGBoost predictor for online prediction tasks.
Java
338
star
2

lz4-ruby

Ruby bindings for LZ4 (Extremely Fast Compression algorithm)
Ruby
65
star
3

markdown-previewer

Real-time Markdown & RDoc Previewer without any AJAX requests.
JavaScript
29
star
4

fast-rng-java

fast-rng: Fast random number generator for Java
Java
19
star
5

xor-filter

Production-ready Java implementation of the Xor Filter.
Java
17
star
6

node-marisa-trie

marisa-trie for Node.js
C++
11
star
7

snowflake-id

Twitter's Snowflake ID to Time conversion module
Ruby
8
star
8

bandit-simulator

Web-based bandit algorithm simulator
JavaScript
8
star
9

zipzop

Zip archive recompressor with Google's zopfli library.
C
8
star
10

typeorm-logger-adaptor

Logger adaptors for TypeORM
TypeScript
7
star
11

action-enforce-timeout-minutes

Enforces setting timeout-minutes of the workflow jobs to prevent waste of minutes quota.
TypeScript
5
star
12

jubaba-prototype

Java からの Jubatus の利用を楽にするためのラッパーライブラリ (プロトタイプ)
Java
5
star
13

xgboost-predictor-benchmark

Java
5
star
14

xgboost-dataframe-prototype

A prototype XGBoost integration with Spark and DataFrame (spark.ml)
Scala
4
star
15

java-playground

Playground of Java
Java
4
star
16

arow

A pure ruby implementation of the AROW
Ruby
3
star
17

stackdriver-friendly-json-logging-example

Sample code of the article: https://k11i.biz/blog/2018/10/03/stackdriver-logging-friendly-layout-java/
Java
2
star
18

dbflute-fes-2014-demo

DBFlute フェス 2014 ( http://connpass.com/event/9544/ ) の発表で利用したデモプログラム
Java
2
star
19

mllib-naivebayes-demo

Java
2
star
20

popcount-java-test

Java における各種 popcount 実装の性能比較をするためのプログラムです。
Java
2
star
21

ts-multipass

Shopify Multipass module for TypeScript.
TypeScript
1
star
22

winston-format-console-ootb

Winston formatter for console output out-of-the-box.
TypeScript
1
star
23

typescript-node-config-and-zod

An example of how to use node-config type safely
TypeScript
1
star
24

rapidhash-js

A TypeScript implementation of the rapidhash.
TypeScript
1
star
25

javajo-spark-ml-demo

A demo ML application using spark
Scala
1
star
26

gradle-scala-cross-build-demo

Cross-building Scala project using Gradle
Groovy
1
star
27

shibuya-java4

第4回 #渋谷java で発表したときのデモコードです。
Java
1
star
28

k11i-trie

Java implementation of Trie
Java
1
star
29

airflow-playground

Python
1
star
30

fast-loaded-dice-roller-java

Java implementation of the Fast Loaded Dice Roller
Java
1
star
31

sab-usage-detector

Detects usage of SharedArrayBuffer
TypeScript
1
star
32

croppng

Fast PNG cropping and resizing (upscaling) library
Java
1
star
33

slack-bolt-aws

AWS integrations for Bolt for JavaScript
TypeScript
1
star