问题:
我有一份数据列表,其中包含时间和值(时间=长整型毫秒和双精度值)。现在我需要在不同的时间范围内计算几个平均值。
我每秒最多可以获得50个值,但有时只有几个值,并且需要保持最后10秒的值,因此是500个值。
我想要的是:计算时间 >= 开始时间并且时间 <= 结束时间的值的平均值。
我可以确保没有重复的时间,因此它可以用作键。
目前我使用一个数组来存储值,并且有一个位置标记器,一旦达到500,就会被重置为0,因此旧条目会被回收。我可以轻松更改它。
我不确定最快的方法是什么,例如手动搜索数组还是使用列表、哈希映射、集合(带比较器?)或其他方式。我找不到一个(java)类似列表的函数,在其中我有一个内置的搜索,即“key >= x”或“value >= x”。
性能比漂亮或易于编码更重要。
指向正确方向会很好。
每次收到新值时,我都会计算最后10个值的平均值,这单独就是30-50次计算,而且是最重要的数据。我需要区分测量中的小误差和实际变化。 我还额外计算每1/10秒的平均值(这可能会被删除),最后计算一秒钟和最后10秒钟的平均值。这是每秒钟额外的12个平均值计算。减少计算次数并不是一个真正的选择。
由于这有点抽象,这里是数据的示例(其中avg是最后10个值的平均值,但那不是程序逻辑)。
我每秒最多可以获得50个值,但有时只有几个值,并且需要保持最后10秒的值,因此是500个值。
我想要的是:计算时间 >= 开始时间并且时间 <= 结束时间的值的平均值。
我可以确保没有重复的时间,因此它可以用作键。
目前我使用一个数组来存储值,并且有一个位置标记器,一旦达到500,就会被重置为0,因此旧条目会被回收。我可以轻松更改它。
我不确定最快的方法是什么,例如手动搜索数组还是使用列表、哈希映射、集合(带比较器?)或其他方式。我找不到一个(java)类似列表的函数,在其中我有一个内置的搜索,即“key >= x”或“value >= x”。
性能比漂亮或易于编码更重要。
指向正确方向会很好。
每次收到新值时,我都会计算最后10个值的平均值,这单独就是30-50次计算,而且是最重要的数据。我需要区分测量中的小误差和实际变化。 我还额外计算每1/10秒的平均值(这可能会被删除),最后计算一秒钟和最后10秒钟的平均值。这是每秒钟额外的12个平均值计算。减少计算次数并不是一个真正的选择。
由于这有点抽象,这里是数据的示例(其中avg是最后10个值的平均值,但那不是程序逻辑)。
value Avg timeReading timeReadingISO
1024,6668701172 - 1385408750828 2013-11-25 19:45:50
1024,6668701172 - 1385408751350 2013-11-25 19:45:51
1024,6668701172 - 1385408751859 2013-11-25 19:45:51
1024,6683349609 - 1385408752373 2013-11-25 19:45:52
1024,6683349609 - 1385408752878 2013-11-25 19:45:52
1024,6689453125 - 1385408753385 2013-11-25 19:45:53
1024,6689453125 - 1385408753895 2013-11-25 19:45:53
1024,6721191406 - 1385408754406 2013-11-25 19:45:54
1024,6721191406 - 1385408754912 2013-11-25 19:45:54
1024,6774902344 - 1385408755432 2013-11-25 19:45:55
1024,6774902344 1024,67 1385408755994 2013-11-25 19:45:55
1024,6774902344 1024,67 1385408756502 2013-11-25 19:45:56
1024,6837158203 1024,67 1385408757012 2013-11-25 19:45:57
1024,6837158203 1024,67 1385408757520 2013-11-25 19:45:57
1024,689453125 1024,68 1385408758028 2013-11-25 19:45:58
1024,689453125 1024,68 1385408758536 2013-11-25 19:45:58
1024,6938476563 1024,68 1385408759055 2013-11-25 19:45:59
1024,6938476563 1024,68 1385408759560 2013-11-25 19:45:59
1024,6990966797 1024,68 1385408760075 2013-11-25 19:46:00
1024,6990966797 1024,69 1385408760579 2013-11-25 19:46:00
1024,7038574219 1024,69 1385408761086 2013-11-25 19:46:01
1024,7038574219 1024,69 1385408761596 2013-11-25 19:46:01
1024,7111816406 1024,69 1385408762103 2013-11-25 19:46:02
1024,7111816406 1024,70 1385408762606 2013-11-25 19:46:02
1024,7111816406 1024,70 1385408763112 2013-11-25 19:46:03
1024,7111816406 1024,70 1385408763622 2013-11-25 19:46:03
1024,7172851563 1024,70 1385408764128 2013-11-25 19:46:04
1024,7172851563 1024,71 1385408764637 2013-11-25 19:46:04
1024,7208251953 1024,71 1385408765149 2013-11-25 19:46:05
1026,5457763672 - 1385474621756 2013-11-26 14:03:41
1026,6057128906 - 1385474621790 2013-11-26 14:03:41
1026,6257324219 - 1385474621823 2013-11-26 14:03:41
1026,6057128906 - 1385474621858 2013-11-26 14:03:41
1026,6257324219 - 1385474621890 2013-11-26 14:03:41
1026,6257324219 - 1385474621921 2013-11-26 14:03:41
1026,6057128906 - 1385474621956 2013-11-26 14:03:41
1026,5457763672 - 1385474621988 2013-11-26 14:03:41
1026,6557617188 - 1385474622022 2013-11-26 14:03:42
1026,6657714844 - 1385474622057 2013-11-26 14:03:42
1026,6257324219 1026,61 1385474622090 2013-11-26 14:03:42
1026,6057128906 1026,62 1385474622123 2013-11-26 14:03:42
1026,6657714844 1026,62 1385474622159 2013-11-26 14:03:42
1026,6557617188 1026,62 1385474622193 2013-11-26 14:03:42
1026,6557617188 1026,63 1385474622227 2013-11-26 14:03:42
1026,6257324219 1026,63 1385474622260 2013-11-26 14:03:42
1026,6257324219 1026,63 1385474622298 2013-11-26 14:03:42
1026,6557617188 1026,63 1385474622330 2013-11-26 14:03:42
1026,6257324219 1026,64 1385474622365 2013-11-26 14:03:42
1026,6257324219 1026,64 1385474622401 2013-11-26 14:03:42
1026,6257324219 1026,64 1385474622431 2013-11-26 14:03:42
1026,5758056641 1026,64 1385474622466 2013-11-26 14:03:42
1026,6057128906 1026,63 1385474622501 2013-11-26 14:03:42
1026,5457763672 1026,63 1385474622533 2013-11-26 14:03:42
1026,5457763672 1026,62 1385474622565 2013-11-26 14:03:42
1026,6057128906 1026,61 1385474622599 2013-11-26 14:03:42
1026,6057128906 1026,60 1385474622631 2013-11-26 14:03:42
1026,5758056641 1026,60 1385474622665 2013-11-26 14:03:42
1026,5457763672 1026,59 1385474622702 2013-11-26 14:03:42
1026,6057128906 1026,59 1385474622734 2013-11-26 14:03:42
1026,6557617188 1026,58 1385474622766 2013-11-26 14:03:42
1026,5758056641 1026,59 1385474622800 2013-11-26 14:03:42
1026,6057128906 1026,59 1385474622836 2013-11-26 14:03:42
1026,6057128906 1026,59 1385474622868 2013-11-26 14:03:42
1026,5158691406 1026,59 1385474622901 2013-11-26 14:03:42
1026,5457763672 1026,59 1385474622935 2013-11-26 14:03:42
1026,6856689453 1026,58 1385474622966 2013-11-26 14:03:42