Пример #1
0
def test_when_not_found_should_return_none():
    trie = Trie()
    trie.add(test_str_1)
    trie.add(test_str_2)
    trie.add(test_str_3)

    testNode = trie.find_node(test_str_not_found)

    assert testNode == None
Пример #2
0
    def test_find_prefix(self):
        """Test for find_prefid

        Args:
            self: TestTrie

        Returns:
            None

        Raises:
            None
        """
        # Given
        trie_obj = Trie()

        # When
        trie_obj.add("hello")
        trie_obj.add("hell")
        trie_obj.add("he")
        trie_obj.add("she")

        # Then
        self.assertEqual(trie_obj.find_prefix("he"), (True, 3))
        self.assertEqual(trie_obj.find_prefix("hell"), (True, 2))
        self.assertEqual(trie_obj.find_prefix("hello"), (True, 1))
        self.assertEqual(trie_obj.find_prefix("h"), (True, 3))
        self.assertEqual(trie_obj.find_prefix("me"), (False, 0))
Пример #3
0
def build_trie(n, genes, health):
    trie = Trie()

    for i in range(n):
        gene_trie = trie.add(genes[i])
        add_health_to_gene_trie(gene_trie, health[i], i)

    return trie
Пример #4
0
def test_when_inserting_all_nodes_a_node_should_have_len_2():
    trie = Trie()

    trie.add(test_str_1)
    trie.add(test_str_2)
    trie.add(test_str_3)
    trie.add(test_str_4)
    trie.add(test_str_5)
    trie.add(test_str_6)

    a_node = trie.find_node('a')
    assert len(a_node.children) == 2
Пример #5
0
def count_health(genes_data, firstIndex, lastIndex, stream):
    total_health = 0
    genes_count_cache = Trie()

    for i in range(firstIndex, lastIndex + 1):
        gene = genes_data.genes[i]
        health = genes_data.health[i]

        gene_count_cache_node = genes_count_cache.find_node(gene)

        if gene_count_cache_node == None:
            prefix_array = genes_data.prefix_arrays[i]
            appear_positions = kmp(gene, stream, prefix_array)
            gene_count_cache_node = genes_count_cache.add(gene)
            gene_count_cache_node.value = len(appear_positions)

        total_health += gene_count_cache_node.value * health

    return total_health
Пример #6
0
    health = map(int, raw_input().rstrip().split())

    s = int(raw_input())

    genes_prefix_cache_trie = Trie()
    prefix_arrays = [None for g in genes]

    # calculate the prefix arrays by using a trie as cache
    for i in range(len(genes)):
        gene = genes[i]
        cache_trie_node = genes_prefix_cache_trie.find_node(gene)
        if cache_trie_node != None:
            prefix_arrays[i] = cache_trie_node.value
        else:
            prefix_arrays[i] = kmp_initialize_suffix_prefix_array(gene)
            cache_trie_node = genes_prefix_cache_trie.add(gene)
            cache_trie_node.value = prefix_arrays[i]

    genes_data = GenesData(genes, health, prefix_arrays)

    min = 10000000000000000
    max = 0

    for s_itr in xrange(s):
        firstLastd = raw_input().split()

        first = int(firstLastd[0])

        last = int(firstLastd[1])

        d = firstLastd[2]