Блог пользователя Gerald

Автор Gerald, 14 лет назад, По-русски
Разбираясь с тандемными повторами при решении задачи, которую обсуждали тут, я перечитал несколько трудов Гасфилда и Крочемора (не уверен что это так пишется по русски =) ) по тандемным повторам. В основном все алгоритмы, описанные там, находят все вхождения тандемных повторов в строку (примитивных, вообще всех, различных, вариаций много). И лишь только в одной статье Гасфилда отдаленно упоминается, что существует алгоритм, который отвечает для позиции i в строке, существует ли какой-нибудь (возможно минимальный) тандемный повтор начинающийся в позиции   i - L + 1 длины L. Кто-нибудь что-нибудь слышал о подобном алгоритме, статье где его можно прочитать? Или может быть кто-нибудь знает как свести одну из вышеперечисленных решенных задач к этой за приемлемое время? 
 
P.S. Гугл скромно молчит в ответ на все вопросы :(
  • Проголосовать: нравится
  • +20
  • Проголосовать: не нравится

14 лет назад, # |
Rev. 2   Проголосовать: нравится +10 Проголосовать: не нравится
А чем тебе не понравился алгоритм из книги Крочемора? Мне кажется, там все хорошо написано :)
  • 14 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится
    Ну мне хочется так сказать based suffix tree алгоритм =) А там based suffix array.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Да и, разве там то что я просил? Вроде же там алгоритм для нахождения pr-триплетов, нет? 
14 лет назад, # |
  Проголосовать: нравится +17 Проголосовать: не нравится
я не совсем понимаю, почему тебе не нравится то, что написано в книге) тот алгоритм нахождения всех тандемов можно свести к твоей задаче (существует или нет тандем, который имеет в данной позиции середину). если хочешь, можешь также для них считать и длину, и начало, и конец...

еще чуть, и он тебе кофе сварит))
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Как бы есть алгоритм со сложностью O(N· logN) для нахождения всех тандемных повторов (даже если их порядка N2). Находим все тандемные повторы этим алгоритмом, назовём это стадией прекалка, далее на любой запрос вида проверить является ли i серединой тендемного повтора можно отвечать за O(1)
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Каким образом это можно сделать за константу?
    • 14 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
      Алгоритм, о котором я говорю, и который есть в книге Гасфилда "Строки, деревья и последовательности в алгоритмах: Информатика и вычислительная биология" стр. 253-255, находит не более O(N· logN) промежутков позиций, каждая из которых является серединой тандемного повтора с определённой для промежутка длиной. Если у вас есть такие промежутки, наверное не составит труда их обьеденить, и за константу отвечать на запрос, верно?