【问题标题】:Analysis of algorithm removing marbles from jar罐子里弹珠去除算法分析
【发布时间】: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


    【解决方案1】:

    由于这是家庭作业,我不想为你做整个问题,但我可以让你朝着正确的方向开始。

    让我们从最简单的问题形式之一开始:n = 2

    现在有3种可能:

    1. 2 红色
    2. 2 蓝色
    3. 1红1蓝

    案例 1 和 2:

    把两个弹珠都拉出来,它们颜色一样,所以把两个都扔掉,从堆里拉出一颗红色的弹珠,放进罐子里。罐子里还剩下一颗弹珠,所以我们停下来。

    案例 3:

    把两个弹珠都拉出来,它们颜色不一样,所以扔掉红色的,把蓝色的放回去。罐子里还剩下一颗弹珠,所以我们停下来。

    现在 n = 2 已经被考虑在内,证明你可以从 3, 4, 5 ... n 个弹珠达到这个状态。对于 n = 1,显然罐子里只有一个弹珠,因为你永远不会进入循环。我不知道你想对 n = 0 做什么,这是唯一可以让罐子变空的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-03
      • 1970-01-01
      • 1970-01-01
      • 2016-06-02
      • 2013-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多