复杂算法双向树 - 抛物型三维运动分类

时间:2014-01-23 11:44:33

标签: c++ algorithm tree

我正在研究的程序的一部分需要在3D空间和时间中对数据点进行排序,以尝试找到与遵循抛物线轨迹的对象相匹配的项目。这些需要联系起来。

我的开始如下:

取每个点(每个时间间隔可能有多个点)并尝试在多个时间间隔内将其与之前的点匹配。这是通过每个对象持有一个共享指针向量来完成的,这些对象也链接到它们所链接的对象。这是时间倒退,即指点将会及时返回。每个对象也可以通过多个对象链接。这给出了一个双向树。这个阶段的匹配标准是基本的,只是规定了一些噪音。

我还有一个物理类,它给出了一个错误编号,给出了3个空间和时间点。误差是双倍,是距离预测位置的距离除以时间差的倍数。

我需要做的是在C ++中找出最好的方法来找到这棵树中与抛物线最匹配的项目(即最小化错误),同时最大化链接数量并最小化时间差链接。

问题在于,在树之后,选项的数量会急剧增加,如果只需要两个点来确定错误编号,那么这将很简单。

在这种情况下,递归也会好吗?

希望它有意义。

1 个答案:

答案 0 :(得分:1)

我会忘记数据结构并尝试解决这个问题,因为在存在大量异常噪声的情况下将曲线拟合到数据中。见http://en.wikipedia.org/wiki/RANSAC

基本思想是通过重复两步迭代来尝试找到适合数据的点的子集。

第一步:调整拟合的参数,以增加它们适合当前所选点的子集的程度。

第二步:给定当前拟合参数,选择最适合它们的点子集。

从一个随机的开始,通过合理的拟合度,这个过程应该增加每一步的拟合,直到它收敛。从许多不同的随机开始尝试,并随时选择最适合的。