我有一个算法,我需要计算大型对象之间的所有成对距离(其中距离是一个真正的度量,因此dist(a,b) == dist(b,a)
,在所有其他度量要求中)。我有大约一千个物体,所以我需要计算大约 500,000 个距离。有几个问题:
- 所有这 1000 个对象都被序列化,位于磁盘上的单个文件中。
- 与相对微不足道的距离计算相比,从磁盘读取它们是一项巨大的操作。
- 我不能在不交换的情况下同时将它们全部存储在内存中,然后再颠簸。我一次可以容纳大约 500 个内存。
- 这意味着在某个时间点我需要在之前某个时间点读取并释放内存之后将对象重新读入内存。
因此,鉴于从磁盘读取是瓶颈,并且我一次不能读取超过一半,任何人都可以想到一种算法来读取和释放这些对象,从而最大限度地减少读取总数?
我考虑在前半部分阅读,做所有这些成对的距离,释放所有的记忆并阅读下半部分,然后再做所有的成对距离。此时,我仍然需要前半部分的对象和后半部分的对象之间的距离,我不知道该怎么做。我还考虑过拥有一个缓存,当缓存已满时,它会随机选择一个当前对象来驱逐并读取下一个对象,但我觉得必须有更好的选择。我考虑过 LRU 之类的东西,但它可能导致所需对象在最后一次计算中被驱逐的行为。
总而言之,我有点卡住了。有什么建议吗?