我有一个固定大小的数组 N 和三个可能的操作 ALLOC(numBytes)FREE(block) ,它们在给定的数组上分配和释放内存的连续块(间隔)(类似于malloc()和free()),以及一个压缩的 COMPACT 操作已分配的块(重新排列数组中的块,从偏移 0 开始,这样块之间没有间隙) .

有一个预定义的 ALLOCFREE 操作列表必须在数组上按顺序执行(顺序不能更改) . 问题是阵列可能变得非常碎片化并且 ALLOC 将失败,并且每次发生这种情况时,都需要执行 COMPACT 操作 .

我需要一种方法来执行操作列表(对于每个 ALLOC 操作以找到数组中的最佳偏移量),以便最小化所需的 COMPACT 操作的数量 . 请注意,优化峰值内存使用量目前并不重要 .

关于如何解决这个问题的任何指示?我觉得这可能是一个NP难的问题,但我无法弄清楚那是什么 .