posts: trie: add construction

This commit is contained in:
Bruno BELANYI 2024-06-30 12:36:42 +01:00
parent d1c7374ebe
commit d073a7223c

View file

@ -34,3 +34,32 @@ spell correction, as it can easily be used to fuzzy match words under a given
edit distance (think [Levenshtein])
[Levenshtein]: https://en.wikipedia.org/wiki/Levenshtein_distance
## Implementation
This implementation will be in Python for exposition purposes, even though
it already has a built-in `dict`.
### Representation
Creating a new `Trie` is easy: the root node starts off empty and without any
mapped values.
```python
class Trie[T]:
_children: dict[str, Trie[T]]
_value: T | None
def __init__(self):
# Each letter is mapped to a Trie
self._children = defaultdict(Trie)
# If we match a full string, we store the mapped value
self._value = None
```
We're using a `defaultdict` for the children for ease of implementation in this
post. In reality, I would encourage you exit early when you can't match a given
character, etc...
The string key will be implicit by the position of a node in the tree: the empty
string at the root, one-character strings as its direct children, etc...