Я хочу показать правильность «Алгоритм для нахождения максимального элемента в массиве» с использованием индукции и противоречия.Правильность алгоритма для нахождения максимума в массиве
ans=-infinity
for (i=0; i<n; i++)
ans= max(ans, A[i])
где A[0:n-1]
является массивом и max
функция возвращать максимум двух аргументов.
Что я делаю:
Базовый случай: i=0, ans= max(-infinity,A[0])=A[0]
, так как только один элемент был processsed, это максимум.
Индукционная гипотеза: i=k<n-1,
Предположим, что алгоритм правильно находит максимум до k итераций.
Индуктивный шаг: i=k+1
, пусть ans_{i}
обозначают максимальный элемент, полученный с помощью алгоритма Шифрование до i
шагов, и пусть ans'_{i}
обозначают еще один максимальный элемент из массива A[0:i-1]
.
Тогда из индукционной hypothsis, ans_{k} = ans'_{k}
Теперь, ради противного, предположим ans_{k+1} < ans'_{k+1}
Теперь, как я должен продолжить, чтобы показать это противоречие?
Любое предложение? Должен ли я изменить этот подход?
Принадлежность к math.stackexchange.com (который принадлежит «другому сайту в сети Stack Exchange») не предлагает в качестве предложения. Серьезно, парни SO, трудно ли добавить в список предложений «Другой» вариант ?) –
Вам не нужно доказательство от противоречия, поскольку индукционное доказательство уже делает работу. – trincot
Что за муньо-ноль обозначений, избили меня, если я понял, чего вы пытаетесь достичь. Посмотрите, проблему можно просто поставить так: «Если M (i-1) является максимальным для' arr [0 ... i-1] ', то M (i) = max (' arr [i] ', M (i-1)) является max для 'arr [0 ... i]' ". И демон проста: «если M (i-1)> =' arr [i] ', то M (i-1) = M (i) - по определению максимальной функции - будет больше любого' arr [0 ... i] '. Если M (I-1) <' arr [i] ', то' arr [i] 'больше любого' arr [0 ... i-1] '- транзитивностью порядок порядка - так что M (i) = arr [i] - точно такое же значение, как и возвращение максимальной функцией " –