powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Задача про sql-реализацию конечного автомата
12 сообщений из 12, страница 1 из 1
Задача про sql-реализацию конечного автомата
    #32341232
n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
n
Гость
Стоит задача ради любопытства . Построить sql-реализацию конечного автомата с наименьшим числом sql-операторов.

Вот немного теории.
Определение
Формально, конечным автоматом называется набор A = (Q, T, d,q0, F) где

Q - конечное множество состояний;
T - конечное множество допустимых входных символов;
d - отображение множества QxT в Q; функцию d также называют функцие перехода;
q0 - начальное состояние
F - множество заключительных состояний.


Пример

Пусть Q={ЧЕТ,НЕЧЕТ}; T= {0,1}, d(ЧЕТ,0) = ЧЕТ, d(ЧЕТ,1) = НЕЧЕТ, d(НЕЧЕТ,0) = НЕЧЕТ, d(НЕЧЕТ,1) = ЧЕТ. q0= ЧЕТ, F = {НЕЧЕТ} тогда этот автомат допускает цепочки из 0 и 1 у которых число 1 нечетное.

Работает он так. Пусть дана цепочка 001 . В начальный момент мы в состоянии ЧЕТ читаем символ. Это 0. Смотрим функцию перехода. Ага. опять принимаем состояние ЧЕТ и т.д

Таблицы для SQL-реализации конечного автомата

Create table lent( chr varchar(1)); - лента входного устройства.
Create table dlt( curr_sts varchar(1), chr varchar(1), next_sts varchar(1)); - реализации функции перехода.

Еще раз вопрос. Как красивее (дешевле) в смысле числа sql-операторов написать автомат
...
Рейтинг: 0 / 0
Задача про sql-реализацию конечного автомата
    #32341418
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще раз спрашиваю, просто ради любопытства: а зачем оно тебе надо?

По-делу. В таблицу lent необходимо добавить какой-нибудь id, это же упорядоченное множество. Если я правильно понял, что это последовательность входных символов. В таблице dlt пара (curr_sts, chr) должна быть unique, это же отображение. Все остальное вроде правильно. Таблицы Q, T, q0, F насколько я понял подразумевались. Идешь по таблице lent по возрастанию id, выбираешь из dlt next_sts по (curr_sts, chr), останавливаешься когда next_sts в множестве F. Нужен будет один курсор либо просто цикл и 1, может 2 SQL оператора внутри. Если без курсора, то еще дополнительно 1 SQL оператор внутри цикла плюс пара переменных. Я проще не представляю. Тут больше будет зависеть от того в каком виде ты хочешь получить результат.
...
Рейтинг: 0 / 0
Задача про sql-реализацию конечного автомата
    #32341428
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну да, правильно, только забыли обыграть ситуацию запоминания последнего встретившегося конечного состояния. Т.е. по идее, автомат должен продолжать работу даже после попадания в одно из состояний F, если существуют переходы в последующие состояния из Q при текущем символе из T. В случае попадания в ситуацию, когда из некоего состояния из Q и очередного входного символа из T не существует отображения d для перехода в следующее состояние, то необходимо "отмотать" по ленте T назад, к последней отметке, где мы побывали в состоянии из F. Именно так работают лексические анализаторы (те, которые построены на основе конечных автоматов)

Давай, реализуй, любопытно...
Правда, как тут с быстродействием? Реализованный на С (я опять за свое :) ) подобный автомат обрабатывает на современных PC десятки миллионов входных символов в секунду. Сколько сделает на том же PC SQL сервер?

Хотя, может я и не прав... Например можно организовать движение бизнес-документа из состояния в состояние в зависимости от неких внешних воздействий. (если вся логика на каком-нить SQL-сервере) Тут быстродействия не требуется. :)
...
Рейтинг: 0 / 0
Задача про sql-реализацию конечного автомата
    #32341444
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с127>либо просто цикл и 1, может 2 SQL оператора внутри. Если без курсора,

цикл не имеет отношения к реляционной алгебре,
то есть это не совсем sql оператор. (точнее, вообще не sql оператор)

2 n
Построить sql-реализацию конечного автомата
ты подразумевал использование циклов?


------------
vdimas>последнего встретившегося конечного состояния
последнее всретившееся конечное состояние это что?
оно отлично от первого встретившегося КОНЕЧНОГО состояния?
типа икра второй свежести?
...
Рейтинг: 0 / 0
Задача про sql-реализацию конечного автомата
    #32341491
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у меня он уже реализован и работает.
...
Рейтинг: 0 / 0
Задача про sql-реализацию конечного автомата
    #32341493
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> T - конечное множество допустимых входных символов;

А что именно подразумевается под "конечным множеством допустимых входных символов" (в моей реализации - это конечное множество допустимых URL только
с предварительным лексическим блоком для стандартизации как-то /uuu/*/vvv/
- номер лексемы для матрицы переходов из настроечной таблицы и.т.д.)
...
Рейтинг: 0 / 0
Задача про sql-реализацию конечного автомата
    #32342759
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 tchingiz

vdimas>последнего встретившегося конечного состояния
последнее всретившееся конечное состояние это что?
оно отлично от первого встретившегося КОНЕЧНОГО состояния?
типа икра второй свежести?


или я не понял твоего вопроса, или ты не понял условия:
F - множество заключительных состояний.
В условии забыли написать, что F является подмножеством Q.

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

пример:
имеем автомат, разбирающий идентификаторы (пишу упрощенно),
целевое регулярное выражение (прим., класс регулярных формальных грамматик представим в виде конечного автомата)
id = буква ( буква | цифра )*

имеем:
Q {S0, S1},
T {буква, цифра, другой_символ},
d { (S0 x буква -> S1), (S1 x буква -> S1), (S1 x цифра -> S1) }
q0 { S0 }
F { S1 }

имеем входную последовательность:
"m_field123=456;"

Очевидно, что автомат попадет в состояние S1 на первом же шаге. Однако, мы заинтересованы в том, чтобы он отработал до знака "=".
...
Рейтинг: 0 / 0
Задача про sql-реализацию конечного автомата
    #32342771
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 tchingiz

>цикл не имеет отношения к реляционной алгебре,
то есть это не совсем sql оператор. (точнее, вообще не sql оператор)

А там нигде не сказано, что задача должена быть решена методами реляционной алгебры. Там говориться: "Построить sql-реализацию конечного автомата с наименьшим числом sql-операторов." Если под "sql-реализацией" понимается исключительно классический SQL, то разговаривать не о чем, задача не решается. К тому же в чистом SQL-е число SQL операторов всегда 1, так что тем более обсуждать нечего. Так что по-моему очевидно, что "sql-реализация" это все-таки процедурное расширение, а там есть цикл.

2 vdimas

>или я не понял твоего вопроса, или ты не понял условия:
F - множество заключительных состояний.
В условии забыли написать, что F является подмножеством Q.

Не забыли, это очевидно. Поскольку других состояний, кроме Q у автомата не существует по определению, то F есть подмножество Q.

Множество F это по определению те состояния по достижении которых автомат прекращает работу. Поэтому обсуждать куда он пойдет дальше можно, но не имеет смысла. Хотя переход из F куда-то может быть прописан в d, это ничему не противоречит.
...
Рейтинг: 0 / 0
Задача про sql-реализацию конечного автомата
    #32344103
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 c127

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

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

На твоем компьютере работают десятки конечных автоматов, как программных так и аппаратных. Подавляющее большинство из них работает именно по тем правилам, которые я описал.
...
Рейтинг: 0 / 0
Задача про sql-реализацию конечного автомата
    #32344248
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 vdimas

>Во-первых, нет такого определения.
и нигде ты его не найдешь (разве, что у неграмотных авторов)

Я уточнил определение, правда я нашел только один английский вариант (Gyorgy E.Revescz "Introduction to formal languages", Dover, NY, 1991, p.60), там вместо термина "множество заключительных состояний" используется термин "set of accepting states" и автомат действительно не останавливается по достижению F, значение имеет только находится ли последнее состояние в F или нет. Так что ты прав.

tchingiz берет назад свои слова насчет икры второй свежести.

Но определение из книги Revescz противоречит тому, что дал n. Никто не запрещает n дать свое определение конечного автомата (что он и сделал) и пытаться построить n-конечный_автомат, и обсуждать нужно все-таки его.
...
Рейтинг: 0 / 0
Задача про sql-реализацию конечного автомата
    #32344249
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А собственно топик о чем:

- формальное определенеие КА (так их много отдельно для детерминорованных КА, отдельно для недетрминированных)

- реализация на SQL - в общем случае скорее всего невоможна по нескольким
в т.ч. фундаментальным причинам
1) "Create table lent( chr varchar(1)); - лента входного устройства" -- в принципе
НИКОГДА не может быть моделью "ленты" поскольку SQL НЕ ГАРАНТИРУЕТ ПОРЯДОК ЧТЕНИЯ этой "ленты" а последовательность должна быть упорядочена в сооветствии с какой-либо граматикой
2) SQL не обеспечивает ни рекурсии ни иттерации
(может быть в новом стандарте SQL-ХХ будет обсуждены рекурсии и "циклы")
3) Иерархические расширения (например Oracle) не могут работать с функцией (матрицей) переходов поскольку в общем случае это граф (в.т.ч. с циклами) а не иерархия.

и затем реализация чего?
- общего КА (полная абстракция) а может быть автомата Мура или Мили?

Это в любом случае какая-либо фактическая модель абстрактного определения
с ОБЯЗАТЕЛЬНЫМИ с этой ситуации ограничениями и\или расширениями.
...
Рейтинг: 0 / 0
Задача про sql-реализацию конечного автомата
    #32345728
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ShgGena

Помимо всего прочего, различают синхронную и ассинхронную модель КА.
Так вот, реализация синхронного КА не требует оператора цикла. Предполагается, что за каждый запуск (запуск извне!!!!!), автомат делает ровно 1 шаг, т.е. просто переходит из состояние в состояние. Как раз именно это и возможно на SQL.

Как именно:
Создаем процедуру, которая за каждый свой вызов совершает ровно 1 шаг моделируемого автомата. Таблица-"лента", разумеется не нужна по своей физической сути, ибо вход КА - некий закодированный набор сигналов (внешних разражителей). В связи с самим определением КА, этот набор сигналов вполне конечен, и может быть представен в виде набора кодов - терминальных символов. Т.е. "входная лента", это по-сути или данные, подаваемые на каждом шаге на вход процедуры, либо некие извлекаемые и кодируемые данные из самой базы, либо любое их сочетание.

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

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

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

Далее, вопрос насчет Мура и Милли стоять не должен в принципе.
Software-реализация автомата подразумевает синхронную модель. Для этой модели автомат Мура требует в большинстве случаев меньше суммарных данных (в байтах :) ) для описания. (ключевое слово - в большинстве)
Для асинхронного автомата модель Милли, разумеется, гораздо предпочтительнее, но! программное моделирование асинхронных автоматов - IMHO, развлечение из области занятных, однако абсолютно бесполезных. (кто гарантирует, через сколько минимальных циклов апрокцимации "утрясется" асинхронный автомат?)

2 с127
Никто не запрещает n дать свое определение конечного автомата

гхм, гхм...
дать ссылку на твои придирки к "групповым операциям"?
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Задача про sql-реализацию конечного автомата
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]