algorithm - 平均情况内存使用 - 算法分析

标签 algorithm memory-management complexity-theory

正如标题所述,我在分析内存分配器 (quick-fit) 的平均内存使用情况时遇到了一些困难。我的目标是确定分配 block 的平均情况内部碎片(使用快速适配内存分配器)。

到目前为止我还没有真正取得任何进展,因为我真的不知道如何分析平均情况。我的第一个想法是,假设您有 T(n),这就是在分配大小为 n 的内存块(内部碎片)时浪费的内存。此外,假设分配大小为 n 的内存块的概率是 P(n),那么平均情况下的内存浪费基本上应该是 T(n1)P(n1)+( Tn2)P(n2)+....+T(nk)P(nk)

问题是我不知道 T(n) 和 P(n)..或者不做任何假设甚至有可能吗?

对于最坏的情况,我简单地认为它是 O(n-1)=O(n)。因为在最坏的情况下,我们只有一个“快速列表”,比方说,first-fit。那么最糟糕的情况是我们只有一个大小为 n 字节的大块可供分配,而请求的内存只有 1 字节,那么最多浪费 n-1 字节?

我可能没有任何意义,但如果您能帮助我们更清楚地说明这一点,我们将不胜感激。 谢谢

最佳答案

令 T(n) 为进行 n 大小分配时浪费的空间。计算 T(n) 应该很简单吧?对于 b 的 block 大小,T(n) = b - (n%b) ?

第二部分更加微妙。这将取决于分配请求大小的分布。您可能会假设浪费是均匀的,在这种情况下,您的平均浪费将为 b/2。

b/2 的推导:对于任何 i,有浪费 i 的概率为 1/b(统一假设)。预期浪费 = sum_i Probability_i Wastage_i = 0/b + 1/b+....+ (b-1)/b = (b-1)/2 约等于 b/2。

关于algorithm - 平均情况内存使用 - 算法分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8934551/

相关文章:

regex - 使用 Perl,如何使用每个数组元素内的数字值对数组进行排序?

java - 任何可以限制内存缓存的内存使用的 Java 缓存,而不仅仅是实例计数?

c++ - 在 main() 之前崩溃

objective-c - 对 performSelector :withObject:afterDelay:inModes 保留计数的影响

algorithm - 用遗传算法优化级数和

algorithm - 单循环N次数据排序

big-o - 以下代码片段的最坏情况运行时间作为 N 的函数的增长顺序是多少?

algorithm - 如何计算算法的复杂度?

language-agnostic - 复杂性(初学者问题)

algorithm - 具有较大且不可预测异常的 PID 控制回路