예제 #1
0
def test_kmp_one_result():
    test_text = 'AABAACAADAABAABA'
    pattern = 'AABA'
    suffix_prefix_array = kmp_initialize_suffix_prefix_array(pattern)

    result = kmp(pattern, test_text, suffix_prefix_array, one_result=True)
    assert result == [0]
예제 #2
0
def test_kmp_found_at_end():
    test_text = 'AAAAABAAABAC'
    pattern = 'C'
    suffix_prefix_array = kmp_initialize_suffix_prefix_array(pattern)

    result = kmp(pattern, test_text, suffix_prefix_array)
    assert result == [11]
예제 #3
0
def test_kmp():
    test_text = 'AABAACAADAABAABA'
    pattern = 'AABA'
    suffix_prefix_array = kmp_initialize_suffix_prefix_array(pattern)

    result = kmp(pattern, test_text, suffix_prefix_array)
    assert result == [0, 9, 12]
예제 #4
0
def test_kmp_empty_pattern():
    test_text = 'AAAAABAAABA'
    pattern = ''
    suffix_prefix_array = kmp_initialize_suffix_prefix_array(pattern)

    result = kmp(pattern, test_text, suffix_prefix_array)
    assert result == []
예제 #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