Каков наилучший способ найти период в повторяющемся списке?
Например:
a = {4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2}
имеет повторение {4, 5, 1, 2, 3}
с остатком {4, 5, 1, 2}
, но неполным.
Алгоритм должен быть достаточно быстрым, чтобы обрабатывать более длинные случаи, например:
b = RandomInteger[10000, {100}];
a = Join[b, b, b, b, Take[b, 27]]
Алгоритм должен возвращать $Failed
, если не существует повторяющегося шаблона, как указано выше.