コード例 #1
0
def AVL_read_file():  #method to read file
    word_file = open("words.txt", "r")
    avl = AVLTree()
    for line in word_file:
        word = line.replace("\n", "")
        avl.AVL_insert(word)
    return avl
コード例 #2
0
    def test_search(self):
        niveau = Niveau()
        avl_tree = AVLTree()
        root = avl_tree.insert(None, 'Apeldoorn', 0)
        new_root = avl_tree.insert(root, 'Arnhem', 1)
        avl_tree.root = new_root
        niveau.variabelen = avl_tree
        expected = [1]
        variables = 'Arnhem'

        result = niveau.search(variables)

        self.assertEqual(expected, result)
コード例 #3
0
    def test_left_rotate(self):
        expected = self.create_node(12, 2)
        expected.left = self.create_node(10, 1)
        expected.left.left = self.create_node(9, 2)
        expected.left.right = self.create_node(11, 2)
        expected.right = self.create_node(13, 2)
        expectedValues = self.get_values_in_order(expected)
        root = self.create_node(10, 1)
        root.right = self.create_node(12, 2)
        root.right.left = self.create_node(11, 2)
        root.right.right = self.create_node(13, 2)
        root.left = self.create_node(9, 2)
        avl_tree = AVLTree()

        k2 = avl_tree.left_rotate(root)

        resultValues = self.get_values_in_order(k2)

        self.assertEqual(resultValues, expectedValues)
コード例 #4
0
 def create_tree(self, keys, initial_number):
     avl_tree = AVLTree()
     avl_tree.root = avl_tree.insert(None, initial_number, initial_number)
     for key in keys:
         if key == initial_number:
             continue
         tmp = avl_tree.insert(avl_tree.root, key, key)
         avl_tree.root = tmp
     return avl_tree
コード例 #5
0
ファイル: Lab3.py プロジェクト: miglesias4/CS3---Lab3
def user_tree(user_input):
    if user_input is "A" or "RB":
        if user_input is "A":
            print("Generating tree...")
            english_words = AVLTree()
            with open("words.txt") as f:
                for avl_line in f:
                    english_words.insert(Node(
                        avl_line.rstrip('\n')))  ##Appends into AVL tree
            return english_words

        elif user_input is "RB":
            print("Generating tree...")
            english_words = RedBlackTree()
            with open("words.txt") as m:
                for rb_line in m:
                    english_words.insert(RBTNode(
                        rb_line.rstrip('\n')))  ##Appends into RB tree
            return english_words
        else:
            print("Invalid Argument")
            return None
        return english_words
コード例 #6
0
ファイル: Niveau.py プロジェクト: triplejingle/cito
 def __init__(self):
     self.indexes = []
     self.filtered_criteria = []
     self.variabelen = AVLTree()
     self.name = ""
コード例 #7
0
ファイル: Niveau.py プロジェクト: triplejingle/cito
class Niveau(object):
    def __init__(self):
        self.indexes = []
        self.filtered_criteria = []
        self.variabelen = AVLTree()
        self.name = ""

    def create_niveau(self, content, niveau):
        self.name = niveau
        column_number = self.get_column_index(content)
        variabelen = self.get_variables(column_number, content)
        increment = 0
        for variable in variabelen:
            self.add(variable, increment)
            increment += 1
        self.set_filter_criteria(column_number, content)

    def filter(self, variabelen):
        self.indexes = []
        for variable in variabelen:
            indexes = self.search(variable)
            self.add_indexes_to_filtered_list(indexes)
        return self.indexes

    def get_variables(self, column_number, content):
        variabelen = []
        var = iter(content)
        next(var)
        for row in var:
            if row is None:
                continue
            variabelen.append(row[column_number])
        return variabelen

    def get_column_index(self, content):
        column_number = 0
        for column in content[column_number]:
            if column == self.name:
                break
            column_number += 1
        return column_number

    def add(self, variable, increment):
        if self.variabelen.root is None:
            root = self.variabelen.insert(None, variable, increment)
            self.variabelen.root = root
            return
        root = self.variabelen.root
        root = self.variabelen.insert(root, variable, increment)
        self.variabelen.root = root

    def set_filter_criteria(self, column_number, content):
        var = iter(content)
        next(var)
        for row in var:
            if row[column_number] is None:
                continue
            if row[column_number] not in self.filtered_criteria:
                self.filtered_criteria.append(row[column_number])

    def search(self, variable):
        index = self.variabelen.find(variable).value
        return index

    def add_indexes_to_filtered_list(self, indexes):
        for index in indexes:
            self.indexes.append(index)
コード例 #8
0
def search_time(dic, d, Tree, orderedList=False):
    """
    Measures the time it takes to search word in the given list
    :param dic: the word (value of the node) to be searched
    :param d: the word list, it can be random or ordered list
    :param Tree: a tree object (can be BinarySearchTree or AVLTree)
    :param orderedList: a flag to indicate whether wList is an ordered list or not, by default is not
    :return: measured time from start to finish
    """
    size = len(d)
    if Tree == "AVLTree":
        tree = AVLTree()
    elif Tree == "BinarySearchTree":
        tree = BinarySearchTree()
    else:
        print("Unsupported tree type: {}".format(Tree))
        return 0
    if orderedList:
        list_str = 'ordered list'
    else:
        list_str = 'random list'

    try:
        for i in range(size):
            tree[i] = d[i]
    except RecursionError as e:
        print('Exception caught while building the {} with size {}: {}'.format(
            Tree, size, e))
        tree_dic.write(
            'Error in building {},  size {:5d}, {}, word: "{}"\n'.format(
                Tree, size, list_str, dic))
        return 0
    print('{}, height of tree: {}, size of tree: {}'.format(
        Tree, tree.height(tree.root), len(tree)))

    tree.set_balanceFactor()
    start = time.clock()
    try:
        if orderedList:
            dKey = tree.search_ordered_list(dic)
        else:
            dKey = tree.search_random_list(dic)
        if dKey:
            print('yes, {} is in tree, found at key {}'.format(dic, dKey))
        else:
            print("no, {} is not found in tree".format(dic))
    except RecursionError as e:
        print('Exception caught during search with size {}: {}'.format(
            size, e))
        tree_dic.write(
            'Error during search {}, size {:5d}, {}, word: "{}"\n'.format(
                Tree, size, list_str, dic))
        return 0
    stop = time.clock()
    d_time = stop - start
    print('Searching for word "{}" in size {} tree took {:5f} seconds'.format(
        dic, size, d_time))

    if dKey:
        word_str = 'word in tree'
    else:
        word_str = 'word not in tree'
    tree_dic.write(
        '\nSearch time: {:5f} seconds \n{}: size {}\n{}, word: "{}"\n'.format(
            d_time, list_str, size, word_str, dic))

    sizes = d_sizes
    this_size = sizes.index(size)
    if this_size < len(sizes) - 1:
        nextSize = sizes[this_size + 1]
        predict_bigO_time(size, d_time, nextSize)
    return d_time