繁体   English   中英

计算基本数学运算

[英]Count basic math operations

我想对算法的计算量做出一个猜测,在这种情况下,这意味着: 我在算法中加,减,乘和除的频率是多少?

例:

def b(a):
    a = a + 3  #1
    a = a * a  #2
    a = a * -1 #3
    return a

if __name__ == "__main__":
    for i in range(10):
        b(1)

分析的输出应为:

1:+ -> 1次数学运算

2:* -> 1个数学运算

3:+, --> 2个数学运算

对于每个循环,因此在此程序上运行的分析器应返回40

Pythonic解决方案可能是创建一个类Operand,并使用特殊方法(__add __,__ radd __,__ mult __,__ rmult__等)指定具有关联的运算符+,-,*,/。 如果正确使用“ __r”方法,则只要有一个操作数,就可以以几乎任何顺序开始包含垃圾(1、2.0、3.0)。

该类将具有一个计数器,在创建时将其设置为零。 每个调用加1,但也添加每个运算符的计数器(默认= 0)。

然后,您可以编写:

a = Operand(2)
b = a+2-5
assert b.effort == 3

然后,您可以继续进行计算:

a = Operand(5)
a = a + 3  #1
a = a * a  #2
a = a * -1 #3
print(a.effort)

在第一行中,创建对象。 在第二行中,a + 3的结果为8,结果对象的努力值为1。 在第三个中,它的工作量为3(a为1 +1)。 在第四步中,它的工作量为4.等等。

我尚未实现和测试它,但是它应该按照那些原则或多或少地起作用。

关于乱扔垃圾的注意事项: a + 2 + 3会使您计数3,但是2 + 3 + a可能会使您计数2(因为5仍然是整数,而不是操作数)。 因此,也许您想避免使用__r方法,而是为了安全起见……这取决于。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM