Navigation bar
  Print document Start Previous page
 93 of 144 
Next page End  

93
Таким образом, индуктивное утверждение доказано. В силу математической индукции это
утверждение верно для всех k = l, 2, ..., N. Следовательно, на последнем шаге конечным результа-
том выполнения цикла станет значение
S
N
= S
N-1
(N-1) + X[N]/N = X[1]/N + ... + X[N]/N.
Исходя из этого утверждения конечным результатом выполнения алгоритма в целом будет
среднее арифметическое значение
Xcp = S
N
= X[1]/N + ... + X[N]/N. 
Следовательно, приведенный алгоритм, несмотря на содержащуюся в нем «ошибку», явля-
ется правильным. В целом анализ правильности алгоритмов с циклами во многом построен на ис-
пользовании индукции.
Индукция - это вывод общих суждений из частных примеров. При анализе циклов она ис-
пользуется для подбора индуктивных утверждений о промежуточных результатах выполнения
циклов. Однако для доказательства правильности индуктивных утверждений о результатах вы-
полнения циклов используется полная математическая индукция.
Математическая индукция - это принцип доказательства последовательностей утвержде-
ний Р(1), Р(2), Р(3), ..., P(N), .... когда известно, что верны первые утверждения для n = 1, 2, 3 и из
истинности (n - 1)-го утверждения следует истинность n-го утверждения:
Принцип математической индукции: если первое утверждение Р(1) истинно и из утвер-
ждения Р(n - 1) следует утверждение Р(n), то истинны все утверждения Р(1), Р(2), Р(3), ..., Р(n), ... .
Приведем примеры индуктивного анализа циклов для алгоритма нахождения минимально-
го значения в последовательности чисел, который в этот раз действительно будет ошибочным.
алг «нахождение минимума»
массив x[1:N]
нач                      
Результаты:
от k = 1 до N цикл 
если x[k] < min то
тп := x[k]           
mn
k
= { x[k], при x[k] < mn
k-1
все                     
{ mn
k-1
, в ином случае 
кцикл                    
[ k = (1 ... N)] 
Min := тп                 
Min = mn
N
 
кон
Утверждение. Приведенный алгоритм определения минимального значения последова-
тельности чисел неправильный.
Доказательство. Для демонстрации ошибок необходимо привести контрпример. Для по-
строения контрпримера разберем результаты выполнения на первом шаге цикла.
Результаты выполнения первого шага цикла при k = 1:
х[1] при х[1] < mn
0
mn1 =                    
= min (х[1], mn
0
). 
 
mn
0
при х[1]
mn
0
    
     
Следовательно, результатом будет
mn1 = min (x[l], mn
0
)
Однако поскольку начальное значение mn
0
неизвестно, то неопределено значение результа-
та выполнения первого шага цикла. Аналогичное утверждение можно сделать о втором и всех по-
следующих шагах выполнения цикла:
mn
k
= min (x[k], Min(x[k-l], ..., х[1], mn
0
) =  Min (x[k], x
k-1], ..., х[1], mn
0
).
В силу математической индукции это утверждение справедливо при k = N:
mn
N
= Min (x[N], x[N - 1], ..., x[2], х[1], mn
0
),
Таким образом на основании этого утверждения можно сделать заключение о конечном ре-
зультате выполнения алгоритма в целом:
Min = mn
N
= Min (x[N], x[N - 1], ..., x[2], х[1], mn
0
).
Сайт создан в системе uCoz