假设整数表示为斐波那契数的总和而不是 2 的幂,所以100101
表示F(6)+F(3)+F(1)=8+2+1=11
(我们假设F(1)=F(2)=1
)。我想在 O(1) 摊销时间内在这个表示下增加一个整数。
我有递增算法:直觉是不应该有两个连续的 1 位。所以我首先将最低有效位 0 设置为 1,然后从最高有效位开始,如果数字有两个连续的 1 位,例如位 i 和 i-1,将它们都设置为 0 并设置 i+1位为 1。递归执行此操作,直到没有两个连续的 1 位。
我使用会计方法进行摊销分析。因此,对于每个增量操作,我将授予 k 美元,并且每个位翻转将花费 1 美元。但是,我无法设置和证明 k 的正确值。从经验上我认为k=3
可以工作,但我不知道如何去证明这一点。