我有 n 个大小不等的有序列表(我事先不知道会有多少个列表)。我需要找到每个列表中一个元素之间的最小平均距离。
例如,给定三个列表的 n=3:
a = [14, 22, 36, 48]
b = [14, 23, 30, 72]
c = [1, 18, 24]
输出应该是 (22,23,24) 因为:
mean(abs(22-23), abs(23-24), abs(22-24)) = 1.33333
这是上例中所有点中最小的。
我尝试在 Python 中实现它,如下所示
def aligner(aoa):
'''
read arrays of arrays of peaks and return closest peaks
'''
#one of arrays is empty
if not [y for x in aoa for y in x]:
return None
# there is the same nr in all array no need to do anything
candidate = set.intersection(*map(set, aoa))
if candidate:
# returns intersect
return [max(list(candidate))] * len(aoa)
else:
#tried cartesian product via bumpy malloc err
pass
我现在怀疑的是另一部分的实施。我曾考虑使用笛卡尔积来生成所有组合,但会遇到内存问题。我的猜测是会以某种方式生成所有组合(可能是 itertools??)并循环遍历所有这些组合,但我不知道是否有任何算法可以解决我可以使用的这个问题。
我不需要代码,只提示是否有任何有效的方法来解决这个问题,或者在排列列表上使用 n for 循环的蛮力是唯一的
编辑
关于问题的大小,列表的 nr 最大为 100(固定),而元素的 nr 可以变化,但我会说每个列表有 4 或 5 个点的示例是一个现实的场景。
所有点都是非负的。
尝试了建议的 itertools 解决方案,但当然不是内存问题,但已经运行了几个小时,并且卡在第三个元素上。