我有一个列表更改列表 - 添加和删除。列表可能很大——比如 10,000 项。
我想知道更改 9'000 后列表的状态。
我可以从一开始就遍历列表以更改 9'000。这对我来说似乎有点啰嗦。
我可以保留一个项目列表并记录它们何时被添加和何时被删除,然后遍历此列表以查看列表中特定更改的内容。如果添加和删除的可能性相同,我将需要遍历的列表元素数量减半......
但是大 O 表示法表示,将问题的大小减半并不能提高效率(如果我理解正确的话)。
我可以在每 100 次或第 1000 次更改时缓存列表的状态……但是,大 O 再次表示,将项目数除以“n”并不能提高效率。
那么这样做的有效方法是什么?有没有一种有效的方法来做到这一点?
更多细节: 具体来说,我正在跟踪自定义分配器中的内存分配/释放。每个分配/解除分配都是列表中的一个事件。每个分配都有一个唯一的 ID。我想知道(例如)9'000 个事件之后当前分配的内容。
我的第一个想法是为每个 id 存储分配的事件和解除分配的事件。然后将此列表遍历到分配事件大于 9000 的第一个分配。但是就像我说的,这只会使我需要遍历的项目数量减半。
我喜欢 Mike F 提出的观点——从最近的第 100 个项目步行是恒定的时间......