通常,我想知道在Python中使用内置算术函数与滚动自己的算术函数的优缺点。
具体来说,我采用GF(2)有限域多项式的字符串格式,转换为基2值,执行算术,然后输出为多项式作为字符串格式。在乘法中有一个很小的例子:
滚动我自己的:
def multiply(a,b):
bitsa = reversed("{0:b}".format(a))
g = [(b<<i)*int(bit) for i,bit in enumerate(bitsa)]
return reduce(lambda x,y: x+y,g)相对于内置的:
def multiply(a,b): # a,b are GF(2) polynomials in binary form ....
return a*b #returns product of 2 polynomials in gf2目前,像乘法逆(例如20位指数)这样的运算需要很长时间才能在我的程序中运行,因为它使用了Python的所有内置运算,例如//地板除法和%模数等,而不是进行我自己的除法、余数等。我想知道手动构建这些运算在效率和性能上有多大的提高(如上面所示)。
我意识到这些收益取决于手工版本构建得有多好,这不是问题。我想找出“基本上”与内置运算相比有多大的优势。例如,如果乘法(如上面的例子)非常适合于基数10 (十进制)的算术,但必须跳过更多的圈,才能将基值转换为二进制数,然后在运算中又会有更多的圈(所以效率较低),这就是我想知道的。比如,我想知道是否有可能通过建立自己的方式来显著降低时间,也许这里的一些专业人士已经认识到了。
发布于 2013-06-30 22:00:32
与python中的内置操作相比,您自己的手动操作几乎不可能有任何进展,只是速度慢得可怜。如果您尝试实现手动操作,您将使您的程序要慢得多。
如果您想知道如何使代码运行得更快,请问这个问题。在http://codreview.stackexchange.com上发布完整的慢代码,并在那里获得关于可以改进的内容的反馈。
https://softwareengineering.stackexchange.com/questions/203269
复制相似问题