Ниже приведено упражнение из моего курса «Алгоритмы и структуры данных», целью которого является научить анализу алгоритмов с использованием l oop -инвариантов.
Настройка следующая; У нас есть банка с 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 шарик в банка Моя идея состоит в том, чтобы сказать, что у нас есть al oop -инвариант, следующий:
В начале итерации, пока l oop, осталось n- (ni) шариков.
Затем покажите, что инвариант верен во время инициализации, обслуживания и завершения, однако я не уверен, как мне следует подходить к этому, может кто-нибудь помочь здесь?
Например, при инициализации ясно, что l oop -инвариант является тем, что у нас в банке n мрамор и, таким образом, n-0 = n из инвариант, но как мне подойти к остальным?