【发布时间】:2020-02-04 21:38:02
【问题描述】:
以下是我的算法和数据结构课程中的一个练习,旨在教授一些关于使用循环不变量分析算法的知识。
设置如下;我们有一个装有 n 个弹珠的罐子。大理石要么是红色的,要么是蓝色的。我们还有无数的红色弹珠。我们的目标是通过使用这个算法来清空罐子
算法如下:
input: Jar with *n* marbles each of color RED or BLUE
i <- n
while i > 1 do
Pick two arbitrary marbles m1, m2 from the jar.
if Color(m1) == Color(m2) then
Throw the two marbles away
Place a RED marble in the jar
end
else
Throw away the RED marble
Put the BLUE marble back in the jar
end
i = i - 1
end
1) 认为在算法结束时,我们在罐子里剩下 1 个弹珠。 我的想法是说我们有一个如下的循环不变量
在 while 循环的迭代开始时,还剩下 n-(n-i) 个弹珠
然后证明在初始化、维护和终止期间不变量是正确的,但是我不确定我应该如何处理这个问题,有人可以帮忙吗?
例如,在初始化时,很明显循环不变量是 ,因为我们在 jar 中有 n 个弹珠,因此 n-0 = n 来自不变量,但是如何我应该接近其余的吗?
【问题讨论】:
标签: algorithm analysis pseudocode invariants loop-invariant