- 1
- 2
- 3
- 4
- 5
- 6
- 7
При решении каких задач наиболее органично использовать конечные автоматы?
Посоветуйте задачи, желательно прикладные и не из области разбора регулярных выражений
или лексического анализа. Какой-нибудь пример, на котором можно продемонстрировать
практическое применение конечных автоматов.
Где вам пригождались автоматы или знания о них в реале?
Любая (компьютерная, карточная, настольная) игра — это конечный автомат, где действия игрока — это события, изменяющие (обычно многочисленные, но конечные) состояния игрового мира.
Любая база данных, не обладающая бесконечной памятью — это конечный автомат, где пользовательские запросы являются событиями. Аналогично можно рассматривать и веб-сервер.
Как это можно использовать? Для тестирования, к примеру, генерируя случайные наборы событий и проверяя, что поведение автомата удовлетворяет инвариантам.
Тут много технических деталей, но идея, кмк, очень красивая> Где вам пригождались автоматы или знания о них в реале?
В основном видел много сетевого кода, организованного в виде огромной таблицы функций, в которой одним индексом является текущее состояние, а в другом — тип полученного пакета.
Да, с играми можно придумать замечательные примеры.
Руби
https://github.com/aasm/aasm
Пистон
https://github.com/viewflow/django-fsm
Жабаспринг
https://projects.spring.io/spring-statemachine/
Жабажбос
https://docs.jboss.org/jbossas/javadoc/4.0.4/common/org/jboss/util/state/StateMachine.html
Особо толстые энтрепрайзники даже имеют для это UI:
Микрософт
https://docs.microsoft.com/ru-ru/dotnet/framework/windows-workflow-foundation/state-machine-workflows
До этого мне приходилось разбирать тексты. Самый простой пример это когда пользователь пишет текст в перемешку с HTML и тебе надо убрать непарные и запрещенные таги, подсветить ссылки итд.
В простых случаях встречаюца регулярные или контекстно-свободные грамматики (не понимаю почему ты не считаешь это практическим).
Наконец автоматами всегда описывают протоколы (как верно сказал гость). Посмотри на диаграммы GBP, STP или даже того же TCP.
О, я вижу, что был превратно понят. Видимо, я неясно высказался. Я не имел ввиду, что разбор регулярных грамматик -- это не практический случай. Я только имел ввиду, что хочу узнать другие случаи практического применения, потому что с этими я уже знаком.
Скажешь на стендапе "полиномиальный алгоритм" и все с уважением смотрят
Но ведь кто-то должен всё это пилить?
Если где-то день-деньской сидит программист и пишет SELECT * FROM PETUHI WHERE IQ<80, то нахуй и такого программиста и такую контору.
Да, но с вероятностью 100% такие люди найдутся. Об этом не нужно специально заботиться, это место пусто не будет, туда невидимая рука рынка сама поставит какого-то человека, скорее всего посредственного специалиста, или уставшего, или нуждающегося, или не амбициозного. Ну, как сказали выше, «среднестатистического». Это ОК. Но вот зачем специально размышлять о таком человеке, или уж тем более умышленно им быть, я не понимаю.
Специально думать надо про свободные программы, потому что они нуждаются в этом, там законы рынка не действуют, там анархия.
Школьник, ты опять начал хуйню нести. Спроси у своих коллег, где и когда они по работе сталкивались с конечными автоматами. Зачем конечные автоматы веб-программисту, как фронт-, так и бекенд-? Десктоп-программисту? Нет, ты можешь конечно и цыкломяши мацать в свободное от работы время, просто ни копейки денег оно тебе не принесет. А потом читая посты таких как ты создается впечатление что нужно знать дохуя всего чтобы быть веб-макакой, развивается комплекс неполноценности и всё такое. А проблема-то не в тех, кто читает, проблема в долбоёбах вроде тебя, которые в интернет понтоваться ходят.
Языки могут быть спецификацией (она обычно или бесплатна или доступна за небольшую сумму) или реализацией (она может быть как платна, как и бесплатна)
Твой вопрос не имеет смысла
>>Спроси у своих коллег, где и когда они по работе сталкивались с конечными автоматами
Обезьяна, тут уже 10 человек отписалось и все рассказали зачем нужны конечные автоматы (при том что конечные автоматы это не теория очередей, про нее даже самоучки знают) а тебе всё мало
И то и то обычно швабодно. Вон даже мс начала швабодку любить.
Подсвинок пиздоголовый, с чем из этого большинство (если вам так ненавистен среднестатистический программист) столкнется в работе?
Нет. Ты просто ничего кроме CPython в жизни не видел. Стандарт С++ не бесплатен. Реализиция языка Wolfram Language далеко не всегда бесплатна, про цену компиляторов каких нить Verilog тебе Броманд расскажет
>Стандарт С++ не бесплатен
Я и написал "обычно". Конпеляторы цпп в массе швабодны.
>Verilog
Конпеляторы/иде для прикладного программирования. Теперь доволен?
>>прикладного программирования
Wolfram точно не системный:)
Идея разве не попенсорц? RubyMine и WebStorm - это главные/единственные иде для этих языков? Насчет студии я и написал "обычно", второй раз тебе напоминаю.
ага
>>Идея разве не попенсорц?
коммунити -- да
ультимейт нет
>>RubyMine и WebStorm - это главные/единственные иде для этих языков?
Ну Ruby и, например, PyCharm почти что дефакто
И где исходники скачать?
https://github.com/JetBrains/intellij-community
Исходников точно нету у webstorm, rubymine и pycharm professional
Лол, а ты не знал? )
>Конпеляторы/иде для прикладного программирования. Теперь доволен?
pycharm да, но даже на работе вполне хватает комунети.
Кнут называет себя математиком.
Дейкстра называл себя математиком, и даже подчеркивал что называть то, чем он занимается "комптютер сайнс" это всё равно что называть хирургию "knife сайнс"
Вот не лень было тебе переключать раскладку, чтобы после «knife» написать русскими буквами «сайнс»
> попенсорц
/0
Проезжая мимо станции, у меня улетела шляпа
> что нужно знать дохуя всего чтобы быть веб-макакой
Нет, не нужно. Будь ей, без каких-либо знаний, я лично тебе разрешаю.
Так я и спросил, здесь разве не программисты сидят? Повторяю, это НЕ форум для домохозяек, тут мои коллеги, программисты.
> в интернет понтоваться ходят
Давай разберём по частям тобою написанное. Чтобы понтоваться, непременно нужен зритель. На этом сайте любой человек, кроме пхпшного рачья, знает больше меня в несколько раз, и у них я могу только поучиться. Получается, я понтуюсь перед тобой? Но что-то я не припомню, чтобы ты был как-то особенно мною очарован. И в чём же тогда понт?
Вот например 1024-- мой вопрос показался интересным, и цели, с которой я его задал, я тоже достиг.Но я НЕ СТАВИЛ вопрос о том, нужны ли кому-то автоматы и обязательно ли их кому-нибудь знать. Это уже твой личный Freud.
Твои вопросы вполне имеют право на существование, просто знание конечных автоматов в работе среднестатистическому программисту (слово средне понимаешь? не пыхарю, которым ты почему-то его пытаешься выставить) ничего не даст от слова вообще.
...............
https://symfony.com/doc/current/workflow/state-machines.html
Сифони
Сраный симфони, практически вордпресс
Алсо
https://github.com/yohang/Finite
https://github.com/winzou/state-machine
Пиши на си, заодно и память течь будет.
Наверное. Как и кривое кеширование когда кеш не отпускает старые объекты.
Если под средним-по-больнице программистом понимается более-менее что попало, тогда средний программист в среднем может знать какую угодно теорию и помочь ему на практике и что-то дать в работе тоже может приблизительно что угодно.
Тоже стейт машина
ЯДЕРНЫЙ RAGE! НЕТУ ТАКОГО ТЕРМИНА, СКОТИНА! КОНЕЧНЫЙ АВТОМАТ, СУКА! А НЕ СТЕЙКМАШИНА!
P.S.
> Где вам пригождались автоматы или знания о них в реале?
Чесно говоря, знания о автоматах на мозг не давят. Можно сформировать в одном предложении:
"храним состояние и переходим в другое по выволнению некоего условия"
Поподробнее?
Самих состояний может быть много. Писать их не буду, слишком специфично. Однако, если с точки зрения аггрератора цен, то там навеное не так уж и много состояний
Латыш, шоль?
http://holywars.ru/comments/17552
У Гугла я так и не нашёл хвалёный режим verbatim. Кавычки не помогают.
У Яндекса раньше был восклицательный знак для точного поиска. Теперь похоже, что его отменили.
Бинг, база которого уступает и Гуглу, и Яндексу, спокойно находит все статьи, в которых встречается A*.
https://www.google.ru/search?q=a*+algorithm
В архиве брата Шуберта?
"Неоконченная симфония", таки? Какая прелесть!
Есть некоторые особенности, например конечные автоматы бывают детермеринованые и недетерминированые, и вот во втором случае надо быть аккуратным чтобы не получить экспоненциальную питушню.
Создтатели движков регулярок не всегда это умеют, см. "Runaway Regular Expressions: Catastrophic Backtracking"
Это кстати родтвенник упомянутого уже тут https://en.wikipedia.org/wiki/JBPM
Записал в регистр что-то и железка перешла в состояние A, грубо говоря
Обокан, АКМ, АКМ-У, Скорострельный АКМ в "Тени чернобыля", "Зове припяти", "Чистом нёбе"
> или знания о них в реале
В пизде
Вот в веб-питушне что-то такое наблюдается. Есть форма, есть валидация, есть отсылка запросов. Кто-то давит на кнопку, и обработчик должен учитывать, что питушня находится в одном из состояний:
* есть изменения и ничего не сохраняли
* нажимали на кнопку, запрос на валидацию идёт
* запрос на валидацию прошёл, валидно
* нажимали на кнопку, запрос на сохранение идёт
* нет изменений или всё сохранили
И тут и клиент эту пишутню с учётом этих стадий обрабатывает, и сервер. Дальше ещё можно добавить "авторизован/не авторизован для сервера" и "отправлена первая часть формы", "... вторая...", ...
"Платон мне друк, да истина дороже."
Но напоминает только концептуально. Такого, чтобы кто-то на уровне кода применял стейт-машины для подобных задач, я не видел. Возможно это оттого, что часто в начале работы над проектом реализуется какое-то очень небольшое подмножество бизнес-логики, а потом никто уже не рефакторит усложнившуюся систему, а просто добавляют кучу трудно отлаживаемых и противоречивых условий, при которых у кнопки «Редактировать» будет `display: block;`
А ещё поведение задачи на гибкой доске (also known as agile board для тех, кто ненавидит свой родной русский язык и использует буржуйские термины) очень похоже на конечный автомат:
planning
todo
in progress
code review
in progress
code review
...
testing (todo)
testing (in progress)
reopened
code review
...
testing (todo)
testing (in progress)
reopened
code review
...
done
closed
>> Такого, чтобы кто-то на уровне кода применял стейт-машины для подобных задач, я не видел
орлы?
https://help.sap.com/doc/d9c75eebcfa840c8a4aa4b0e6a8136de/3.0.14/en-US/7c0bb3cd70061014aa44b2d6f9e344e9.html
https://infostart.ru/public/841130/
https://community.dynamics.com/crm/b/gonzaloruiz/archive/2016/09/27/state-machines-in-crm-for-status-transitions
http://1c.ruboard.ru/public/675140/
Даже 1С ники знают про конечный автомат
Сёма, лопни!
>стейт-машины
Поди-ка найди мне книжку, в которой дается определение этому термину. Тоже ведь буржуйский термин.
Не найду, это сленг, причём это не то же самое, что конечный автомат. Стейт-машина не обязательно конечна. Конечна финит-стейт-машина.
Спасибо.