最佳答案
例如,我有一些清单:
a[0] = [1, 1, 1, 0, 0]
a[1] = [1, 1, 0, 0, 1]
a[2] = [0, 1, 1, 1, 0]
# and so on
它们看起来是不同的,但是如果假设开始和结束是连接的,那么它们就是 循环播放相同的。
问题是,每个列表的长度都是55,其中只包含3个1和52个0。如果没有循环条件,则有26,235个(55个选择3)列表。然而,如果条件“循环”存在,有大量的循环相同列表
目前,我通过以下方式循环检查身份:
def is_dup(a, b):
for i in range(len(a)):
if a == list(numpy.roll(b, i)): # shift b circularly by i
return True
return False
在最坏的情况下,这个函数需要55次循环移位操作。有26235个名单可以互相比较。简而言之,我需要55 * 26,235 * (26,235-1)/2 = 18,926,847,225个计算。差不多有200亿!
有没有什么好的方法可以减少计算量? 或者任何支持 圆形的的数据类型?