【问题标题】:taocp, sequential allocation questionstaocp,顺序分配问题
【发布时间】:2009-07-21 03:56:17
【问题描述】:

我在工作 tacop 2.2.2 顺序分配时遇到了一些问题,在第 247 页重新打包内存部分。

主题是有 n 个堆栈共享一个公共区域位置 L0

目标是在插入或删除元素时发生溢出 堆栈 i,如何重新打包内存。 (为堆栈 i 腾出空间,从 尚未填满的表格)。

一)。找到 i CONTENTS(L),对于 TOP[k] >= L > BASE[i+1] 最后, 设置 BASE[j] -> BASE[j] + 1, TOP[j] -> TOP[j] + 1,对于 i

这是我的问题:

他们如何找到尚未填充的堆栈?堆栈 k?为什么选择最小的k?

【问题讨论】:

    标签: memory-management taocp


    【解决方案1】:

    要找到尚未填充的堆栈,使用的基本思想是事实:

    堆栈k 未满 TOP[k] < BASE[k+1]

    算法第一步中的循环将ki+1运行到n,以找到满足此条件的第一个k

    另请注意,最初通过设置BASE[n] = TOP[n] = L0BASE[n+1]=LInfty 将所有空间分配给最后一个堆栈nth。所以除非所有“更高”的栈都被填满,否则我们会找到这样一个k

    您的第二个问题(为什么选择最小的 k?)更容易回答:第 247 页上的算法只是重新包装的一种方式简单一个在那。正如 Knuth 在算法文本上方的段落中提到的那样:

    建议自己进行重新包装的几种方法; ... 我们将从给出最简单的方法开始, 然后会考虑一些替代方案。

    后来,Knuth 描述了一种重新包装方法,该方法考虑了早期的重新包装,使该过程具有一定的适应性。

    【讨论】:

    • 嗯...为什么不是 BASE[k+1] - TOP[k] > 1,因为 BASE[k+1] 和 TOP[k] 都有一个位置,如果 BASE[k +1] - TOP[k] = 1 ,那不是说 BASE[k+1] 就在 TOP[k] 之后吗?
    • 如果我没听错的话,noBASE[k+1](k+1)st 堆栈中未使用,可供kth 堆栈使用( kth 堆栈的最后一个元素可以存储在位置 BASE[k+1])。所以我们需要检查BASE[k+1] - TOP[k] > 0not BASE[k+1] - TOP[k] > 1
    猜你喜欢
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    相关资源
    最近更新 更多