如何确定一个函数的周期
假设我有一个函数A,它可以对一个给定的矩阵应用某种规则,从而生成另一个矩阵,我把这个新矩阵称为原始矩阵的下一个状态。这个函数还可以通过给定的次数N来确定矩阵的最终状态(也就是说,先对原始矩阵应用规则,然后对下一个状态再应用规则,依此类推,总共应用N次)。
比如说,对于一个给定的矩阵,如果对它应用规则5次后,最终的矩阵和原始矩阵是一样的,我们就说这个矩阵的周期是5。
我还有一个函数B,我想知道如何让函数B能够在同样的规则下,确定函数A的周期,并返回这个周期。我现在完全不知道该从哪里开始做这个...提前谢谢大家。
def functionA(origin_matrix,N_times):
#apply rule on the origin_matrix to generate another matrix which is the next sate of it.
#apply rule on origin_matrix for N_times
return the_final_matrix
def functionB(origin_matrix):
#determine the period of the the origin_matrix.
return period
1 个回答
6
可以使用一个for循环,或者用一个while循环配合一个临时结果和一个计数器。后者的方法通常更高效。
简单版本,用伪代码表示:
iterations = 0;
tmp = origin_matrix;
do
tmp = operation(tmp);
iterations += 1;
while tmp != origin_matrix;
return iterations;
补充说明:你也可以使用一个简单的while结构:
while True:
tmp = operation(tmp)
iterations += 1
if tmp == origin_matrix:
break # Or you could return here.
补充说明:那是针对functionB的。我不知道它们是两个不同的问题。对于那个例子,operation(x) = functionA(x, 1)。
对于functionA,你很可能会使用一个for循环。伪代码如下:
matrix = origin_matrix
for i in range(N_times):
matrix = operation(matrix)
return matrix