Shajara
Description
A tree has one node which represents its root. Each node has a label, a value and many children. The arc from the parent to the child is labeled.
Create a tree
Using shajara API
from shajara import Tree, Node
#create a tree with a root labeled "a"
t = Tree(Node(label="a"))
# add childrend "b", "c" and "d" to "a"
t.add_child("ab", Node(label="b")).add_child("ac", Node(label="c")).add_child("ad", Node(label="d"))
# go to child "b" and add to it children "e" and "f"
t.select_child("ab").add_child("be", Node(label="e")).add_child("bf", Node(label="f"))
# go up to "a", go to child "d" and add to it children "g" and "h"
t.up().select_child("ad").add_child("dg", Node(label="g")).add_child("dh", Node(label="h"))
Using a dict representation
from shajara.create import GenerateProcessor
from shajara import Tree
# the tree representation : the arcs must be labeled
rep = {
"label": "a",
"children": {
"ab": {
"label": "b",
"children": {
"be": {"label": "e"},
"bf": {"label": "f"}
}
},
"ac": {"label": "c"},
"ad": {"label": "d"}
}
}
# Create a generator to this representation
generator = GenerateProcessor(rep)
#create an ampty tree (acrually the root exists without a label or a value)
t = Tree()
#fill the tree using the generator
t.process(processor=generator)
Visualize a tree
DOT description of a tree for Graphviz can be generated using GraphvizProcessor
from shajara.plot import graphviz_processor
# create the tree t using one of the methods above
...
#process the tree using graphviz_processor, which returns a DOT description (string)
graph = t.process(processor=graphviz_processor)
# save the description in a file with extension .dot
f = open("graphviz.dot", "w")
f.write(graph)
f.close()
Binary search trees (not balanced)
Create unbalanced binary search trees
from shajara import Tree, Node
from shajara.search.binary import binary_adder
values = [5, 9, 2, 11, 3, 7, 2]
labels = ["five", "nine", "two", "eleven", "three", "seven", "two_again"]
t = Tree()
for i in range(len(values)):
binary_adder.set_parameters(Node(value=values[i], label=labels[i]))
t.process(processor=binary_adder)
Search a value
from shajara.search.binary import binary_searcher
# create a tree t with a binary creator
...
search = [4, 5, 8, 10, 12]
for i in search:
binary_searcher.set_parameters(value=i)
rel, node = t.process(processor=binary_searcher)
if rel == "=" :
print (str(i) + " is " + node.label)
elif rel =="<" :
print (str(i) + " not found. It must be after " + str(node.value))
else:
print (str(i) + " not found. It must be before " + str(node.value))
The result :
Search the max and the min
from shajara.search.binary import binary_opti_searcher
# create a tree t with a binary creator
...
binary_opti_searcher.set_parameters(search="min")
min_node = t.process(processor=binary_opti_searcher)
print("The minimum is " + str(min_node.value))
binary_opti_searcher.set_parameters(search="max")
max_node = t.process(processor=binary_opti_searcher)
print("The maximum is " + str(max_node.value))
The result :
Trie
Create a trie
from shajara.search.trie import trie_adder
strings = ["to", "ten", "inn", "in", "tea", "A"]
t = Tree()
for string in strings:
trie_adder.set_parameters(string)
t.process(processor=trie_adder)
Search a word in the trie
from shajara.search.trie import trie_searcher
# create a trie t
...
search = ["tell", "tea", "inner"]
for string in search:
trie_searcher.set_parameters(string)
found, node = t.process(processor=trie_searcher)
is_word = ""
if not node.value:
is_word = " (not in dictionary)"
print("searching: " + string + ", found: " + found + is_word)
The result :
License
MIT License
Copyright (c) 2020 Abdelkrime Aries
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
shajara-0.2.0.tar.gz
(5.6 kB
view details)
File details
Details for the file shajara-0.2.0.tar.gz.
File metadata
- Download URL: shajara-0.2.0.tar.gz
- Upload date:
- Size: 5.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.6.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d9677fd3a11a290a1110053272ac526eec833eb686c4c9f5084e9627b3940af6
|
|
| MD5 |
4df3bb389b835934ca8ae1a51ab72eb6
|
|
| BLAKE2b-256 |
ddcad80258595e3f70ca532fd4a7b300fc57fa51b663ef381e6e540cc2f907f6
|