Моя проблема заключается в следующем: у меня есть большая последовательность чисел. Я знаю, что через какой-то момент она становится периодической, то есть в начале последовательности есть k чисел, а затем есть еще m чисел, которые повторяются до конца последовательности. В качестве примера, чтобы сделать это более понятным, последовательность может выглядеть так: [1, 2, 5, 3, 4, 2, 1, 1, 3, 2, 1, 1, 3, 2, 1, 1, 3 , ...], где k равно 5, а m равно 4, и тогда повторяющийся блок будет [2, 1, 1, 3]. Как видно из этого примера, у меня могут быть повторяющиеся биты внутри большего блока, поэтому просто искать первые экземпляры повторения не помогает.
Однако я не знаю, что такое k или m — моя цель — взять последовательность [a_1, a_2, ..., a_n] в качестве входных данных и вывести последовательность [a_1, ..., a_k, [a_(k +1), ..., a_(k+m)]] - в основном усекая более длинную последовательность, перечисляя большую ее часть как повторяющийся блок.
Есть ли эффективный способ решить эту проблему? Кроме того, вероятно, сложнее, но более идеально в вычислительном отношении - возможно ли сделать это, когда я генерирую рассматриваемую последовательность, чтобы мне нужно было генерировать минимальное количество? Я просмотрел другие похожие вопросы на этом сайте, но все они, похоже, имеют дело с последовательностями без начального неповторяющегося бита и часто без необходимости беспокоиться о внутреннем повторении.
Если это поможет / будет полезно, я также могу объяснить, почему я смотрю на это и для чего я буду его использовать.
Спасибо!
РЕДАКЦИИ: Во-первых, я должен был упомянуть, что я не знаю, заканчивается ли входная последовательность точно в конце повторяющегося блока.
Реальная проблема, над которой я пытаюсь работать, состоит в том, чтобы написать красивое выражение в закрытой форме для разложения непрерывных дробей (CFE) квадратичных иррациональных чисел (на самом деле, отрицательного CFE). Очень просто сгенерировать частичные частные* для этих CFE с любой степенью точности, однако в какой-то момент хвост CFE для квадратичного иррационального числа становится повторяющимся блоком. Мне нужно работать с частичными частными в этом повторяющемся блоке.
Мои текущие мысли таковы: возможно, я смогу адаптировать некоторые из предложенных алгоритмов, которые работают справа, для работы с одной из этих последовательностей. В качестве альтернативы, возможно, в доказательстве того, почему квадратичные иррациональные числа являются периодическими, есть что-то, что поможет мне понять, почему они начинают повторяться, что поможет мне найти несколько простых критериев для проверки.
* Если я записываю разложение цепной дроби как [a_0, a_1, ...], я называю a_i частичными частными.
Некоторая справочная информация может быть найдена здесь для тех, кто заинтересован: /а>
k/mили вам просто нужен алгоритм наилучшего предположения, который работает по пути (для раздела по мере создания)? - person Danica   schedule 04.05.2012