Это вопрос, который у меня возник в качестве упражнения.
Есть два типа бактерий.Скажи х и у.Каждую секунду они умножаются, изменяя свой тип.
Тип x становится типом 2 y и типом 1 x (x -> 2y + x
).Тип y становится 3 типа x и 1 тип y (y -> 3x + y
).Кроме этого, 1 тип и 3 тип рождаются спонтанно (каждую секунду -> x + 3y
).
Задача состоит в том, чтобы подсчитать количество бактерий по истечении заданного времени t
.
Я написал код здесь:
x = 1
y = 1
t = 2
def calcFinalBacteria (x, y, t):
for i in xrange (t):
tempX = x + y * 3 # contribution by x bacteria (1) and y bacteria (3)
tempY = x * 2 + y # contribution by x bacteria (2) and y bacteria (1)
x += tempX + 1 - x # spontaneous addition of 1 x bacteria
y += tempY + 3 - y # spontaneous addition of 3 y bacteria
print x, y
calcFinalBacteria (x, y)
Временная сложность моего кода здесь O (t).Но есть ли способ для улучшения?Для небольших входов это нормально.Но когда я нажимаю t до 10 ^ 18 и увеличиваю x, y до 1000, требуется много времени, чтобы выяснить