Data structures 存储部分变化数组的时间序列最有效的数据结构是什么?

Data structures 存储部分变化数组的时间序列最有效的数据结构是什么?,data-structures,core-data,time,time-series,series,Data Structures,Core Data,Time,Time Series,Series,我的问题是我有一个大小为N的对象数组。在每次(t+1)之后,数组的一些值可能会改变,也可能不会改变。因此,假设t+1指数15发生变化,但其他一切保持不变 当然,除了拥有一个数组之外,存储这样的东西(在内存中)最有效的方法是什么?我希望能够在任何时间获取数组的所有值,比如说以最有效的方式获取getValues(longtime) 比如说4个数组 时间1 无效的 无效的 无效的 xyz 时间2 无效的 无效的 abc xyz (请注意,此处仅更改了abc),但我们仍然保留时间1后最后一个索引的值。您

我的问题是我有一个大小为N的对象数组。在每次(t+1)之后,数组的一些值可能会改变,也可能不会改变。因此,假设t+1指数15发生变化,但其他一切保持不变

当然,除了拥有一个数组之外,存储这样的东西(在内存中)最有效的方法是什么?我希望能够在任何时间获取数组的所有值,比如说以最有效的方式获取getValues(longtime)

比如说4个数组

时间1 无效的 无效的 无效的 xyz

时间2 无效的 无效的 abc xyz


(请注意,此处仅更改了abc),但我们仍然保留时间1后最后一个索引的值。

您所要求的在学术CS字段中称为“部分持久数组”。有关持久性的更多信息,请参阅

一个简单的解决方案是使用搜索树而不是数组。您可以使用纯功能性的平衡搜索树来保证每次读取或写入都需要O(lgn)最坏情况时间(其中n是数组的大小),而不是O(1)时间。(如果将时间戳版本保存在可扩展数组中,则添加新版本是O(1)摊销,而访问旧版本是O(1)最坏情况。)

如果您不熟悉纯功能搜索树,您可能会阅读。它们是纯函数树,索引为固定宽度的整数(以trie的形式),因此具有固定的深度。无论是在最坏的情况下还是在现实世界中,这可能是解决问题的最快方法

据我所知,在最坏的情况下,唯一的其他部分持久化阵列可能需要更长的时间。如果以各种受限方式访问阵列,则有些阵列具有更好的摊销复杂性,有些阵列具有更好的预期复杂性