2008-12-13 5 views
1

если у меня есть функция 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 
+0

Это домашнее задание? Если это так, было бы хорошо, если бы вы признали это, и некоторые из них подтолкнут вас в правильном направлении. – Argalatyr 2008-12-13 23:32:50

+0

да..у моей домашней работы, и я действительно застрял, и мой учитель отключен сегодня. Так что я прихожу сюда, чтобы просить помощь. – NONEenglisher 2008-12-13 23:36:51

ответ

6

Используйте цикл for или цикл while с временным результатом и счетчиком. Последний метод наиболее эффективен (в общем).

Простая версия, в псевдокоде:

iterations = 0; 
tmp = origin_matrix; 

do 
    tmp = operation(tmp); 
    iterations += 1; 
while tmp != origin_matrix; 

return iterations; 

EDIT: Вы можете также использовать простой, а конструкция:

while True: 
    tmp = operation(tmp) 
    iterations += 1 

    if tmp == origin_matrix: 
     break # Or you could return here. 

EDIT: Это было для functionB. Я не знал, что это отдельные вопросы. Для этого примера операция (x) = functionA (x, 1).

Для функции A вы, скорее всего, используете цикл for. Псевдокод:

matrix = origin_matrix 

for i in range(N_times): 
    matrix = operation(matrix) 

return matrix 
Смежные вопросы