在下面的代码中,串联是瓶颈。
正如你所看到的,我尝试了一些复杂的方法来加快速度,但无论如何它都很慢。我想知道是否有什么我可以做的来使它更快。
顺便说一句,普通和秘密都是从二进制文件读取的数据,它们都很大(大约 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) 的追加时间,至少在摊销意义上是这样。您可以构建一个大列表,然后在最后将它们连接起来,而不是在最里面的列表中进行连接。这将使您的算法从 O(N^2) 变为 O(N)。在不确切知道 setBit() 和 getBit() 函数正在做什么的情况下,很难为您提供工作代码,但类似:
L = []
for secByte in secret:
for j in range(8):
z = ...
L.append(z)
x = b"".join(L)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)