在下面的代码中,连接是瓶颈。 正如你所看到的,我已经尝试了一些复杂的方法来加速这个过程,但无论如何它都非常缓慢。我想知道有什么我能做的使它变快。在
顺便说一句,普通和秘密都是从二进制文件中读取的数据,它们相当大(大约1mb)
x = b''
if len(plain) < len(secret*8):
return False
i = 0
for secByte in secret:
for j in range(8):
z = setBit(plain[i],0,getBit(secByte,j))
#x += bytes([z])
x = x.join([b"", bytes([z])])
#x = array.array("B",(int(z) for z in x.join([b"", bytes([z])]))).tostring()
i = i+1
Python的列表有O(1)append,至少在摊销意义上是这样。你可以加入最里面的一个列表,而不是做最里面的一个。这将把你的算法从O(N^2)变成O(N)。如果不知道setBit()和getBit()函数在做什么,就很难给您提供可工作的代码,但是如下所示:
我认为你根本不应该使用字符串连接。最好创建最终数据的完整大小的可变
bytearray
,然后设置每个字节。这完全是O(N),对于您正在做的事情,使用bytearray
比字符串操作自然得多:相关问题 更多 >
编程相关推荐