【问题标题】:Generate all permutations of 128bits as bytes or bits, not as strings将 128 位的所有排列生成为字节或位,而不是字符串
【发布时间】:2018-10-26 09:59:10
【问题描述】:

我试图生成 128 位的所有排列并将它们存储在某种结构中。我在其他 Stack Overflow 问题中发现了一些有用的信息:

keys = map(''.join,itertools.product('01',repeat=n)) 

问题在于,这个解决方案仅对足够小的 n 值有用,因为它将值作为字符串存储在列表中,因此序列中的每个位都是一个字节,这意味着每个排列都是 128 个字节长

对于像n=128 这样的高值,将所有排列存储为字符串是不可能的。 (使用n=128 执行itertools.product() 时,我的计算机内存不足)。而将排列存储为原始字节意味着每个排列有 16 个字节。

我的问题是如何归档与intertools.product 相同的结果,但要处理字节。

【问题讨论】:

  • map 在 Python-3.x 中不会将值存储在 list 中。此外,2**128 元素的数量足以破坏您的系统,无论它们是如何存储的。即使每个排列只有一个位,您也需要更多 10**25 Terabyte
  • 我确信可以按照你的要求去做,但是你不应该用完内存,除非你尝试一次在内存中拥有所有的排列(通过使用类似 @987654332 @. 这是因为map() 返回一个 iterator 对象。如果你只是用for value in keys: 之类的东西遍历它,那么只会创建一个(128 个字符的字符串)一次。
  • @martineau 那时你可能不会用完空间,但你肯定会用完时间 =)
  • @schwobaseggl:好点。除非他们有一台非常非常非常快的计算机...;¬)
  • victor:只是出于好奇,你打算对所有这些排列做什么?

标签: python python-3.x permutation


【解决方案1】:

试试这个:

perms = [ x for x in range(0, 2**128)]

【讨论】:

  • 或者更好,不要!
  • 严重怀疑是否有足够的计算机内存来存储结果列表中的 340,282,366,920,938,463,463,374,607,431,768,211,456 个元素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-22
  • 2011-12-30
  • 1970-01-01
  • 2018-01-03
  • 2018-07-21
  • 1970-01-01
  • 2018-10-22
相关资源
最近更新 更多