![]() |
1
4
我认为您在这里的最佳方法是定期“快照”完整的状态数据,比如说每1000个样本(例如),并记录增量。当您将数据存储为与某个原始值(即delta)的偏移量时,您别无选择,只能从原始值开始重建完整的数据。存储定期快照将减少您必须执行的重建量——设计权衡一方面是在低存储需求但重建时间长,另一方面是在高存储需求但重建时间短之间。 例如,mpegs将每个帧存储为当前帧和上一帧之间的差异。通常情况下,这会强制从一开始就查看MPEG,但是格式也会定期存储完整的帧,这样解码器就不必一直回溯到文件的开头。 |
![]() |
2
1
你可以在日志(n)中按时间搜索,你可以感觉到有多少更新是可以接受的…因此,我的解决方案是: 选择一个可以接受的更新的数字n,以返回结果。256可能是好的,考虑到你提到的比例。 每N条记录,向字典提交一个所有状态的条目,带有时间戳。 现在,你有一个折衷,字典大小与速度。n->\infty是常规搜索。n<-1是您当前的解决方案,n任何其他地方都需要较少的内存,但速度较慢。 您的实现现在是(对于时间x): 将子样本全局字典的搜索记录到x之前的时间戳(时间戳为y)。 将事件列表的(n)搜索记录到时间戳y,并执行少于n次的更新。 选择n作为2的幂甚至可以让你做一些不错的移位技巧来做一个向下取整的整数除法,很快很好。 |