参加考试并偶然发现了这项练习。我用这三种方法解决它时遇到了麻烦。这是文字:
假设我们在一系列n个操作下维护数据结构。 设f(k)表示第k个的实际运行时间 操作。对于以下每个函数f,确定 导致单一操作的摊销成本。 (对于练习,请尝试所有 本说明中描述的方法。)
(a)f(k)是最大的整数i,使得2 ^ i除以k。
来源:https://courses.engr.illinois.edu/cs473/fa2013/notes/14-amortize.pdf
我做了一个小桌子试图概述
k 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
f(k) 0 1 1 2 2 2 2 3 3 3 3 3 3 3 3 4 ...
我不知道潜在的方法在哪里可以提供帮助,因为随着时间的推移,操作会变得更加昂贵。出于同样的原因,银行家的方法似乎也不适用于此。所以我认为聚合方法最合适。
是我为n个操作序列提出的,但是我似乎无法改变它,这让我怀疑它是否是正确的方法。
编辑:所以看起来我误解了我认为正确的表格看起来像这样的问题:
k 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
f(k) 0 1 0 2 0 1 0 3 0 1 0 1 0 1 0 4 ...
答案 0 :(得分:0)
快速回答以防任何人谷歌搜索
使用银行家的方法,您可以“保存”'一定数量的学分(在这种情况下,每个操作可以使用2个)并轻松承担更昂贵的学分。
k 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
f(k) 0 1 0 2 0 1 0 3 0 1 0 1 0 1 0 4 ...
cr 2 3 5 5 7 8 10 9 11 12 14 15 17 18 20 18 ...