python中的一个集合的分区

我有b桶0 …. b-1和m苹果0 …. m-1.在开始时,所有苹果都放在桶0中.

然后运行一些分析会导致苹果在桶之间移动.我已经通过使用2D列表(作为存储桶)实现了这一点,其中只要需要在存储桶之间移动苹果ID就会将其删除并附加.然而,对于我的分析来说,这是非常低效的,因为这些运动大约是数百万或数十亿.所以,我想知道是否有更好的解决方案来实现这样的结构?

顺便说一下,选择标题,因为这非常类似于设置问题的分区,其中没有成员可以放置在多于1个子集中.这里还有一个带有4个苹果和3个桶的示例,以使其更清晰:

time 0:
a=[[0,1,2,3],[],[]]
time 1: (say apple 3 needs to be moved to bucket 2)
a=[[0,1,2],[],[3]]

解决方法:

从列表中删除元素的问题是它需要O(n):它采用列表中元素数量的顺序来删除该项目.

你最好使用集合,甚至更好地使用在O(1)中工作的bitarray.

例如:

m = 50 #the number of apples
b = 10 #the number of buckets
fls = [False]*m
a = [bitarray(fls) for _ in range(b)]
a[0] = bitarray([True]*m) #add a filled bucket at index 0

def move_apple(apple_id,from_bucket,to_bucket):
    a[from_bucket][apple_id] = False
    a[to_bucket][apple_id] = True
上一篇:信用评分预测模型(四)--支持向量机算法


下一篇:MYSQL-在表中生成子集序列