#algorithm #nested-loops #pseudocode #discrete-mathematics #loop-invariant
#алгоритм #вложенные циклы #псевдокод #дискретная математика #инвариант цикла
Вопрос:
Я уверен, что это действительно простой вопрос, но, похоже, я не могу его взломать. Докажите правильность вашего алгоритма; т. Е. Укажите его инвариант цикла и докажите это с помощью индукции.
Ниже приведен мой алгоритм. Я знаю, как выполнить вторую часть (доказать индукцией), но я просто не могу определить инвариант цикла на всю жизнь.
procedure intersection(A,B: list of integers)
C= empty list
for i:=1 to n:
for j:= 1 to m:
if Ai = Bj
if Ai not in C
C.append(Ai)
return C
Комментарии:
1. Может быть, «C не имеет повторяющихся элементов», «C является подмножеством A» и «C является подмножеством B», все могут быть инвариантами на C?
Ответ №1:
Чтобы вы начали, я просто указываю один из инвариантов цикла, чтобы не отказываться от решения полностью. Инвариант для внешнего цикла равен:
C = intersection (B, {a1, ..., ai})
Вам также понадобится инвариант для внутреннего цикла.
Комментарии:
1. Спасибо, что это указало мне правильное направление 🙂