Функция поиска по шаблону в массиве суффиксов с использованием python - PullRequest
0 голосов
/ 28 февраля 2020

Я хочу написать функцию: например, sequential_research (M, L), которая, используя принцип последовательного исследования в списке суффиксов L, возвращает позицию первого кортежа, так что M является префиксом суффикса этого кортежа, если он существует; в противном случае функция возвращает None.

я пробую этот метод, но только для одной строки, а не для списка строк

def get_prefix_arr(pattern, b):
    prefix_arr = [0] * b
    n = 0
    m = 1
    while m != b:
        if pattern[m] == pattern[n]:
            n += 1
            prefix_arr[m] = n
            m += 1
        elif n != 0:
            n = prefix_arr[n - 1]
        else:
            prefix_arr[m] = 0
            m += 1
    return prefix_arr

def KMP_String(pattern, text):
    a = len(text)
    b = len(pattern)
    prefix_arr = get_prefix_arr(pattern, b)
    initial_point = []
    m = 0
    n = 0

    while m != a:
        if text[m] == pattern[n]:
            m += 1
            n += 1
        else:
            n = prefix_arr[n - 1]
        if n == b:
            initial_point.append(m - n)
            n = prefix_arr[n - 1]
        elif n == 0:
            m += 1

    return initial_point


string = "TATCTAGCTA"
pat = "CTA"
initial_index = KMP_String(pat, string)
for i in initial_index:
        print("{}: {}".format(i, string[i:]))

1 Ответ

0 голосов
/ 29 февраля 2020

Мне удалось найти решение ?

def main():
    def table_suffixe(t):
        n=len(t)
        s=[]
        for i in range(0,n):
         tup = (i,t[i:])
         s.append(tup)
        return s

    t = "TATCTAGCTA"
    sa = table_suffixe(t)
    print(sa)


if __name__ == '__main__': main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...