【发布时间】:2014-02-28 10:24:27
【问题描述】:
我有一个具有非常特殊算法需求的程序。我需要搜索一个数字列表,以找到列表中与一对搜索数字最匹配的位置。我将“最佳对齐”定义为该对齐处差异的总和。
例如,如果我有以下数字列表:
12 18 -20 45 11 34 6 -8
...我正在搜索 44 13 对,那么算法应该返回 3,因为这种对齐方式是最好的(总差只有 5),而 3 是对齐开始的索引
index: 0 1 2 3 4 5 6 7
list: 12 18 -20 45 11 34 6 -8
search alignment: -- -- -- 43 14 -- -- --
difference: -- -- -- 2 3 -- -- --
我目前正在使用一种明显的蛮力方法 - 只需找到每个对齐的差异并记住最好的。但是,这对我的程序来说是一个瓶颈,所以任何改进都会有所帮助。
我提出的唯一优化有点微不足道:如果对于对齐方式,配对中第一个数字的差值超过当前最佳总差值,则跳到下一个对齐方式,而无需检查配对中的第二个数字.有帮助,但作用不大。
如果相关,列表会被搜索多次,所以如果有某种初始排序可以加快未来的搜索速度,我会很感兴趣。
我会很感激任何人的任何想法,即使它只是指向相关算法的维基百科页面的链接。谢谢!
【问题讨论】: