【发布时间】:2014-04-14 09:02:09
【问题描述】:
我有两个数据数组:
我想将这些相似的图表对齐在一起(通过向任一数组添加偏移量):
基本上我想要的是最具建设性的干扰,如图所示两个波一起产生相同的波但幅度更大:
这也与找到最具破坏性的干扰相同,但必须将其中一个阵列倒置,如图所示:
请注意,第二波反转(波峰变为波谷/反之亦然)。
实际数据不仅包含一个主要的峰值和一个次要的波峰和波谷,而且包含许多,并且可能没有任何明显的峰值。我已经简化了图表中的数据,以显示我希望数据如何对齐。
我在想几个循环,比如:
biggest = 0
loop from -10 to 10 as offset
count = 0
loop through array1 as ar1
loop through array2 as ar2
count += array1[ar1] + array2[ar2 - offset]
replace biggest with count if count/sizeof(array1) > biggest
但是,这需要遍历偏移量并遍历两个数组。我真正的数组定义非常大,这将花费太长时间。
我将如何确定将 data1 与 data2 匹配所需的偏移量?
JSFiddle(请注意,这与语言无关,我想比实际代码更了解算法)
【问题讨论】:
-
可能找到两个数组中最高和最低的元素,并比较它们的索引。
-
@SecondRikudo 这在一般情况下显然会失败。如果没有额外的数据结构,这个问题不太可能在少于
O(n)的情况下得到解决。 -
@SecondRikudo 在更复杂的数组中,会有重复。许多低值和高值会相互冲突。
-
这不是我熟悉的领域(我想有关于它的文献)。但是,由于流不相同,而且性能很重要,我会尝试使用一些随机方法(例如选择 K 个随机代表点,然后通过在滑动时寻找这些 k 点的最小增量来找到最佳偏移量它们沿着完整的流。这个过程可以重复 T 次,以增加信心)。
-
这看起来像是地图匹配算法最基本的问题之一。尝试在那里搜索
标签: algorithm language-agnostic waveform