快速重合搜索算法?

时间:2014-09-11 20:27:20

标签: performance algorithm matlab

向所有善于建议快速算法,特别是搜索算法的人们致以帮助!

我正在尝试优化一些MATLAB代码,这些代码在按时间顺序排列的时间列表中查找“巧合”。 “重合”被定义为在彼此的给定时间窗口内发生的两个或更多个时间。例如,如果我们有以下时间:

100 150 210 220 380 500 520 610

我想在彼此100之内寻找'巧合',然后将返回以下内容[100 150],[210 220],[500 520]。请注意,每次只能包含在一个重合事件中,因此[150 210 220]无效为三向重合,因为150已经在[100 150]中使用。

我的时间是按时间顺序排序的,所以我当前的MATLAB代码只需在列表中滚动一个100的“窗口”,然后选出“落入”的那些时间。这是有效的,并不是太慢,但我想知道是否有一个我错过的更有效的解决方案?当然有一些聪明的技巧可以在这里播放?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

简短回答 - 不。如果我了解你"窗口滚动"正确 - 您将浏览列表,选择每个元素作为较低点并检查其较大的邻居。如果邻居在100范围内,则将其添加到组中。如果不是,则关闭组并使用邻居作为新的低点。由于您只能通过这种方式遍历每个元素,因此无法提高当前算法的复杂性,这已经是o(n)。