我有两个数组currPoints和prevPoints。两者的大小不一定相同。我想将currPoints中的每个元素与prevPoints进行比较,并替换最接近currPoints中的值的prevPoints中的值。

例:

prevPoints{2,5,10,13,84,22}
currPoints{1,15,9,99}

应用算法后
prevPoints{1,5,9,15,99,22}

那么,最佳的算法/方法是什么?它需要快速。

上下文:如果有帮助,我正在尝试一种跟踪算法,该算法从视频的两个连续帧中获取点,并试图找出第一帧中的点对应于第二帧中的点。我希望以这种方式跟踪对象并用ID标记它们。速度至关重要,因为要实时进行处理。

最佳答案

您需要先对两个数组进行排序。但是请记住prevPoints数组的原始方向,因为您需要在末尾再次获取原始数组。

所以排序后:

prevPoints{2,5,10,13,22,84}
currPoints{1,9,15,99}

现在,您基本上需要弄清楚哪些 currPoints 应该进入 prevPoints 。该算法将类似于 merge 2排序数组,只是您不会合并,而是替换值。

最初,两个指针都位于相应数组的开头。基于currPoints中的值小于prevPoints并且您知道PrevPoints中的下一个点将仅大于2(已排序,请记住),来自currpoint的1应该替换prevPoints中的2。更换并继续移动指针。

现在,currpointer为9,prevpointer为5。计算绝对差,并保存到目前为止所遇到的最小绝对差以及引起最小最小绝对差的数字值。(在这种情况下为4) )。当指针指向更高的值时,向前移动prevpointer。

现在prevpointer为10,currpointer为9。9小于10,因此必须进行替换。由于此最小绝对差小于以前的绝对差(1
现在,prevpointer为13,currpointer为15。

以相同的方式进行。

将prevPoints数组重新排列为原始方向。

希望这可以帮助!!!

10-08 07:05