注: 本题解为个人完成,难免有疏漏,请勿抄袭,仅供参考,同时欢迎留言指正。 ## 18.1 ### (1) 首先所有元素都要进栈一次,而出栈的元素,都是因为不满足海景房的条件,那么现在问题就从证明返回的栈中的元素就是所有海景房,变成证明,返回的栈中的每个元素都是海景房,也就是说都比自己东边的元素高。
那么我们找的循环不变式就是,每次外循环第
这个不变式的证明用类似于数学归纳法的思想,但是为有穷步的归纳推理: +
起始情况:栈中只有一个元素
故原命题得证。
###(2) 由于每个元素都进行了且只进行了一次
18.3
为了更好地理解题目,我们这样思考: +
把集合合并问题的这个过程,转化为二进制串的自增过程,例如
以上思路站在二进制串的自增的角度考虑的,也可以站在集合合并的角度考虑,假设插入元素n次
+ 创建大小为
18.5
- 实现的结构可以是数组
:直接把 放到数组 末尾,开销是 :先找到第 大的元素,然后再遍历一遍保留比该元素小的即可,开销是线性的,不妨设开销不超过 , 是常数 - 那么对于
,我们除了计算大小为 的开销以外,再额外计算大小为 的开销,这个开销是相当于为将来攒的(记账开销),等到将来 操作删除了 个元素后,就能用此大小为 的攒的记账开销来作为 需要的实际开销。 - 因此,可以认为
的开销是 , 开销是0,平摊代价是常数级别