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
可能有效,但我不知道该如何证明。
11
也可以表示为101000
(8 + 3)。 (这将是Zeckendorf表示法。) - Mark Dickinson