Exemple #1
0
def rb_file_reader(file):  # this function loads file in to red and black tree

    rb_tree = RedBlackTree()  # stores the red black tree in to variable

    for line in file:

        word = line.strip('\n').lower()
        rb_tree.rbt_insert(word)

    file.close()

    return rb_tree
Exemple #2
0
    def __init__(self):
        self.map = RedBlackTree()

        logging.basicConfig(
            format="%(levelname)-10s %(asctime)s %(filename)s %(lineno)d %(message)s",
            level=logging.DEBUG
        )
        self.log = logging.getLogger(sys.argv[0])
 def test_inserting_unsorted_values_should_alter_root(self):
     """Testing the rotate methods"""
     rbt = RedBlackTree()
     rbt.insert(9)
     rbt.insert(11)
     rbt.insert(10)
     self.assertTrue(rbt.get_root().value == 10)
Exemple #4
0
class RedblackMap(object):
    """An implementation of a hashtable using a BetterMap
    backed by a red black tree"""

    def __init__(self):
        self.map = RedBlackTree()

        logging.basicConfig(
            format="%(levelname)-10s %(asctime)s %(filename)s %(lineno)d %(message)s",
            level=logging.DEBUG
        )
        self.log = logging.getLogger(sys.argv[0])

    def get(self, k):
        """Looks up the key (k) and returns the corresponding value,
        or raises KeyError if the key is not found."""
        return self.map.search_by_key(k)

    def add(self, k, v):
        """Resize the map if necessary and adds the new item."""
        kv = KeyVal(k, v)
        self.map.insert(kv)
Exemple #5
0
    bk_tree = pickle.load(open("bk_tree.p", 'rb'))
    print("BK Tree constructed!")

else:
    csv_file = "Brooklyn_Public_Library_Catalog.csv"

    #Provide a script where you load the dataset
    print("Constructing dataset........", end='', flush=True)
    dataset = Dataset(csv_file, query_processor)
    dataset.load()
    print("Dataset Loaded!")

    #process it into an efficient binary search tree
    print("Constructing RB-Tree...", end='', flush=True)
    binary_search_tree = RedBlackTree()
    temp_dataset = dataset.get_token_bookids()
    for i in range(len(temp_dataset)):
        binary_search_tree.insert(temp_dataset[i][0], temp_dataset[i][1])
    print("RB-Tree constructed!")

    #create a BK-tree
    print("Constructing BK-Tree...", end='', flush=True)
    bk_tree = BKTree(levenshtein_distance_DP)
    english_dictionary_list = dataset.get_dictionary()
    for i in range(len(english_dictionary_list)):
        bk_tree.insert(english_dictionary_list[i])
    print("BK-Tree constructed!")

    if CONSTRUCT_DEBUG_MODE:
        pickle.dump(dataset, open("dataset.p", 'wb'))
Exemple #6
0
def main():
    rb_tree = RedBlackTree()

    # корень
    node_10_value = Autoservice(10, 'Переделкино', 'Вася Пупкин', 'Омск')
    root = Node(value=node_10_value, color=BLACK, parent=None, left=NIL_LEAF, right=NIL_LEAF)
    node_10 = root

    # левое поддерево
    node_5_value = Autoservice(5, 'Сломай меня полностью', 'Иннокентий Пересядько', 'Якутск')
    node_5 = Node(value=node_5_value, color=BLACK, parent=root, left=NIL_LEAF, right=NIL_LEAF)

    # правое поддерево
    node_20_value = Autoservice(20, 'Загони под шины', 'Яков Явенчучечков', 'Ханты-Мансийск')
    node_20 = Node(value=node_20_value, color=RED, parent=root, left=NIL_LEAF, right=NIL_LEAF)
    node_15_value = Autoservice(15, 'Вест Коуст Кастомс', 'Евакий Иксзибитов', 'Бирюлёво')
    node_15 = Node(value=node_15_value, color=BLACK, parent=node_20, left=NIL_LEAF, right=NIL_LEAF)
    node_25_value = Autoservice(25, 'Подкуй братуху', 'Каракантанбек Изумнетралитанаев', 'Владивосток')
    node_25 = Node(value=node_25_value, color=BLACK, parent=node_20, left=NIL_LEAF, right=NIL_LEAF)
    node_20.left = node_15
    node_20.right = node_25

    node_12_value = Autoservice(12, 'Железный сивый мерин', 'Эщкере Капиталистов', 'Староперуново')
    node_12 = Node(value=node_12_value, color=RED, parent=node_15, left=NIL_LEAF, right=NIL_LEAF)
    node_17_value = Autoservice(17, 'Вах Какой Машына', 'Джамшут Равшанов', 'Перезауехово')
    node_17 = Node(value=node_17_value, color=RED, parent=node_15, left=NIL_LEAF, right=NIL_LEAF)
    node_15.left = node_12
    node_15.right = node_17

    root.left = node_5
    root.right = node_20
    rb_tree.root = root

    node_19_value = Autoservice(19, 'На созвоне & вопросики порешаем & тоси-боси', 'Капитан Глазозоркость', 'Готтэм')

    print('Before:\n' + '-' * 80)
    for i in list(rb_tree):
        print(i)

    rb_tree.add(node_19_value)

    """
                ____10B____                           ____10B____
               5B      __20R__                       5B      __20R__
                  __15B__     25B   -- КРАСИМ В -->      __15R__    25B
               12R      17R                           12B      17B
               добавляем-->19R                                   19R

Общее
направление:                   ____10B____
   LR=>RL                   5B         ___15R___
правая ротация                       12B      __20R__
                                            17B      25B
                                              19R


                                 _____15B_____
    Левая ротация к           10R           __20R__
                            5B  12B       17B      25B
                                            19R
    """

    print('After:\n' + '-' * 80)
    for i in list(rb_tree):
        print(i)

    print('Trying to find \n{}\n in tree: \n{}'.format(node_17_value, rb_tree.find_node(node_17_value)))
    print()
    print('Is \n{}\n in tree? {}'.format(node_17_value, rb_tree.contains(node_17_value)))

    print('Tree root has children: {}'.format(rb_tree.root.has_children()))
    print('Tree root has {} children'.format(rb_tree.root.count_children()))

    values = [
        node_10_value,
        node_5_value,
        node_20_value,
        node_15_value,
        node_25_value,
        node_12_value,
        node_17_value
    ]

    print('-' * 80)
    rb_tree = RedBlackTree()
    for value in values:
        rb_tree.add(value)
        for i in list(rb_tree):
            print(i)
        print('-' * 80)

    print('-' * 80)
    for value in values:
        for i in list(rb_tree):
            print(i)
        rb_tree.remove(value)
        print('-' * 80)
Exemple #7
0
def test_redblacktree():
    test_passed = True
    test_database = pickle.load( open( 'testdatabase.p', 'rb' ) )
    test_database = test_database['redblacktree']

    keys = test_database['keys']
    result = test_database['result']

    RBT = RedBlackTree()
    for key in keys:
        RBT.insert(key,None)

    nodes = []
    nodes.append(RBT._root)
    nodes_checked = 0

    while len(nodes) > 0:
        node = nodes.pop()
        if not node is None:
            nodes_checked += 1
            nodes.append(node._left)
            nodes.append(node._right)
            target = result[node._key]
            if node._parent is None:
                if not target['p'] is None: 
                    test_passed = False
            else:
                if not node._parent._key == target['p']:
                    test_passed = False
            if node._left is None:
                if not target['l'] is None:
                    test_passed = False
            else:
                if not node._left._key == target['l']:
                    test_passed = False
            if node._right is None:
                if not target['r'] is None:
                    test_passed = False
            else:
                if not node._right._key == target['r']:
                    test_passed = False
            if not node._black == target['b']:
                test_passed = False

    RBT = RedBlackTree()
    RBT.insert('1','a')
    RBT.insert('1','b')
    RBT.insert('1','c')

    if len(RBT.get('1')) != 3:
        test_passed = False

    return test_passed
Exemple #8
0
def test_bfs(func, size):
    rbt = RedBlackTree()
    for i in range(1, size):
        rbt.insert(random_string(14))
    this_func = eval(func)
    this_func(rbt.get_root(), visit_node)
 def test_find_should_return_none_for_nonexistent_value(self):
     search_value = 5
     rbt = RedBlackTree()
     for x in [7, 11, 19, 10]:
         rbt.insert(x) 
     self.assertTrue(rbt.search(search_value) is None)
 def test_find_should_work_for_existing_value(self):
     search_value = 9
     rbt = RedBlackTree()
     for x in [7, 11, 19, 10, search_value]:
         rbt.insert(x) 
     self.assertTrue(rbt.search(search_value))
 def test_node_inserted_should_be_red(self):
     rbt = RedBlackTree()
     rbt.insert(9)
     rbt.insert(11)
     self.assertTrue(rbt.get_root().get_right().is_red())
 def test_inserting_greater_value_should_create_right_node(self):
     rbt = RedBlackTree()
     rbt.insert(9)
     rbt.insert(11)
     self.assertTrue(rbt.get_root().get_right().value == 11)
 def test_inserting_lesser_value_should_create_left_node(self):
     rbt = RedBlackTree()
     rbt.insert(5)
     rbt.insert(4)
     self.assertTrue(rbt.get_root().get_left().value == 4)
 def test_first_node_should_be_black(self):
     rbt = RedBlackTree()
     rbt.insert(5)
     rbt.insert(4)
     self.assertTrue(rbt.get_root().is_black())
Exemple #15
0
from redblacktree import RedBlackTree
import os


def print_tree(node):
    """Ascending order"""
    if node.value == None:
        return
    print_tree(node.right)
    print(node)
    print_tree(node.left)


try:
    tree = RedBlackTree()
except:
    print('erro')
number = 1
while (number):
    print(
        "Digite:\n1- Para adicionar a árvore.\n2- Para remover da árvore\n0- Para sair\n"
    )
    number = int(input())
    if number == 1:
        print("Digite o valor que queira adicionar.")
        value = int(input())
        tree.add(value)
        root = tree.root
        print_tree(root)

    elif number == 2:
Exemple #16
0
def getDictTree(tree, node):
    children = []
    if node.left is not tree.nil or node.right is not tree.nil:
        for child in [node.left, node.right]:
            if child is not tree.nil:
                children.append(getDictTree(tree, child))
            else:
                children.append({"key": "none", "children": []})
    nodedict = {}
    if hasattr(node, "colour"):
        nodedict["colour"] = node.colour
    nodedict["key"] = node.key
    nodedict["children"] = children
    return nodedict


if __name__ == "__main__":
    N = 300
    trees = {
        "bintree": BinaryTree(),
        "redblacktree": RedBlackTree(),
        "avltree": AvlTree()
    }
    run(trees, 150)
    import json
    for name, tree in trees.items():
        f = open('/Users/tims/workspace/datavis/data/' + name + '.json', 'w')
        f.write(json.dumps(getDictTree(tree, tree.root), indent=True))
        f.close()