|
Задача про sql-реализацию конечного автомата
|
|||
---|---|---|---|
#18+
Стоит задача ради любопытства . Построить 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-операторов написать автомат ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2003, 19:04 |
|
Задача про sql-реализацию конечного автомата
|
|||
---|---|---|---|
#18+
Еще раз спрашиваю, просто ради любопытства: а зачем оно тебе надо? По-делу. В таблицу 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 оператор внутри цикла плюс пара переменных. Я проще не представляю. Тут больше будет зависеть от того в каком виде ты хочешь получить результат. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2003, 02:17 |
|
Задача про sql-реализацию конечного автомата
|
|||
---|---|---|---|
#18+
ну да, правильно, только забыли обыграть ситуацию запоминания последнего встретившегося конечного состояния. Т.е. по идее, автомат должен продолжать работу даже после попадания в одно из состояний F, если существуют переходы в последующие состояния из Q при текущем символе из T. В случае попадания в ситуацию, когда из некоего состояния из Q и очередного входного символа из T не существует отображения d для перехода в следующее состояние, то необходимо "отмотать" по ленте T назад, к последней отметке, где мы побывали в состоянии из F. Именно так работают лексические анализаторы (те, которые построены на основе конечных автоматов) Давай, реализуй, любопытно... Правда, как тут с быстродействием? Реализованный на С (я опять за свое :) ) подобный автомат обрабатывает на современных PC десятки миллионов входных символов в секунду. Сколько сделает на том же PC SQL сервер? Хотя, может я и не прав... Например можно организовать движение бизнес-документа из состояния в состояние в зависимости от неких внешних воздействий. (если вся логика на каком-нить SQL-сервере) Тут быстродействия не требуется. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2003, 03:33 |
|
Задача про sql-реализацию конечного автомата
|
|||
---|---|---|---|
#18+
с127>либо просто цикл и 1, может 2 SQL оператора внутри. Если без курсора, цикл не имеет отношения к реляционной алгебре, то есть это не совсем sql оператор. (точнее, вообще не sql оператор) 2 n Построить sql-реализацию конечного автомата ты подразумевал использование циклов? ------------ vdimas>последнего встретившегося конечного состояния последнее всретившееся конечное состояние это что? оно отлично от первого встретившегося КОНЕЧНОГО состояния? типа икра второй свежести? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2003, 05:20 |
|
Задача про sql-реализацию конечного автомата
|
|||
---|---|---|---|
#18+
А у меня он уже реализован и работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2003, 08:13 |
|
Задача про sql-реализацию конечного автомата
|
|||
---|---|---|---|
#18+
>> T - конечное множество допустимых входных символов; А что именно подразумевается под "конечным множеством допустимых входных символов" (в моей реализации - это конечное множество допустимых URL только с предварительным лексическим блоком для стандартизации как-то /uuu/*/vvv/ - номер лексемы для матрицы переходов из настроечной таблицы и.т.д.) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2003, 08:20 |
|
Задача про sql-реализацию конечного автомата
|
|||
---|---|---|---|
#18+
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 на первом же шаге. Однако, мы заинтересованы в том, чтобы он отработал до знака "=". ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2003, 01:22 |
|
Задача про sql-реализацию конечного автомата
|
|||
---|---|---|---|
#18+
2 tchingiz >цикл не имеет отношения к реляционной алгебре, то есть это не совсем sql оператор. (точнее, вообще не sql оператор) А там нигде не сказано, что задача должена быть решена методами реляционной алгебры. Там говориться: "Построить sql-реализацию конечного автомата с наименьшим числом sql-операторов." Если под "sql-реализацией" понимается исключительно классический SQL, то разговаривать не о чем, задача не решается. К тому же в чистом SQL-е число SQL операторов всегда 1, так что тем более обсуждать нечего. Так что по-моему очевидно, что "sql-реализация" это все-таки процедурное расширение, а там есть цикл. 2 vdimas >или я не понял твоего вопроса, или ты не понял условия: F - множество заключительных состояний. В условии забыли написать, что F является подмножеством Q. Не забыли, это очевидно. Поскольку других состояний, кроме Q у автомата не существует по определению, то F есть подмножество Q. Множество F это по определению те состояния по достижении которых автомат прекращает работу. Поэтому обсуждать куда он пойдет дальше можно, но не имеет смысла. Хотя переход из F куда-то может быть прописан в d, это ничему не противоречит. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2003, 02:18 |
|
Задача про sql-реализацию конечного автомата
|
|||
---|---|---|---|
#18+
2 c127 Множество F это по определению те состояния по достижении которых автомат прекращает работу. Во-первых, нет такого определения. и нигде ты его не найдешь (разве, что у неграмотных авторов) Заключительные состояние автомата - это просто то множество состояний, которые могут рассматриваться как потенциально-заключительные, и нигде не указано, что по достижении заключительного состояния автомат заканчивает цикл своей работы. Большинство известных автоматов как раз работают до "самого далекого" заключительного состояния. С т.з. физического смысла, заключительное состояние - это валидное состояние, некий выходной сигнал. Все остальные - промежуточные состояния. На твоем компьютере работают десятки конечных автоматов, как программных так и аппаратных. Подавляющее большинство из них работает именно по тем правилам, которые я описал. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2003, 19:21 |
|
Задача про sql-реализацию конечного автомата
|
|||
---|---|---|---|
#18+
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-конечный_автомат, и обсуждать нужно все-таки его. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2003, 03:31 |
|
Задача про sql-реализацию конечного автомата
|
|||
---|---|---|---|
#18+
А собственно топик о чем: - формальное определенеие КА (так их много отдельно для детерминорованных КА, отдельно для недетрминированных) - реализация на SQL - в общем случае скорее всего невоможна по нескольким в т.ч. фундаментальным причинам 1) "Create table lent( chr varchar(1)); - лента входного устройства" -- в принципе НИКОГДА не может быть моделью "ленты" поскольку SQL НЕ ГАРАНТИРУЕТ ПОРЯДОК ЧТЕНИЯ этой "ленты" а последовательность должна быть упорядочена в сооветствии с какой-либо граматикой 2) SQL не обеспечивает ни рекурсии ни иттерации (может быть в новом стандарте SQL-ХХ будет обсуждены рекурсии и "циклы") 3) Иерархические расширения (например Oracle) не могут работать с функцией (матрицей) переходов поскольку в общем случае это граф (в.т.ч. с циклами) а не иерархия. и затем реализация чего? - общего КА (полная абстракция) а может быть автомата Мура или Мили? Это в любом случае какая-либо фактическая модель абстрактного определения с ОБЯЗАТЕЛЬНЫМИ с этой ситуации ограничениями и\или расширениями. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2003, 04:18 |
|
Задача про sql-реализацию конечного автомата
|
|||
---|---|---|---|
#18+
2 ShgGena Помимо всего прочего, различают синхронную и ассинхронную модель КА. Так вот, реализация синхронного КА не требует оператора цикла. Предполагается, что за каждый запуск (запуск извне!!!!!), автомат делает ровно 1 шаг, т.е. просто переходит из состояние в состояние. Как раз именно это и возможно на SQL. Как именно: Создаем процедуру, которая за каждый свой вызов совершает ровно 1 шаг моделируемого автомата. Таблица-"лента", разумеется не нужна по своей физической сути, ибо вход КА - некий закодированный набор сигналов (внешних разражителей). В связи с самим определением КА, этот набор сигналов вполне конечен, и может быть представен в виде набора кодов - терминальных символов. Т.е. "входная лента", это по-сути или данные, подаваемые на каждом шаге на вход процедуры, либо некие извлекаемые и кодируемые данные из самой базы, либо любое их сочетание. Т.е. способ формирования входного кода может быть произвольным, а процедура-автомат может запускаться, например, по триггерам. Вполне реальная модель. Я частенько использую различные автоматы в программах (жалко, что не с кем пообщаться на эту тему). Ибо реальных задач, попадающих в поле зрения именно решения через автоматные модели гораздо больше, чем кажется. Из достоинств: - возможность дорабатывать программу не меняя программного кода - скорость работы - суммарная сверх-миниатюрность кода (один и тот же код может обслуживать произвольное число автоматов) - надежность, определенность , ибо процессе формализации задачи для КА или магазинного автомата волей-неволей проходишь по всем возможным состояниям (т.е. никто не забыт и ничто не забыто) Далее, вопрос насчет Мура и Милли стоять не должен в принципе. Software-реализация автомата подразумевает синхронную модель. Для этой модели автомат Мура требует в большинстве случаев меньше суммарных данных (в байтах :) ) для описания. (ключевое слово - в большинстве) Для асинхронного автомата модель Милли, разумеется, гораздо предпочтительнее, но! программное моделирование асинхронных автоматов - IMHO, развлечение из области занятных, однако абсолютно бесполезных. (кто гарантирует, через сколько минимальных циклов апрокцимации "утрясется" асинхронный автомат?) 2 с127 Никто не запрещает n дать свое определение конечного автомата гхм, гхм... дать ссылку на твои придирки к "групповым операциям"? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2003, 06:45 |
|
|
start [/forum/topic.php?fid=32&fpage=175&tid=1546731]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
72ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 196ms |
0 / 0 |