Метод сжатия текстовой информации

Автор работы: Лена Шугалеева, 25 Сентября 2010 в 19:08, курсовая работа

Краткое описание

Математическое программирование занимается изучение экстремальных задач и поиском методов их решения. Задачи математического программирования формулируются следующим образом : найти экстремум некоторой функции многих переменных f ( x1, x2, ... , xn ) при ограничениях gi ( x1, x2, ... , xn )  bi , где gi - функция, описывающая ограничения,  - один из следующих знаков  ,  ,  , а bi - действительное число, i = 1, ... , m. f называется функцией цели ( целевая функция ).
Линейное программирование - это раздел математического программирования, в котором рассматриваются методы решения экстремальных задач с линейным функционалом и линейными ограничениями, которым должны удовлетворять искомые переменные.
Задачу линейного программирования можно сформулировать так . Найти max
при условии : a11 x1 + a12 x2 + . . . + a1n xn  b1 ;
a21 x1 + a22 x2 + . . . + a2n xn  b2 ;
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
am1 x1 + am2 x2 + . . . + amn xn  bm ;
x1  0, x2  0, . . . , xn  0 .
Эти ограничения называются условиями неотрицательности. Если все ограни-чения заданы в виде строгих равенств, то данная форма называется канонической.
- 7 -
В матричной форме задачу линейного программирования записывают следующим образом. Найти
max cT x
при условии
A x  b ;
x  0 ,
где А - матрица ограничений размером ( mn), b(m1) - вектор-столбец свобод-ных членов, x(n  1) - вектор переменных, сТ = [c1, c2, ... , cn ] - вектор-строка коэффициентов целевой функции.
Решение х0 называется оптимальным, если для него выполняется условие сТ х0  сТ х , для всех х  R(x).
Поскольку min f(x) эквивалентен max [ - f(x) ] , то задачу линейного программирования всегда можно свести к эквивалентной задаче максимизации.
Для решения задач данного типа применяются методы:
1) графический;
2) табличный ( прямой, простой ) симплекс - метод;
3) метод искусственного базиса;
4) модифицированный симплекс - метод;
5) двойственный симплекс - метод.

1.2 Табличный симплекс - метод
Для его применения необходимо, чтобы знаки в ограничениях были вида “ меньше либо равно ”, а компоненты вектора b - положительны.
Алгоритм решения сводится к следующему :
Приведение системы ограничений к каноническому виду путём введения дополнительных переменных для приведения неравенств к равенствам.
Если в исходной системе ограничений присутствовали знаки “ равно ”

- 8 -

или “ больше либо равно ”, то в указанные ограничения добавляются
искусственные переменные, которые так же вводятся и в целевую функцию со знаками, определяемыми типом оптимума.
Формируется симплекс-таблица.
Рассчитываются симплекс-разности.
Принемается решение об окончании либо продолжении счёта.
При необходимости выполняются итерации.
На каждой итерации определяется вектор, вводимый в базис, и вектор, выводимый из базиса. Таблица пересчитывается по методу Жордана-Гаусса или каким-нибудь другим способом.

Содержимое работы - 1 файл

МЕТОД СЖАТИЯ ТЕКСТОВОЙ ИНФОРМАЦИИ.DOC

— 177.00 Кб (Скачать файл)

      end; 

      procedure ReCountBasisVector;

      begin

        BasisVector[IndexOfOutputString]:=IndexOfEnterVector;

      end; 

    begin

      ReCountDigitOfBasisVector;

      ReCountBasisVector;

      Buffer:=VectorA[IndexOfOutputString, IndexOfEnterVector];

      for i:=0 to m+n do

      begin

        VectorA[IndexOfOutputString, i]:=VectorA[IndexOfOutputString, i] / Buffer;

      end;

    end; 
 
 
 

    - 33 - 
 

    procedure ReCountVectorA;

    var i,j  : integer;

    begin

      for j:=0 to m+n do

      begin

        for i:=1 to m do

        begin

          if i <> IndexOfOutputString then

            if j <> IndexOfEnterVector

              then VectorA[i, j]:=VectorA[i, j] - VectorA[i, IndexOfEnterVector]*VectorA[IndexOfOutputString, j];

        end;

      end;

      for i:=1 to m do

        if i <> IndexOfOutputString then VectorA[i, IndexOfEnterVector]:=0;

    end; 

    function AllIsPositiv : boolean;

    var i : integer;

    begin

      AllIsPositiv:=True;

      for i:=1 to m+n do

        if SimplexVector[i] < 0 then AllIsPositiv:=False;

    end; 

    function ToStr(const D : real) : string;

    var S : string;

    begin

      str(D:6:2, S);

      ToStr:=' ' + S + ' ';

    end; 

    procedure WriteMatrixs; 

      procedure WriteTargetMatrix;

      var i : integer;

      begin

        writeln('                   +-----------------------------------------------------+');

        write  ('                   ¦ Target ¦');

        for i:=1 to n+m do write(ToStr(TargetVector[i]),'¦');  writeln;

      end; 

      procedure WriteMatrixA;

      var i,j  : integer;

      begin

        writeln(' +-----------------+--------+--------+--------+--------+--------+--------¦');

        writeln(' ¦ Basis  ¦ D.Basis¦   A 0  ¦   A 1  ¦   A 2  ¦   A 3  ¦   A 4  ¦   A 5  ¦');

        writeln(' +--------+--------+--------+--------+--------+--------+--------+--------¦');

        for i:=1 to m do

      
 
 

    - 34 - 
 

       begin

          write(' ¦  A ',BasisVector[i],'   ¦',ToStr(DigitOfBasisVector[i]),'¦');

          for j:=0 to m+n do write(ToStr(VectorA[i, j]),'¦');  writeln;

          if i = m then writeln(' +--------+--------+--------+--------+--------+--------+--------+--------¦')

                   else writeln(' +--------+--------+--------+--------+--------+--------+--------+--------¦');

        end;

      end; 

      procedure WriteMatrixSimplex;

      var i : integer;

      begin

        write('          ¦  Simplex¦');

        for i:=0 to m+n do write(ToStr(SimplexVector[i]),'¦'); writeln;

        writeln('          +--------------------------------------------------------------+');

      end; 

    begin

      clrscr;

      WriteTargetMatrix;

      WriteMatrixA;

      WriteMatrixSimplex;

    end; 

    procedure WriteMatrixsInFile; 

      procedure WriteTargetMatrix;

      var i : integer;

      begin

        writeln(FileOfOutput, '                   +-----------------------------------------------------+');

        write  (FileOfOutput, '                   ¦ Target ¦');

        for i:=1 to n+m do write(FileOfOutput, ToStr(TargetVector[i]),'¦');  writeln(FileOfOutput);

      end; 

      procedure WriteMatrixA;

      var i,j  : integer;

      begin

        writeln(FileOfOutput, ' +-----------------+--------+--------+--------+--------+--------+--------¦');

        writeln(FileOfOutput, ' ¦ Basis  ¦ D.Basis¦   A 0  ¦   A 1  ¦   A 2  ¦   A 3  ¦   A 4  ¦   A 5  ¦');

        writeln(FileOfOutput, ' +--------+--------+--------+--------+--------+--------+--------+--------¦');

        for i:=1 to m do

        begin

          write(FileOfOutput, ' ¦  A ',BasisVector[i],'   ¦',ToStr(DigitOfBasisVector[i]),'¦');

          for j:=0 to m+n do write(FileOfOutput, ToStr(VectorA[i, j]),'¦');  writeln(FileOfOutput);

          if i = m then writeln(FileOfOutput, ' +--------+--------+--------+--------+--------+--------+--------+--------¦')

                   else writeln(FileOfOutput, ' +--------+--------+--------+--------+--------+--------+--------+--------¦');

        end;

      end; 
 
 
 

    - 35 - 
 

      procedure WriteMatrixSimplex;

      var i : integer;

      begin

        write(FileOfOutput, '          ¦ Simplex¦');

        for i:=0 to m+n do write(FileOfOutput, ToStr(SimplexVector[i]),'¦'); writeln(FileOfOutput);

        writeln(FileOfOutput, '          +--------------------------------------------------------------+');

      end; 

    begin

      clrscr;

      WriteTargetMatrix;

      WriteMatrixA;

      WriteMatrixSimplex;

    end; 

    { Головная программа }

    BEGIN

      ClrScr;

      ReadDates;

      Assign(FileOfOutput, 'kurs97.res');

      Rewrite(FileOfOutput);

      CountSimplexVector;

      WriteMatrixs;

      while not AllIsPositiv do

      begin

        IndexOfEnterVector:=GetEnterVector;

        IndexOfOutputString:=GetOutputString;

        ReCountOutputString;

       ReCountVectorA;

        CountSimplexVector;

        WriteMatrixsInFile;

        WriteMatrixs;

        if key=#0 then key:=readkey; key:=#0;

      end;

      Close(FileOfOutput);

    END. 
 
 

- 36 - 

6. ОПИСАНИЕ ЛОГИКИ  СТРУКТУРНОЙ СХЕМЫ 

    В программе реализованы следующие  процедуры :

    1. Процедура ReadDates - считывает данные из файла.

    2. Процедура ReadDatesTargetVector - считывает  коэффициенты при неизвестных в целевой функции из файла.

    3. Процедура ReadDatesVector - считывание  их входного файла матрицы  А и заполнение диагональной матрицы.

    4. Процедура CountSimplexVector - рассчёт симплекс-разностей.

    5. Процедура GetEnterVector - поиск вводимого  в базис столбца.

    6. Процедура GetOutputString - поиск выводимой  из базиса строки.

    7. Процедура ReCountOutputString- пересчёт выводимой  строки.

    8. Процедура ReCountVectorA - пересчёт остальной матрицы ограничений.

    9. Процедуры WriteMatrixA, WriteTargetMatrix, WriteMatrixSimplex - печать результирующих таблиц на экран и в файл. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

- 37 – 
 
 
 

7. ТЕСТОВЫЙ ПРИМЕР 

    Тестовый  пример программы KURS 97.EXE представлен на рисунке 2 в виде исходной и результирующих симплекс-таблиц данного задания. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  - 39 - 
 
 

ЛИТЕРАТУРА 

1. ЕСПД  ГОСТ 19.105-78, 19.104-78.

2. ЕСПД  ГОСТ 19.502-78.

3. Венцель  Е.С.  Исследование операций.-М.:Советское радио. 1972 г.

4. Дектярев  Ю.И.  Исследование операций.-М.:Высшая  школа. 1986 г.

5. Зайченко  Ю.П.  Исследование операций.-К.:Вища  школа. 1979 г.

6. Зайченко  Ю.П., Шумиллова С.А.  Исследование  операций ( сборник задач ).-К.:Вища  школа. 1990 г.

Информация о работе Метод сжатия текстовой информации