Module btrie

A trie data structure implementation.

The trie (i.e., from "retrieval") data structure was invented by Edward Fredkin (it is a form of radix sort). The implementation stores string suffixes as a list because it is a PATRICIA trie (PATRICIA - Practical Algorithm to Retrieve Information Coded in Alphanumeric, D.R.Morrison (1968)).

This Erlang trie implementation uses binary keys.

Copyright © 2010-2025 Michael Truog

Version: 2.0.8 Apr 17 2026 10:58:47 ------------------------------------------------------------------------

Authors: Michael Truog (mjtruog at protonmail dot com).

Description

A trie data structure implementation.

The trie (i.e., from "retrieval") data structure was invented by Edward Fredkin (it is a form of radix sort). The implementation stores string suffixes as a list because it is a PATRICIA trie (PATRICIA - Practical Algorithm to Retrieve Information Coded in Alphanumeric, D.R.Morrison (1968)).

This Erlang trie implementation uses binary keys. Using binary keys means that other data structures are quicker alternatives, so this module is probably not a good choice, unless it is used for functions not available elsewhere.

Data Types

empty_trie()

empty_trie() = <<>>

nonempty_trie()

nonempty_trie() = {integer(), integer(), tuple()}

trie()

trie() = nonempty_trie() | empty_trie()

Function Index

append/3
append_list/3
erase/2
erase_similar/2
fetch/2
fetch_keys/1
fetch_keys_similar/2
filter/2
find/2
find_prefix/2
find_prefix_longest/2
find_prefixes/2
fold/3
fold_similar/4
foldl/3
foldl_similar/4
foldr/3
foldr_similar/4
foreach/2
from_list/1
is_key/2
map/2
merge/3
new/0
new/1
prefix/3
size/1
store/2
store/3
take/2
to_list/1
to_list_similar/2
update/3
update/4
update_counter/3

Function Details

append/3

append(Key::<<_:8, _:_*8>>, Value::any(), Node::trie()) -> nonempty_trie()

append_list/3

append_list(Key::<<_:8, _:_*8>>, ValueList::list(), Node::trie()) -> nonempty_trie()

erase/2

erase(Key::<<_:8, _:_*8>>, Node::trie()) -> trie()

erase_similar/2

erase_similar(Similar::<<_:8, _:_*8>>, Node::trie()) -> [<<_:8, _:_*8>>]

fetch/2

fetch(X1::<<_:8, _:_*8>>, Node::nonempty_trie()) -> any()

fetch_keys/1

fetch_keys(Node::trie()) -> [<<_:8, _:_*8>>]

fetch_keys_similar/2

fetch_keys_similar(Similar::<<_:8, _:_*8>>, Node::trie()) -> [<<_:8, _:_*8>>]

filter/2

filter(F::fun((<<_:8, _:_*8>>, any()) -> boolean()), Node::trie()) -> trie()

find/2

find(X1::<<_:8, _:_*8>>, Node::trie()) -> {ok, any()} | error

find_prefix/2

find_prefix(X1::<<_:8, _:_*8>>, X2::trie()) -> {ok, any()} | prefix | error

find_prefix_longest/2

find_prefix_longest(Match::<<_:8, _:_*8>>, Node::trie()) -> {ok, <<_:8, _:_*8>>, any()} | error

find_prefixes/2

find_prefixes(Match::<<_:8, _:_*8>>, Node::trie()) -> [{<<_:8, _:_*8>>, any()}]

fold/3

fold(F::fun((<<_:8, _:_*8>>, any(), any()) -> any()), A::any(), Node::trie()) -> any()

fold_similar/4

fold_similar(Similar::<<_:8, _:_*8>>, F::fun((<<_:8, _:_*8>>, any(), any()) -> any()), A::any(), Node::trie()) -> any()

foldl/3

foldl(F::fun((<<_:8, _:_*8>>, any(), any()) -> any()), A::any(), Node::trie()) -> any()

foldl_similar/4

foldl_similar(Similar::<<_:8, _:_*8>>, F::fun((<<_:8, _:_*8>>, any(), any()) -> any()), A::any(), Node::trie()) -> any()

foldr/3

foldr(F::fun((<<_:8, _:_*8>>, any(), any()) -> any()), A::any(), Node::trie()) -> any()

foldr_similar/4

foldr_similar(Similar::<<_:8, _:_*8>>, F::fun((<<_:8, _:_*8>>, any(), any()) -> any()), A::any(), Node::trie()) -> any()

foreach/2

foreach(F::fun((<<_:8, _:_*8>>, any()) -> any()), Node::trie()) -> any()

from_list/1

from_list(L::[<<_:8, _:_*8>> | tuple()]) -> trie()

is_key/2

is_key(X1::<<_:8, _:_*8>>, Node::trie()) -> boolean()

map/2

map(F::fun((<<_:8, _:_*8>>, any()) -> any()), Node::trie()) -> trie()

merge/3

merge(F::fun((<<_:8, _:_*8>>, any(), any()) -> any()), Node1::trie(), Node2::trie()) -> trie()

new/0

new() -> empty_trie()

new/1

new(L::[<<_:8, _:_*8>> | tuple()]) -> trie()

prefix/3

prefix(Key::<<_:8, _:_*8>>, Value::any(), Node::trie()) -> nonempty_trie()

size/1

size(Node::trie()) -> non_neg_integer()

store/2

store(Key::<<_:8, _:_*8>>, Node::trie()) -> nonempty_trie()

store/3

store(Key::<<_:8, _:_*8>>, NewValue::any(), Node::trie()) -> nonempty_trie()

take/2

take(Key::<<_:8, _:_*8>>, Node::trie()) -> {any(), trie()} | error

to_list/1

to_list(Node::trie()) -> [{<<_:8, _:_*8>>, any()}]

to_list_similar/2

to_list_similar(Similar::<<_:8, _:_*8>>, Node::trie()) -> [{<<_:8, _:_*8>>, any()}]

update/3

update(X1::<<_:8, _:_*8>>, F::fun((any()) -> any()), Node::nonempty_trie()) -> nonempty_trie()

update/4

update(Key::<<_:8, _:_*8>>, F::fun((any()) -> any()), Initial::any(), Node::trie()) -> nonempty_trie()

update_counter/3

update_counter(Key::<<_:8, _:_*8>>, Increment::number(), Node::trie()) -> nonempty_trie()


Generated by EDoc