快速数组比较和替换最接近值的元素的算法.(跟踪点)
Algorithm for fast array comparison and replacing elements with closest value. (Tracking Points)
我有两个数组currPoints和prevPoints。两者的大小不一定相同。我想将currPoints中的每个元素与prevPoints进行比较,并替换prevPoints中最接近currPoints中的值。
的例子:
prevPoints{2,5,10,13,84,22}
currPoints{1,15,9,99}
应用算法后
prevPoints{1,5,9,15,99,22}
那么最好的算法/方法是什么?它需要快。
Context:如果它有帮助,我正在尝试研究一种跟踪算法,该算法从视频中的两个连续帧中获取点,并试图找出第一帧中的哪些点对应于第二帧中的点。我希望用这种方式来追踪物体并给它们贴上ID标签。速度是至关重要的,因为处理是实时完成的。
首先需要对这两个数组进行排序。但是请记住prevPoints数组的原始方向,因为您需要在最后再次获得原始数组。
那么排序后:
prevPoints{2,5,10,13,22,84}
currPoints{1,9,15,99}
现在你基本上需要弄清楚哪些currPoints应该进入prevPoints。该算法将类似于合并2个排序数组,只是您不会合并,而是替换值。
最初两个指针都位于相应数组的开头。currpoints中的1应该取代prevPoints中的2,因为currpoints中的值小于prevPoints,并且您知道prevPoints中的下一个点只会高于2(排序数组,记住)。替换指针并在指针上移动
现在当前指针是在9和prevpointer是在5。计算绝对差,并存储到目前为止遇到的最小绝对差,以及导致遇到的最小绝对差的数字的值。(在这种情况下是4)。当当前指针指向更高的值时,向前移动预览指针。
现在预览指针为10,当前指针为9。9比10小,所以必须更换。由于这个最小的绝对差小于之前的(1 <4)所以10将被9取代。
现在prevpointer在13,current pointer在15。
按相同的方式进行。
重新排列prevPoints数组到原来的方向
希望这有帮助!!
我们按x位置对第一个列表排序,按y位置对第二个列表排序。每个点在每个列表中都有一个位置。对于最近邻搜索(至少我是这么想的)的方法是通过二分查找来找到每个列表中点的位置。然后我们知道4个方向,+-1 x或+-y,基本上我们沿着这些方向旅行,直到目前为止的最佳长度大于那个坐标的距离。
所以我们在每个方向上搜索。假设最近点的距离是25,那么如果+X方向上的下一个坐标超过+X方向上的25我们就可以停止,因为即使Y的变化量是0,它也不可能更近。
这使得找到单个点的n(log(n))最近点算法非常有效和快速。但是,由于我们只需要在n(log(n))时间内得到这两个排序列表我们可以在log(n)时间内找到所有剩余点的最近点。找到在x排序列表中的位置,找到在y排序列表中的位置。然后向外螺旋,直到你截断并找到最近的点。但是,由于脚手架在每种情况下都是相同的,它应该很快结束。
尽管给定您的实际测试用例,您可能想要提出一些简单的非常有效的启发式。
简单地追踪这些点似乎很幼稚,如果我们从一帧到另一帧追踪同样的东西,那么在F2中从F0到F1的点实际上应该等于它在F0到F1的距离。如果我们假设所有这些点都大致沿直线运动,我们就能比简单地求出最近的点要好得多。我们可以找出这些点所经过的曲线。如果我们通过插入F0和F1来猜测它们的位置应该是F2看,这里有一个点的位置非常非常接近。那么我们就可以确定我们已经搞定了。
同样地,人们会假设物体的所有点都大致沿着相同的方向运动。就像每个点从F0到F1移动+5,+5,我们不仅可以猜出它们在F2的位置,而且我们可以知道这些物体相当有效地组成了同一个物体。
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 求最大元素位置的分治算法
- 为什么这个选择排序算法仍然切换一个元素,当它已经是其他元素中最小的元素时?
- C++线性搜索算法,确定数组中元素的数量
- 打印所有儿童树元素的最佳算法?
- 使用 Rcpp 加速替换迭代算法中的列表和向量元素是否合法?
- 如何使用cpp编写选择排序算法以降序对元素列表进行排序?
- 找到对称矩阵的最大元素的最有效算法是什么
- 使用简单的暴力算法找到数组中最大的4个元素
- C++ 查找算法:如何找到元素的最后一次出现?
- 对数组进行排序的算法,先是第一个元素,然后是前 2 个元素,然后是前 3 个元素,依此类推
- 如何在不使用标准算法的情况下在排序向量中添加 c 元素?
- C++ std::向量插入两个元素替代算法失败
- 编写递归算法以从链表中删除元素.编写递归算法以将元素添加到链表中
- 使用算法中的插入函数将元素插入空容器中,未给出预期的结果
- 算法在容器中查找具有给定值的元素之一的成员
- 并行算法将向量的元素分配到另一个元素的元素
- 我如何在C 中制作算法,以在不重复的情况下查找集合的变化(即n元素,选择k)
- 删除元素的算法
- 算法,用于查找获取排序列表所需的最小移动元素到结束步骤