Мне стало любопытно опрос Jon Limjap nishferp и начал искать эффективные способы обнаружения палиндрома. Я проверил ответы palindrome golf, и мне кажется, что в ответах есть только два алгоритма, реверсирование строки и проверка с хвоста и головы.
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]
Я думаю, что ни один из этих методов не используется при обнаружении точных палиндромов в огромных последовательностях ДНК. Я немного оглянулся и не нашел бесплатной статьи о том, что может быть самым эффективным способом.
Хорошим способом может быть параллелизация первой версии в подходе "разделяй и властвуй", назначая пару массивов char 1..n и length-1-n..length-1 для каждого потока или процессора.
Что было бы лучше?
Знаете ли вы кого-нибудь?