幂 3 计数器的摊销分析
Amortized analysis on power 3 counter
我经常阅读算法教科书 Cormen、Liserson、Rivest 和 Stein。
其中一个有趣的章节是摊销分析。在选择势函数时,二进制计数器是一个困难的例子。我想知道如果计数器是 3 的幂并带有一些系数(例如 x1*1 + x2*3 + x3*9 +...)。
在这种情况下如何确定潜在功能?
为了证明以3为基数的计数器递增需要恒定的摊销时间,可以使用势函数,将当前值中2的个数作为势函数。
一个增量操作可以分为两部分:
数值末尾连续的2s改为0
那些 2 左边的第一个数字递增。
步骤 (1) 所做的功与从状态中移除的 2 秒的数量成正比。
这些 2 中的每一个都是由前一个操作的步骤 (2) 添加的,这需要常数时间并且最多添加一个 2。
设Φ为当前状态下2的个数
- 步骤 (1) 花费的时间与其减小 Φ 的量成正比。由于 Φ 始终 >= 0,因此在步骤 (1) 中完成的许多增量的总工作最多与 Φ 增加的总量成正比。
- 在每个增量中,步骤 (2) 花费恒定时间并增加 Φ —— 最终可以由步骤 (1) 执行的总工作量 --- 最多增加 1,代表实际工作量恒定执行,并且恒定数量的工作排队等待步骤(1)。这就是在当前和未来的增量中摊销的恒定工作量。
我经常阅读算法教科书 Cormen、Liserson、Rivest 和 Stein。
其中一个有趣的章节是摊销分析。在选择势函数时,二进制计数器是一个困难的例子。我想知道如果计数器是 3 的幂并带有一些系数(例如 x1*1 + x2*3 + x3*9 +...)。
在这种情况下如何确定潜在功能?
为了证明以3为基数的计数器递增需要恒定的摊销时间,可以使用势函数,将当前值中2的个数作为势函数。
一个增量操作可以分为两部分:
数值末尾连续的2s改为0
那些 2 左边的第一个数字递增。
步骤 (1) 所做的功与从状态中移除的 2 秒的数量成正比。
这些 2 中的每一个都是由前一个操作的步骤 (2) 添加的,这需要常数时间并且最多添加一个 2。
设Φ为当前状态下2的个数
- 步骤 (1) 花费的时间与其减小 Φ 的量成正比。由于 Φ 始终 >= 0,因此在步骤 (1) 中完成的许多增量的总工作最多与 Φ 增加的总量成正比。
- 在每个增量中,步骤 (2) 花费恒定时间并增加 Φ —— 最终可以由步骤 (1) 执行的总工作量 --- 最多增加 1,代表实际工作量恒定执行,并且恒定数量的工作排队等待步骤(1)。这就是在当前和未来的增量中摊销的恒定工作量。