Python 两个变量的乘法随着时间的推移而增加
这是我作为练习的一个问题 有两种细菌。说x和y。每一秒,它们都会在改变类型的同时繁殖 x型变为2 y型和1 x型(Python 两个变量的乘法随着时间的推移而增加,python,multiplication,Python,Multiplication,这是我作为练习的一个问题 有两种细菌。说x和y。每一秒,它们都会在改变类型的同时繁殖 x型变为2 y型和1 x型(x->2y+x)。y型变为3x型和1Y型(y->3x+y)。除此之外,1X型和3y型是自发出生的(每秒钟->x+3y) 任务是计算给定时间后的细菌数量t 我在这里写了一段代码: x = 1 y = 1 t = 2 def calcFinalBacteria (x, y, t): for i in xrange (t): tempX = x + y * 3 #
x->2y+x
)。y型变为3x型和1Y型(y->3x+y
)。除此之外,1X型和3y型是自发出生的(每秒钟->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+1
和y'=2x+y+3
。假设你的初始种群是10X和7Y,你想一步一步地进化它。这可以通过以下矩阵乘法进行建模:
|1 3 1| |10|
|3 1 3| x | 7|
|0 0 1| | 1|
因此,要找到答案,需要重复矩阵乘法t
次
尽管如此,按照您编写代码的方式,每个x都会变成2y和0x,而不是2y和1x。一个小小的改进
你把这个值加到它本身,然后减去它的原始值
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)
这是一道数学题。是否有一个闭合公式可以在恒定时间内计算此系列
n
元素?我将把它带到math.stackexchange.com。此外,注释的/
语法无效python
。该代码无法运行。很难相信这不是家庭作业中的示例代码。但是我在这里发布这个问题的主要原因是为了发现是否有机会改进我的代码。我在网上搜索了这类乘法问题,但没有一个有可接受的算法。对不起。我的错。在复制粘贴代码后,我在编辑页面中添加了注释。思想评论可以提供更多的信息。这很像SICP第1章中的一些练习。如果你能找到一个巧妙的递归关系,它可能会服从某种分而治之的方法。然后通过注意a*a*a*a=(a^2)*(a^2)
,将其加速到O(logt)
。线性代数的出现绝对美妙。