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

时间:2018-12-03 15:30:28

标签: python multiplication

这是我在练习中遇到的一个问题。

细菌有两种。说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时,要花很多时间才能找到

2 个答案:

答案 0 :(得分:2)

因此,如果我理解此权利,请x' = x+3y+1y' = 2x+y+3。假设您的初始种群为十个x和七个y,并且您想一步一步地发展它。可以使用以下矩阵乘法来建模:

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

因此,要找到答案,您需要重复矩阵乘法t次。

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

答案 1 :(得分:1)

一个小改进。

您正在向其自身添加值,并减去其原始值。

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)