我试图编写一些Python代码,其中包含可能非常大的集合的并集/交集。大多数情况下,这些集合本质上是set(xrange(1<<32))
或类似的东西,但通常会有一些不属于集合的值范围(比如,“第5位不能是清晰的”),或者抛出额外的值。大多数情况下,集合内容可以用算法表示。在
我可以去做一些肮脏的工作来子类set
并创建一些东西,但我觉得这一定是以前做过的事情,我不想花几天时间来重新发明轮子。在
哦,为了让它更难,一旦我创建了集合,我需要能够以随机顺序迭代它。迅速地。即使集合有十亿个条目。(而且十亿的条目集最好不要占用千兆字节,因为我会有很多这样的数据。)
有密码吗?有人有绝招吗?我要月亮吗?在
您正在尝试创建一个包含0到4294967295之间的所有整数值的集合。一个字节是8位,你可以得到255。99.9999940628%的值大小超过一个字节。即使您能够克服语法问题,您的集合的粗略最小大小是40亿字节,即4GB。在
你永远不可能在少于1 GB的内存中保存该集合的实例。即使是压缩,也可能是一个艰难的挤压。你的数学要聪明得多。您可以利用集合的某些属性。毕竟,这是一个非常特别的场景。你想做什么?在
你说:
编写一个类来表示整个集合API,但在算法上确定集合包含如何。然后用一系列的类来包装其他集合来执行并集和交集的算法。在
例如,如果有一个集合
a
和集合b
,它们是这些伪集合的实例:然后将}。所有的set方法都可以设计成自动返回这些伪并集/交集,这样整个过程是透明的。在
u
与全套API一起使用,这将反过来使用正确的逻辑查询a
和{编辑:使用非常有限的API的快速示例:
^{pr2}$跑步让你:
如果您使用的是python3.0,那么您可以集合。集合在
相关问题 更多 >
编程相关推荐