使用潜在的方法来找到摊销的运行时间

  • 本文关键字:运行时间 方法 algorithm
  • 更新时间 :
  • 英文 :


因此,我面临着一个挑战(从算法介绍到第三版(:

假设我们在如果i是2的精确幂,则第i次运算的成本i否则采用潜在法确定摊余成本每次操作。

在遇到这个问题之前,我一直认为我理解潜在的方法;我试过,也试过解决它,但不能。当我必须定义潜在的$\phi(D_I($(数据结构$D$在I第四次操作之后的潜在值(时,我就遇到了困难。

我的基本想法是定义势函数,使得当i是2的因子时,$\phi(D_i(=i$。这样,我就可以"支付"这项操作的成本,甚至不必再分析I为2的情况。

然而,这可能是正确的想法,也可能不是正确的想法-请不要让它阻碍你的创造力/告诉我这是否是错误的,正确的做法是什么:(你们中的任何一个聪明的巫师能带我完成解决这项任务的步骤吗?

您的实际成本如下所示:

1 2 1 4 1 1 1 8 1 1 1 1 1 1 1 16 ...

你现在想做的是为未来的运营付费,以消除峰值。如果我们将每个尖峰分布在前一个尖峰和它之间的元素上,我们就会得到:

1 2 5/2 5/2 11/4 11/4 11/4 11/4 23/8 23/8 23/8 ....

这仍然很复杂。但我们想要一个上限,所以为了得到简单的东西,多付是可以的。因此,对于区间(2^n - 2^(n+1)](不包括第一个,包括最后一个(,存在2^n个数字。我们对大多数元素都有1,然后我们必须为2^(n+1)峰值分散付款。因此,如果我们为每个元素支付1,为未来的尖峰支付2,我们就涵盖了它。这导致以下付款:

3 3 3 3 3 3 3 3 3 3....

你的分析现在更容易了吗?

这个故事的寓意。平滑尖刺,更喜欢简单而不是准确。这将使您的分析更容易。

最新更新