Когда использовать алгоритмы Рабина-Карпа или КМП?

Я сгенерировал строку, используя следующий алфавит.{A,C,G,T}, И моя строка содержит более 10000 символов. Я ищу следующие образцы в этом.

  • ATGGA
  • TGGAC
  • CCGT

Я попросил использовать алгоритм сопоставления строк, который имеет O(m+n) Продолжительность.

m = pattern length
n = text length

И то и другое KMP and Rabin-Karp algorithms иметь это время выполнения. Каков наиболее подходящий алгоритм (между Рабином-Карпом и КМП) в этой ситуации?

1 ответ

Решение

Когда вы хотите найти несколько шаблонов, обычно правильный выбор - использовать Aho-Corasick, который является обобщением KMP. Теперь в вашем случае вы ищете только 3 шаблона, так что, возможно, KMP не намного медленнее (максимум три раза), но это общий подход.

Рабин-Карп проще реализовать, если мы предположим, что столкновение никогда не произойдет, но если у вас проблема с типичным поиском строк, KMP будет более стабильным, независимо от того, какой у вас ввод. Однако у Rabin-Karp есть много других приложений, где KMP не вариант.

Другие вопросы по тегам