我的问题是:我有一大串数字。我知道,在某个时间点之后,它会变成周期性的——也就是说,在序列的开头有 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 称为部分商。
感兴趣的人可以在这里找到一些背景信息:http ://en.wikipedia.org/wiki/Periodic_continued_fraction