java - 用于计算距离的修剪集合

标签 java algorithm

我有数据收集,其中每条记录都包含有关车辆速度和记录时间的信息。每条记录之间的时间差是不同的,大约300毫秒。我使用这个集合来计算行进距离。我想在不损失太多计算准确性的情况下修剪这个集合。有什么算法吗?

我尝试编写简单的算法,如果记录与之前的记录相差至少 X %,则删除记录。该算法效果不佳。例如,当我使用 3% 和 4% 修剪的算法时,记录数相同但计算的距离在 500 米距离上相差 40 米,其中 4% 更准确。

编辑:本杰明算法的变化:

我有时间收集记录,所以我需要 3 条记录。

double timeDifference = (next.time - curr.time)/(curr.time - previous.time); previuos.value = (previous.value + curr.value * timeDifference)/2

此外,我不希望结果为双倍但很长,因此我需要使用会改变距离的舍入。另外一分钟大约有 300 条记录,所以我希望四舍五入不会对计算产生太大影响。

最佳答案

您有一个值对列表,即:

    time | speed
1:  0    | 0
2:  300  | 10
3:  600  | 40
4:  900  | 48
5:  1200 | 50
6:  1500 | 30
7:  1800 | 0

你总是需要查看两个值 ii-1 .我们从 i=1 开始因为否则我们将访问索引 -1 :

for(int i=1; i<list.size(); i++) {
  if(Math.abs(list.get(i).speed - list.get(i-1).speed) < 3) {
    list.get(i-1).time = (list.get(i).time + list.get(i-1).time) / 2;
    list.get(i-1).speed = (list.get(i).speed + list.get(i-1).speed) / 2;
    list.remove(i);
  }
}

换句话说: 如果 i 之间的速度差异和 i-1小于 3,则更新条目 i-1并将其时间和速度设置为 i 的平均值和 i-1 .之后我们删除项目 i从列表中。

示例数据会发生什么:此代码删除条目 5:来自示例数据,因为 abs(50-48) = 22 < 3 , 并设置条目 4:time = 1150speed = 49

上面的例子当然有至少两个问题(很容易解决——例如你的作业):1.如果列表只有一个条目,代码将抛出异常。 2. 删除项目后,list.size()更改,但上面的代码将无法识别。这意味着:删除任何条目后,它将抛出异常。

我还没有测试过,只是为了向您展示如何清理列表。

您还可以添加一些代码,以防止从列表中删除最后一个条目,否则您可能不会获得准确的最后时间值。也可以对同一数据运行多次,直到 list.size()保持不变。

(看看下面的评论)

关于java - 用于计算距离的修剪集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31363846/

相关文章:

Java - Uber jar (Maven Shaded) 无法将资源视为 URL

java - Hibernate JPA 标准查询

algorithm - 分类文本时自动将类别相互链接

java - 使用注释的 Struts 2 验证

Java 绘制的线在某些点消失了

java - 适本地缩放或调整图像或 Sprite 的大小以保持其原始纵横比

c# - 在 x 轴的 2D 点中定位基因图的非递归方法。后代如下

javascript - 简单多边形中 2 个顶点的可见性

java - 基本的 Android 单元测试

arrays - Swift 3 数组包含 vs 集合包含