需要使用势函数方法找到序列的摊销成本

时间:2011-09-20 04:20:40

标签: algorithm amortized-analysis

有一系列n个操作,如果i是2的精确幂,则第i个操作花费2i,如果i是3的精确幂,则花费3i,对于所有其他操作则花费1。

首先,我想说这是一个家庭作业问题,我不希望你为我解决。

我使用聚合方法解决了它。为此,我总结了2系列的权力和3的一系列权力并得到10的摊销成本。然后我使用会计方法检查它,对于很长的序列并且它没有失败。但我的问题是如何证明它永远不会失败,我可以显示我想要的长序列,但它仍然不能保证它不会失败一段时间后。

我也尝试使用潜在的函数方法来解决它,这是我真正陷入困境的地方,设置一个潜在的函数,我认为你需要真正有创意,我找不到一些条件,说明在这一点上这将永远抱着,也需要一些帮助。

关于如何在会计方法中证明它以及如何设置潜在功能的一些想法应该足够了。 感谢

1 个答案:

答案 0 :(得分:8)

首先,忘记“1为所有其他操作”和“精确的3”位一分钟。如果我的精确幂为2,那么成本只是2i怎么办?

好吧,假设我们假装每个操作费用为4。也就是说,对于每个操作,我们将四个硬币放入我们的“IOU堆”......然后当我们达到2的实际功率时,我们使用这些硬币“支付”。(这是描述潜在功能方法的一种方式。)

步骤1:存入四枚硬币。需要支付2 * 1 = 2,所以我们的硬币堆是两个。

第2步:存入四枚硬币。需要支付2 * 2 = 4,所以我们的桩又是两个。

第3步:存入四枚硬币。桩现在有六个硬币。

第4步:存入四枚硬币。桩现在有十个硬币,但4是2的幂,所以是时候支付4 * 2 = 8,所以我们的桩再次下降到两个硬币。

步骤5-7:每个存放四个硬币。总计现在是14个硬币。

步骤8:存入四枚硬币(总数= 18),花8 * 2 = 16,再留下两枚硬币。

很容易证明这里的稳定状态是我们继续将我们的硬币耗尽到恒定(2),但我们永远不会低于。因此,每次操作的摊销成本为四个单位。

现在,假设当i为2的幂时,操作X的成本为2i(否则为0)。假设当i是3的幂时操作Y花费3i(否则为零)。并且假设操作Z成本为1,除非i是2的幂或3的幂。观察到您的问题等同于执行操作X Y Z迭代...因此,如果您可以分别计算出X,Y和Z的摊销成本,您可以将这些成本相加以获得总体摊销成本。

我刚给你X;我把Y和Z作为练习。 (虽然我不相信最终答案是10.接近10,也许......)