{"id":39307707,"url":"https://github.com/takawitter/trie4j","last_synced_at":"2026-01-18T01:37:36.852Z","repository":{"id":2983434,"uuid":"3999381","full_name":"takawitter/trie4j","owner":"takawitter","description":"PATRICIA, Double Array, LOUDS Trie implementations for Java","archived":false,"fork":false,"pushed_at":"2024-07-16T08:47:43.000Z","size":2115,"stargazers_count":178,"open_issues_count":4,"forks_count":30,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-08-03T02:47:15.615Z","etag":null,"topics":["doublearray","java","louds","patricia","trie"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/takawitter.png","metadata":{"files":{"readme":"README.markdown","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"takawitter"}},"created_at":"2012-04-11T23:13:10.000Z","updated_at":"2025-05-10T04:38:45.000Z","dependencies_parsed_at":"2023-10-15T07:54:18.588Z","dependency_job_id":"7d025be8-2fe8-4f27-95a5-feaf0c131b73","html_url":"https://github.com/takawitter/trie4j","commit_stats":{"total_commits":476,"total_committers":4,"mean_commits":119.0,"dds":0.006302521008403339,"last_synced_commit":"a88c5debdc61fb5ec9139cbc9cb7b065842cc78b"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/takawitter/trie4j","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/takawitter%2Ftrie4j","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/takawitter%2Ftrie4j/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/takawitter%2Ftrie4j/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/takawitter%2Ftrie4j/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/takawitter","download_url":"https://codeload.github.com/takawitter/trie4j/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/takawitter%2Ftrie4j/sbom","scorecard":{"id":866309,"data":{"date":"2025-08-11","repo":{"name":"github.com/takawitter/trie4j","commit":"306f2745882c70d9ae29933ae01ffe4c0cb6e221"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.6,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/codecov.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 2/25 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":4,"reason":"binaries present in source code","details":["Warn: binary detected: trie4j/lib/asm-3.0.jar:1","Warn: binary detected: trie4j/lib/asm-tree-3.0.jar:1","Warn: binary detected: trie4j/lib/cobertura.jar:1","Warn: binary detected: trie4j/lib/jakarta-oro-2.0.8.jar:1","Warn: binary detected: trie4j/lib/junit-4.10.jar:1","Warn: binary detected: trie4j/lib/log4j-1.2.9.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/codecov.yml:8: update your workflow using https://app.stepsecurity.io/secureworkflow/takawitter/trie4j/codecov.yml/master?enable=pin","Info:   0 out of   1 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 0.9.10 not signed: https://api.github.com/repos/takawitter/trie4j/releases/124251183","Warn: release artifact 0.9.9 not signed: https://api.github.com/repos/takawitter/trie4j/releases/123278323","Warn: release artifact 0.9.8 not signed: https://api.github.com/repos/takawitter/trie4j/releases/9367477","Warn: release artifact 0.9.6 not signed: https://api.github.com/repos/takawitter/trie4j/releases/7103434","Warn: release artifact 0.9.10 does not have provenance: https://api.github.com/repos/takawitter/trie4j/releases/124251183","Warn: release artifact 0.9.9 does not have provenance: https://api.github.com/repos/takawitter/trie4j/releases/123278323","Warn: release artifact 0.9.8 does not have provenance: https://api.github.com/repos/takawitter/trie4j/releases/9367477","Warn: release artifact 0.9.6 does not have provenance: https://api.github.com/repos/takawitter/trie4j/releases/7103434"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 8 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-24T02:45:42.955Z","repository_id":2983434,"created_at":"2025-08-24T02:45:42.955Z","updated_at":"2025-08-24T02:45:42.955Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28526556,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T00:39:45.795Z","status":"ssl_error","status_checked_at":"2026-01-18T00:39:39.467Z","response_time":85,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["doublearray","java","louds","patricia","trie"],"created_at":"2026-01-18T01:37:36.769Z","updated_at":"2026-01-18T01:37:36.830Z","avatar_url":"https://github.com/takawitter.png","language":"Java","funding_links":["https://github.com/sponsors/takawitter"],"categories":[],"sub_categories":[],"readme":"\u003chtml\u003e\n\u003chead\u003e\n\u003cmeta name=\"author\" content=\"Takao Nakaguchi\" /\u003e\n\u003cmeta name=\"description\" content=\"Trie4J - various trie implementation for Java\" /\u003e\n\u003cmeta name=\"keywords\" content=\"Trie,Java,DoubleArray,Double Array,LOUDS,PATRICIA\" /\u003e\n\u003c/head\u003e\n\n# Trie4J - various trie implementation for Java.\n\nTrie4J is the sort of collection of various trie implementation.\n\nYou can get the binary using Maven:\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.github.takawitter\u003c/groupId\u003e\n    \u003cartifactId\u003etrie4j\u003c/artifactId\u003e\n    \u003cversion\u003e0.9.10\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nor from [Central Repository](https://central.sonatype.com/artifact/com.github.takawitter/trie4j)\n\n* Coming release: nothing planned.\n* 2023/10/9: [0.9.10](https://github.com/takawitter/trie4j/releases/tag/0.9.10) released.\n* 2023/10/2: [0.9.9](https://github.com/takawitter/trie4j/releases/tag/0.9.9) released.\n* 2018/1/24: [0.9.8](https://github.com/takawitter/trie4j/releases/tag/0.9.8) released.\n* 2017/10/22: [0.9.7](https://github.com/takawitter/trie4j/releases/tag/0.9.7) released.\n* 2017/7/20: [0.9.6](https://github.com/takawitter/trie4j/releases/tag/0.9.6) released.\n* 2016/10/28: [0.9.5](https://github.com/takawitter/trie4j/releases/tag/0.9.5) released.\n* 2016/10/22: [0.9.4](https://github.com/takawitter/trie4j/releases/tag/0.9.4) released.\n* 2016/5/28: [0.9.3](https://github.com/takawitter/trie4j/releases/tag/0.9.3) released.\n\n---\n### Performance comparison:\nwith 1.27 million words and 10.04 million chars contained in jawiki-20120220-all-titles-in-ns0.gz .\n\u003cbr/\u003eon MacOS X(10.7), Core i7 2.5GHz, Java 7 Update 21.  2013-5-14.\n\u003ctable\u003e\n\u003ctr\u003e\u003cth colspan=\"2\"\u003eclass\u003c/th\u003e\u003cth\u003enotes\u003c/th\u003e\u003cth\u003ebuild(ms)\u003c/th\u003e\u003cth\u003econtains(ms)\u003c/th\u003e\u003cth\u003eused heap(MB)\u003c/th\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd colspan=\"2\"\u003ejava.util.HashSet\u003c/td\u003e\u003ctd /\u003e\u003ctd align=\"right\"\u003e404\u003csup\u003e*1\u003c/sup\u003e\u003c/td\u003e\u003ctd align=\"right\"\u003e363\u003c/td\u003e\u003ctd align=\"right\"\u003e126.2\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd colspan=\"2\"\u003ejava.util.TreeSet\u003c/td\u003e\u003ctd /\u003e\u003ctd align=\"right\"\u003e\u003cfont color=\"red\"\u003e416\u003c/font\u003e\u003csup\u003e*1\u003c/sup\u003e\u003c/td\u003e\u003ctd align=\"right\"\u003e235\u003c/td\u003e\u003ctd align=\"right\"\u003e125.9\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd colspan=\"2\"\u003ePatriciaTrie(\u003ca href=\"https://github.com/takawitter/trie4j/blob/master/trie4j/src/org/trie4j/patricia/simple/PatriciaTrie.java\"\u003esrc\u003c/a\u003e)\u003c/td\u003e\n  \u003ctd\u003eSimple PATRICIA Trie.\u003c/td\u003e\u003ctd align=\"right\"\u003e371\u003csup\u003e*1\u003c/sup\u003e\u003c/td\u003e\u003ctd align=\"right\"\u003e247\u003c/td\u003e\u003ctd align=\"right\"\u003e90.8\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd rowspan=\"2\"\u003eTailPatriciaTrie(\u003ca href=\"https://github.com/takawitter/trie4j/blob/master/trie4j/src/org/trie4j/patricia/tail/TailPatriciaTrie.java\"\u003esrc\u003c/a\u003e)\u003c/td\u003e\n  \u003ctd\u003eSuffixTrieTailBuilder(\u003ca href=\"https://github.com/takawitter/trie4j/blob/master/trie4j/src/org/trie4j/tail/SuffixTrieTailBuilder.java\"\u003esrc\u003c/a\u003e)\u003c/td\u003e\n  \u003ctd rowspan=\"2\"\u003ePATRICIA Trie with tail string.\u003c/td\u003e\n  \u003ctd align=\"right\"\u003e937\u003csup\u003e*1\u003c/sup\u003e\u003c/td\u003e\u003ctd align=\"right\"\u003e248\u003c/td\u003e\u003ctd align=\"right\"\u003e76.8\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003eConcatTailBuilder(\u003ca href=\"https://github.com/takawitter/trie4j/blob/master/trie4j/src/org/trie4j/tail/ConcatTailBuilder.java\"\u003esrc\u003c/a\u003e)\u003c/td\u003e\n  \u003ctd align=\"right\"\u003e440\u003csup\u003e*1\u003c/sup\u003e\u003c/td\u003e\u003ctd align=\"right\"\u003e228\u003c/td\u003e\u003ctd align=\"right\"\u003e69.2\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd colspan=\"2\"\u003eDoubleArray(\u003ca href=\"https://github.com/takawitter/trie4j/blob/master/trie4j/src/org/trie4j/doublearray/DoubleArray.java\"\u003esrc\u003c/a\u003e)\u003c/td\u003e\n  \u003ctd\u003eSimple Double Array Trie.\u003c/td\u003e\n  \u003ctd align=\"right\"\u003e362\u003csup\u003e*2\u003c/sup\u003e\u003c/td\u003e\u003ctd align=\"right\"\u003e\u003cfont color=\"red\"\u003e98\u003c/a\u003e\u003c/td\u003e\u003ctd align=\"right\"\u003e52.6\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd rowspan=\"2\"\u003eTailDoubleArray(\u003ca href=\"https://github.com/takawitter/trie4j/blob/master/trie4j/src/org/trie4j/doublearray/TailDoubleArray.java\"\u003esrc\u003c/a\u003e)\u003c/td\u003e\n  \u003ctd\u003eSuffixTrieTailBuilder(\u003ca href=\"https://github.com/takawitter/trie4j/blob/master/trie4j/src/org/trie4j/tail/SuffixTrieTailBuilder.java\"\u003esrc\u003c/a\u003e)\u003c/td\u003e\n  \u003ctd rowspan=\"2\"\u003eDouble Array Trie with tail string.\u003c/td\u003e\n  \u003ctd align=\"right\"\u003e3,111\u003csup\u003e*2\u003c/sup\u003e\u003c/td\u003e\u003ctd align=\"right\"\u003e181\u003c/td\u003e\u003ctd align=\"right\"\u003e28.9\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003eConcatTailBuilder(\u003ca href=\"https://github.com/takawitter/trie4j/blob/master/trie4j/src/org/trie4j/tail/ConcatTailBuilder.java\"\u003esrc\u003c/a\u003e)\u003c/td\u003e\n  \u003ctd align=\"right\"\u003e2,532\u003csup\u003e*2\u003c/sup\u003e\u003c/td\u003e\u003ctd align=\"right\"\u003e154\u003c/td\u003e\u003ctd align=\"right\"\u003e33.6\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd rowspan=\"3\"\u003eTailLOUDSTrie(\u003ca href=\"https://github.com/takawitter/trie4j/blob/master/trie4j/src/org/trie4j/louds/TailLOUDSTrie.java\"\u003esrc\u003c/a\u003e)\u003c/td\u003e\n  \u003ctd\u003eSuffixTrieTailBuilder(\u003ca href=\"https://github.com/takawitter/trie4j/blob/master/trie4j/src/org/trie4j/tail/SuffixTrieTailBuilder.java\"\u003esrc\u003c/a\u003e)\u003c/td\u003e\n  \u003ctd rowspan=\"3\"\u003eLOUDS Succinct Trie with tail string.\u003c/td\u003e\n  \u003ctd align=\"right\"\u003e620\u003csup\u003e*2\u003c/sup\u003e\u003c/td\u003e\u003ctd align=\"right\"\u003e554\u003c/td\u003e\u003ctd align=\"right\"\u003e\u003cfont color=\"red\"\u003e15.4\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003eConcatTailBuilder(\u003ca href=\"https://github.com/takawitter/trie4j/blob/master/trie4j/src/org/trie4j/tail/builder/ConcatTailBuilder.java\"\u003esrc\u003c/a\u003e)\u003c/td\u003e\n  \u003ctd align=\"right\"\u003e\u003cfont color=\"red\"\u003e111\u003c/font\u003e\u003csup\u003e*2\u003c/sup\u003e\u003c/td\u003e\u003ctd align=\"right\"\u003e537\u003c/td\u003e\u003ctd align=\"right\"\u003e20.2\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003eConcatTailBuilder(\u003ca href=\"https://github.com/takawitter/trie4j/blob/master/trie4j/src/org/trie4j/tail/builder/ConcatTailBuilder.java\"\u003esrc\u003c/a\u003e)\nwith \u003ca href=\"https://github.com/takawitter/trie4j/blob/master/trie4j/src/org/trie4j/tail/index/SBVTailIndex.java\"\u003esbvTI\u003csup\u003e*3\u003c/sup\u003e\u003c/a\u003e\u003c/td\u003e\n  \u003ctd align=\"right\"\u003e\u003cfont color=\"red\"\u003e145\u003c/font\u003e\u003csup\u003e*2\u003c/sup\u003e\u003c/td\u003e\u003ctd align=\"right\"\u003e712\u003c/td\u003e\u003ctd align=\"right\"\u003e15.7\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd rowspan=\"3\"\u003eTailLOUDSPPTrie(\u003ca href=\"https://github.com/takawitter/trie4j/blob/master/trie4j/src/org/trie4j/louds/TailLOUDSPPTrie.java\"\u003esrc\u003c/a\u003e)\u003c/td\u003e\n  \u003ctd\u003eSuffixTrieTailBuilder(\u003ca href=\"https://github.com/takawitter/trie4j/blob/master/trie4j/src/org/trie4j/tail/SuffixTrieTailBuilder.java\"\u003esrc\u003c/a\u003e)\u003c/td\u003e\n  \u003ctd rowspan=\"3\"\u003eLOUDS++ Succinct Trie with tail string.\u003c/td\u003e\n  \u003ctd align=\"right\"\u003e654\u003csup\u003e*2\u003c/sup\u003e\u003c/td\u003e\u003ctd align=\"right\"\u003e571\u003c/td\u003e\u003ctd align=\"right\"\u003e\u003cfont color=\"red\"\u003e15.4\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003eConcatTailBuilder(\u003ca href=\"https://github.com/takawitter/trie4j/blob/master/trie4j/src/org/trie4j/tail/builder/ConcatTailBuilder.java\"\u003esrc\u003c/a\u003e)\u003c/td\u003e\n  \u003ctd align=\"right\"\u003e\u003cfont color=\"red\"\u003e119\u003c/font\u003e\u003csup\u003e*2\u003c/sup\u003e\u003c/td\u003e\u003ctd align=\"right\"\u003e552\u003c/td\u003e\u003ctd align=\"right\"\u003e20.1\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003eConcatTailBuilder(\u003ca href=\"https://github.com/takawitter/trie4j/blob/master/trie4j/src/org/trie4j/tail/builder/ConcatTailBuilder.java\"\u003esrc\u003c/a\u003e)\nwith \u003ca href=\"https://github.com/takawitter/trie4j/blob/master/trie4j/src/org/trie4j/tail/index/SBVTailIndex.java\"\u003esbvTI\u003csup\u003e*3\u003c/sup\u003e\u003c/a\u003e\u003c/td\u003e\n  \u003ctd align=\"right\"\u003e\u003cfont color=\"red\"\u003e163\u003c/font\u003e\u003csup\u003e*2\u003c/sup\u003e\u003c/td\u003e\u003ctd align=\"right\"\u003e741\u003c/td\u003e\u003ctd align=\"right\"\u003e15.6\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n *1 - build from string array.\n\u003cbr/\u003e *2 - build from other trie(org.trie4j.patricia.simple.PatriciaTrie).\n\u003cbr/\u003e *3 - shrinked index array using succinct bit vector.\n\n---\n\n### Sample codes:\n```java\nimport org.trie4j.doublearray.DoubleArray;\nimport org.trie4j.louds.TailLOUDSTrie;\nimport org.trie4j.patricia.PatriciaTrie;\n\npublic class Sample {\n\tpublic static void main(String[] args) throws Exception{\n\t\tPatriciaTrie pat = new PatriciaTrie();\n\t\tpat.insert(\"Hello\");\n\t\tpat.insert(\"World\");\n\t\tpat.insert(\"Wonder\");\n\t\tpat.insert(\"Wonderful!\");\n\t\tpat.contains(\"Hello\"); // -\u003e true\n\t\tpat.predictiveSearch(\"Wo\"); // -\u003e {\"Wonder\", \"Wonderful!\", \"World\"} as Iterable\u003cString\u003e\n\t\t\n\t\tDoubleArray da = new DoubleArray(pat); // construct DoubleArray from existing Trie\n\t\tda.contains(\"World\"); // -\u003e true\n\t\t\n\t\tTailLOUDSTrie lt = new TailLOUDSTrie(pat); // construct LOUDS succinct Trie with ConcatTailBuilder(default)\n\t\tlt.contains(\"Wonderful!\"); // -\u003e true\n\t\tlt.commonPrefixSearch(\"Wonderful!\"); // -\u003e {\"Wonder\", \"Wonderful!\"} as Iterable\u003cString\u003e\n\t}\n}\n```\n\n---\n\n### additional notes.\n\nThese classes are experimental and not contained in trie4j-SNAPSHOT.jar.\n* MultilayerPatriciaTrie: PatriciaTrie which has the pointer to another trie which store reversed tail string. ([src](https://github.com/takawitter/trie4j/blob/master/trie4j/src.kitchensink/org/trie4j/patricia/multilayer/MultilayerPatriciaTrie.java))\n * optimizes size using Multilayer Trie but no significant improvement.\n* OptimizedTailDoubleArray: DoubleArray with Tail Array and some optimization ([src](https://github.com/takawitter/trie4j/blob/master/trie4j/src.kitchensink/org/trie4j/doublearray/OptimizedTailDoubleArray.java))\n * feature completed but can't support large data (over several 10 thousants).\n\n---\n\n### additional notes(ja).\n\n2012年2月、1冊の本が発売されました。\n\n\"日本語入力を支える技術\" 変わり続けるコンピュータと言葉の世界 (WEB+DB PRESS plus) 徳永 拓之 (著) \n\n [![日本語入力を支える技術](http://ws.assoc-amazon.jp/widgets/q?_encoding=UTF8\u0026Format=_SL110_\u0026ASIN=4774149934\u0026MarketPlace=JP\u0026ID=AsinImage\u0026WS=1\u0026tag=takaoblogspot-22\u0026ServiceVersion=20070822)](http://www.amazon.co.jp/gp/product/4774149934/ref=as_li_ss_il?ie=UTF8\u0026tag=takaoblogspot-22\u0026linkCode=as2\u0026camp=247\u0026creative=7399\u0026creativeASIN=4774149934)\n\n多くのエンジニアがこの本に触発され、各種アルゴリズムの理解を深めたり、一から勉強を始めたり、\nまた中にはこれを機に様々なライブラリを実装し公開する人も出てきました。trie4jもそういったライブラリの一つで、各種トライ構造にターゲットを絞り、本書やその分野のブログなどを参考に実装されています。\n\nほとんどのクラスはシンプルな実装になっていますが、一部独自の最適化が入っています。また、各トライが提供するメソッドは、\n極力中間オブジェクトを作らないようになっており、オブジェクト生成/破棄によるパフォーマンス低下を起こさないよう実装されています。\n\n下記クラスは実験的実装で、trie4j-SNAPSHOT.jarには含まれません(src.kitchensinkにあります)。\n* 多層パトリシアトライ(MultilayerPatriciaTrie([src](https://github.com/takawitter/trie4j/blob/master/trie4j/src.kitchensink/org/trie4j/patricia/multilayer/MultilayerPatriciaTrie.java)))\n * [多層トライの実験結果 - やた＠はてな日記](http://d.hatena.ne.jp/s-yata/20101223/1293143633)\n   を参考に、接尾辞を格納するトライを内包しサイズを最適化した実装です。また、子を持たないノード、子を一つだけ持つノード、それぞれの終端/非終端版と、様々な種類のノードを用意して\n   使い分けることで、極力無駄なメモリを使わないようにしています。但しパトリシアトライのままなので、あまり効率が上がっていません。\n\n* TAIL配列付き最適化ダブルアレイ(OptimizedTailDoubleArray([src](https://github.com/takawitter/trie4j/blob/master/trie4j/src.kitchensink/org/trie4j/doublearray/OptimizedTailDoubleArray.java)))\n    * 未使用領域の開放やcheck配列をshortにした。実装は完了していますが、大規模なデータ(数万レコード超)には対応できません。\n\n\u003c/html\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftakawitter%2Ftrie4j","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftakawitter%2Ftrie4j","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftakawitter%2Ftrie4j/lists"}