Гипотеза (регулярность языка) и алгоритм (L-граф для NFA) в TOC

Опубликовано: 16 Января, 2022

Предпосылка - Конечные автоматы, L-графы и что они представляют.
L-графы могут генерировать контекстно-зависимые языки, но гораздо сложнее программировать контекстно-зависимый язык, чем программировать обычный. Вот почему я выдвинул гипотезу о том, какие L-графы могут генерировать регулярный язык. Но сначала мне нужно познакомить вас с тем, что я называю повторяющимся гнездом.

Как вы помните, гнездо - это нейтральный путь , куда а также циклы и путь нейтральный. Мы позвоним повторяющееся гнездо, если , а также пути печатают одну и ту же строку символов несколько раз, а точнее отпечатки , отпечатки , отпечатки , а также - строка входных символов (лучше, если хотя бы один из ).
Из этого определения вытекает следующая гипотеза.

Гипотеза. Если в контекстно-свободном L-графе G все гнезда повторяются, то язык, определенный этим L-графом G, L (G), является регулярным.
Если эта гипотеза будет доказана в ближайшем будущем, она может многое изменить в программировании, что значительно упростит создание новых легких языков программирования, чем это есть сейчас. Вышеупомянутая гипотеза приводит к следующему алгоритму преобразования контекстно-свободных L-графов с повторяющимися гнездами в NFA.

Алгоритм - преобразование контекстно-свободного L-графа с итерационными дополнениями в соответствующий NFA
Входные данные - контекстно-свободный L-граф с повторяющимися дополнениями
Выход -

  • Шаг 1. Языки L-графа и NFA должны быть одинаковыми, поэтому нам не понадобится новый алфавит. . (Комментарий: мы строим контекстно-свободный L-граф G '', который равен стартовому графу G ', без конфликтующих гнезд)
  • Шаг 2: Постройте ядро (1, 1) для графа G.
    V '': = {(v, ) | v V из канон к Ядро (1, 1), v k}
    : = {дуги | начальное и конечное состояния V ''}

    Для всех k Ядро (1, 1):
    Шаг 1'. v: = 1-е состояние канона k. .
    V ''
    Шаг 2'. дуга из состояния перешел по этой дуге в новое состояние, определенное следующими правилами:
    , если входная скобка на этой дуге ; , если входная скобка открывающая; , если входная скобка является закрывающей скобкой
    v: = 2-е состояние канона k
    V ''
    Шаг 3'. Повторите шаг 2 ', пока в каноне еще есть дуги.

  • Шаг 3: Соберите ядро (1, 2).
    Если канон имеет две равные дуги подряд: начальное и конечное состояния совпадают; мы добавляем дугу из данного состояния в себя, используя эту дугу, чтобы .
    Добавьте оставшееся в дуги v - u к в виде
  • Шаг 4:
    (Комментарий: ниже приведен алгоритм преобразования контекстно-свободного L-графа G '' в NFA G ')
  • Шаг 5. Выполните следующие действия для каждого повторяющегося дополнения. в G '':
    Добавить новое состояние v. Создать путь, который начинается в состоянии , равно . От v до создать путь, равный . Удалить циклы а также .
  • Шаг 6: G '= G' ', где дуги не загружаются скобками.

Чтобы все вышеперечисленные шаги были понятны, я покажу вам следующий пример.
Контекстно-свободный L-граф с повторяющимися дополнениями
,
что определяет
Начальный график G

Сердечник (1, 1) = {1 - a - 2; 1 - а, (1 - 1 - а - 2 - а,) 1 - 2; 1 - б, (2 - 2 - в,) 2 - 3}
Ядро (1, 2) = Ядро (1, 1) {1 - а, (1 - 1 - а, (1 - 1 - а - 2 - а,) 1 - 2 - а,) 1 - 2}
Шаг 2: Шаг 1 - Шаг 3

Промежуточный граф G ''

NFA G '

Вниманию читателя! Не прекращайте учиться сейчас. Освойте все важные концепции DSA с помощью самостоятельного курса DSA по приемлемой для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .

Если вы хотите посещать живые занятия с отраслевыми экспертами, пожалуйста, обращайтесь к Geeks Classes Live и Geeks Classes Live USA.