Меня заинтересовал ошибка интервью Джона Лимджапа, и я начал искать эффективные способы обнаружения палиндромов. . Я проверил ответы палиндром-гольф, и мне кажется, что в ответах есть только два алгоритма, меняющие строку и проверка с хвоста и головы.
def palindrome_short(s):
length = len(s)
for i in xrange(0,length/2):
if s[i] != s[(length-1)-i]: return False
return True
def palindrome_reverse(s):
return s == s[::-1]
Я думаю, что ни один из этих методов не используется для обнаружения точных палиндромов в огромных последовательностях ДНК. Я немного осмотрелся и не нашел ни одной бесплатной статьи о том, каким может быть сверхэффективный способ для этого.
Хорошим способом может быть распараллеливание первой версии по принципу «разделяй и властвуй», назначая пару массивов символов 1..n и length-1-n..length-1 каждому потоку или процессору.
Что было бы лучше?
Вы знаете какие-нибудь?