Скачиваний:
5
Добавлен:
01.05.2014
Размер:
9.26 Кб
Скачать

program Inductive_function_1;

{----------------------------------------------------------------------------}

{ Пример вычисления индуктивного расширения функции : }

{ f( w ) = " Сумма элементов отрезка с максимальной суммой " , }

{ где отрезок - связная подпоследовательность заданной последовательности w. }

{ Пусть исходная последовательность есть w = x(1)x(2)...x(n) и пусть }

{ S(k,l) = SUM ( k <= i <= l : x(i) ), где 1 <= k <= l <= n . Тогда }

{ f(w) = max ( S(k,l) : 1 <= k <= l <= n ) . }

{ Функция f - неиндуктивна. Рассмотрим индуктивное расширение F = ( f, t ), }

{ где }

{ t( w ) = max ( S(j,n) : 1 <= j <= n ). }

{ Содержательно t(w) - потенциальный конкурент текущего рекорда f(w) при }

{ продолжении последовательности w . Вычисление f и t : }

{ t ( w * x ) = max ( x, x + t(w) ), }

{ f ( w * x ) = max ( f(w), t(w*x) ), }

{ t ( $ ) = 0, f( $ ) = MinInt. }

{ Здесь $ обозначает пустую последовательность. }

{ Исходная последовательность читается из файла INITSEQ.DAT . }

{----------------------------------------------------------------------------}

const MinInt = -32768;

var x, { очередной элемент последовательности }

y, { y = f ( w ) }

z : Integer; { z = t ( w ) }

fin, { input file }

fout : Text ; { output file }

begin

Assign( fin, 'INITSEQ.DAT' );

Assign( fout, {'INFREZ.DAT'}'' );

Rewrite( fout );

WriteLn( fout, 'элемент: рекорд: конкурент:' );

Reset( fin ); { L(fin)=$ }

y := MinInt; { y=f($) }

z := 0; { z=t($) }

{ inv : y=f(L(fin)) & z=t(L(fin)) }

{ bound: length(R(fin)) }

while not Eof(fin) do

begin

Read( fin, x );

Write( fout, x : 8 );

{ новый конкурент : }

if z>0 then z := z + x else z := x;

{ новый рекорд : }

if z>y

then { обновить рекорд }

begin

y := z;

WriteLn( fout, y : 9 )

end

else { оставить старый }

WriteLn( fout , z : 20 );

end { while };

{ y = f ( fin ) & z = t( fin ) }

WriteLn( fout, '****** Максимальная сумма = ', y, ' ******' );

Close( fin );

Close( fout )

end { Inductive_function_1 } .

Экран результатов

элемент: рекорд: конкурент:

1 1

2 3

-5 -2

3 3

6 9

-10 -1

6 6

9 15

1 16

-5 11

****** Максимальная сумма = 16 ******

Соседние файлы в папке Индуктивное расширение функции