Опубликован: 11.02.2005 | Уровень: специалист | Доступ: платный
Лекция 12:

Переход от данных к конечному автомату

< Лекция 11 || Лекция 12: 1234 || Лекция 13 >

Для нашего примера граф-автомат представляется следующей таблицей (переход 111, указывающий за пределы таблицы, использован для обозначения завершения просмотра файла):

1) МАМА, 2) МАШИНА, 3) ШИНА, 4) МАТ, 5) НА.
1) МАМА, 2) МАШИНА, 3) ШИНА, 4) МАТ, 5) НА.

0.       '\n'       111      1
1.       М          2        15
2.       А          3        0
3.       М          4        6
4.       А          5        0
5.       <1>        3        -
6.       Ш          7        14
7.       И          8        0
8.       Н          9        0
9.       А          10       0
10.      <2>        11       --
11.      <3>        12       --
12.      <5>        1        --
13.      Т          14       0
14.      <4>        1        --
15.      Ш          16       19
16.      И          17       0
17.      Н          18       0
18.      А          11       0
19.      Н          20       0
20.      А          12       0
21.      \forall          0        -

Программа интерпретации графа проста, и для данной задачи нет смысла применять транслирующий вариант реализации оперирования с таблицей. Операторы Current_Reaction(); и Final_Reaction(); использованы для обозначения действий со счетчиками, например, тех, которые приведены в комментариях.

s = getchar ();
i = 1;
for (;;) {
  if (Table[i].Tag) {
    if ( Table[i].Symb == s ) {
      i = Table[i].yes; // следующая строка
      if ( s != ’\n’)
        s = getchar ();
      else return;
    }
    else
    i = Table[i].no; // следующая строка
  }
  else {
    Current_Reaction(); // M[Table[i].Num]++
    i = Table[i].yes; // следующая строка
  }
}
Final_Reaction(); // Распечатка M
Листинг 12.1.4.

В этом интерпретаторе структура данных не содержит описаний действий — они только идентифицируются значениями соответствующих полей таблицы. Важно, что здесь достигается универсальность, независимость от таблицы для всех вариантов ввода слов.

Несложно решение также когда вместо таблицы-массива используется списочная структура. По существу ничто, кроме доступа к данным, который можно строго локализовать в соответствующих процедурах, не изменится. Выполните это решение самостоятельно. В то же время решение разработки текстового представления таблицы с числовой разметкой было бы во всех отношениях опрометчивым. Оно сложнее и не дает никаких преимуществ даже в тех случаях, когда процесс построения автомата отделен от его использования во времени. По тем же причинам вариант с XML не имеет никаких преимуществ. Другое дело, если речь пойдет об оперировании со списком слов (а не с таблицей!). Этот список целесообразно редактировать, запуская программу построения графа с помощью соответствующего обработчика списка слов и затем вызывая интерпретатор для работы с файлом. Рациональность такого подхода нужно оценить на этапе анализа жизненного цикла конструируемой программной системы.

Для обоих удовлетворительных решений требуется разработка алгоритма построения автомата по заданному набору слов. Если используется таблица-массив, то результатом такого построения должен быть заполненный массив. При списочной организации таблицы нужно составить соответствующий список. Для решения задачи могут быть построены различные автоматы, но эффективность дальнейшего их использования будет различна. Следовательно, можно ставить задачу оптимизации: выбор такого автомата из множества автоматов, который справляется с подсчетом вхождений за наиболее короткое время.

< Лекция 11 || Лекция 12: 1234 || Лекция 13 >
Федор Антонов
Федор Антонов

Здравствуйте!

Записался на ваш курс, но не понимаю как произвести оплату.

Надо ли писать заявление и, если да, то куда отправлять?

как я получу диплом о профессиональной переподготовке?

Илья Ардов
Илья Ардов

Добрый день!

Я записан на программу. Куда высылать договор и диплом?

Данила Некрасов
Данила Некрасов
Россия, Пермь, ПНИПУ
Сергей Федоров
Сергей Федоров
Россия