а2, …, ai} (i ? 1) сопоставим число lmax, равное максимальной длине равнинного участка этой последовательности. Очевидно, что lmax ({a1}) = 1. Пусть мы знаем lmax ({a1, а2, …, ai}). Как вычислить величину lmax ({a1, …, ai, ai+1})? Добавление элемента ai+1 к последовательности {a1, а2, …, ai} не затрагивает равнинных участков этой последовательности, кроме, быть может, последнего. Если ai+1 = ai, то длина этого последнего участка — назовем ее llast ({a1, …, ai}) — увеличивается на единицу. Если величина llast ({a1, …, ai, ai +1}) окажется при этом больше величины lmax ({a1, а2, …, ai}), то это значит, что последний равнинный участок в последовательности {a1, а2, …, ai, ai+1} по крайней мере на 1 длиннее всех предыдущих, и, значит, lmax ({a1, а2, …, ai, ai+1}) = llast ({a1, а2, …, ai, ai +1}).

Введем четыре величины:

i — число рассмотренных членов последовательности,

lmax — максимальная длина равнинного участка для рассмотренных элементов,

llast — длина последнего равнинного участка для рассмотренных элементов,

xlast — последний рассмотренный элемент последовательности (он равен а[i]).

Теперь приведем без пояснений программу, которая вычисляет lmax ({a1, …, an}) по индукции.

i := 1; lmax := 1; llast := 1; xlast := a[1]

нц пока i < n

x := a[i + 1]

  если x = xlast то llast := llast + 1

  иначе llast := 1 кесли

  если llast > lmax то lmax := llast кесли

  xlast := x

i := i + 1

кц

вывод lmax

Подробнее об этой индуктивной методике можно прочитать в книге: А. Г. Кушниренко, Г. В. Лебедев. Программирование для математиков. — М.: Наука, 1988. — Примеч. ред.

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату