两个变量的乘积随时间增加

Multiplication of two variables increase over time

这是我作为练习的问题。

有两种细菌。说 x 和 y。每一秒他们都在改变他们的类型。

类型 x 变为 2 y 类型和 1 x 类型 (x -> 2y + x)。类型 y 变为 3 x 类型和 1 y 类型 (y -> 3x + y)。除此之外,1 x 型和 3 y 型自发产生(每秒 -> 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 时,要花很多时间才能找出

因此,如果我理解正确,x' = x+3y+1y' = 2x+y+3。假设你的初始种群是 10 个 x 和 7 个 y,你想将它进化一步。这可以用以下矩阵乘法建模:

|1 3 1|   |10|
|3 1 3| x | 7|
|0 0 1|   | 1|

所以要找到答案,你需要重复矩阵乘法 t 次。

尽管按照您编写代码的方式,每个 x 变成 2y 和 0 x,而不是 2y 和 1 x。

一个小改进。

您正在将值添加到自身并减去它的原始值。

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 # spontaneous addition of 1 x bacteria
        y = tempY + 3 # spontaneous addition of 3 y bacteria
    print x, y

calcFinalBacteria (x, y)