Exemple #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
Exemple #2
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
Exemple #3
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
Exemple #4
0
def test_when_empty_string_should_return_root():
    trie = Trie()

    testNode = trie.find_node('')
    assert not testNode == None
Exemple #5
0
if __name__ == '__main__':
    n = int(raw_input())

    genes = raw_input().rstrip().split()

    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()