오토마타 이론은 얼마나 실용적입니까?


37

이론적 인 컴퓨터 과학과 관련된 주제에 응용하는 방법은 항상 있습니다. 그러나 교과서와 학부 과정은 일반적으로 오토마타 이론이 중요한 주제 인 이유와 여전히 실제 응용 프로그램이 있는지 여부를 설명하지 않습니다. 따라서 학부생들은 오토마타 이론의 중요성을 이해하는 데 어려움을 겪고 더 이상 실용적이지 않다고 생각할 수 있습니다.

오토마타 이론은 여전히 ​​실용적입니까?

학사 과정 CS 커리큘럼의 일부 여야합니까?


4
나는 이것이 여기서 논제 적이라고 생각한다. FAQ 를 참조하십시오 .
Jukka Suomela

3
나는 이것의 'off = topic'-ness에 대해 여러 가지 감정을 가지고 있습니다. 분명히 연구 수준은 아니지만, 오토마타 이론의 관련성에 대한이 특별한 질문은 자주 제기되는 질문입니다.
Suresh Venkat

18
나는 이것이 완벽하게 주제라고 생각합니다. 유한 오토마타 이론의 적용은 무엇입니까? 실제 세계의 Vertex Cover Applications와 다르지 않으며 우리는 그 질문을 끝내지 않았습니다.
피터 쇼어

4
그런데,이 질문에 밀접하게 관련되어, 그 대답은 물론 유한 오토마타 이론의 연구를위한 몇 가지 구체적인 의욕을 줄 수 있습니다 " ?에 대한 정규 표현식 좋은 무엇입니까 ."
Jukka Suomela

2
품질과 다양한 답변이 "범위"문제와 관련이 없다고 말해야합니다. 세 번의 찬성 투표로이 질문이 우위를 차지하지 않기를 바랍니다.
Suresh Venkat

답변:


51
  1. grep / awk / sed와 같은 도구를 사용한 적이 있습니까? 정규식은 이러한 도구의 핵심입니다.

  2. 이메일 서버와 같은 "실제 프로젝트"에서 정규 표현식을 원칙적으로 사용하여 피할 수있는 코딩의 양에 놀랄 것입니다.

  3. CS 전공이라면 분명히 (적어도 작은) 언어에 대한 컴파일러 / 통역사를 작성하게 될 것입니다. 이전에이 작업을 시도해 본 적이 있다면 약간의 이론 (컨텍스트 프리 문법)이 얼마나 도움이 될 수 있는지 감사하게 생각할 것입니다. 이 이론은 한 번 불가능한 일을 주말에 걸쳐 완료 할 수있는 것으로 만들었다. (그리고 그것은 발명가 Turing 상을 수상했습니다-Google BNF).

  4. CS 전공이라면 언젠가는 다음 버전의 Android API가 얼마나 멋진지가 아니라 컴퓨팅의 철학적 기초에 대해 생각하고 앉아 있어야합니다. 관련 메모에 따르면, 앞으로 5 년 동안 당신을 준비시키는 것이 아니라 다음 50 년 동안 당신을 준비시키는 것이 대학의 임무입니다. 코스 중 하나로서 오토마타 이론의


32

CS의보다 실용적인 표현 중 하나는 컴파일러 구성입니다. 1965 년 Knuth는 LR 파서 연구를 시작했습니다. 신속하게 (10 년 이내에), 시프트 / 감소 파서를 구현할 수있는 결정적 푸시 다운 오토마타의 하위 집합 인 LALR 파서가있었습니다.

LALR 파싱의 타당성과 효율성의 핵심에는 언어의 "접두사"가 규칙적 (유한 한 오토 마톤)으로 밝혀 졌다는 증거 (Knuth의 증거)가 있습니다. 이것은 yacc / bison 등과 같은 자동 파서 생성기의 기원입니다.

우리가 알고있는 프로그래밍 언어는 이러한 개발에 대한 컴파일 효율성의 상당 부분을 가지고 있다고 말하는 것이 안전합니다.

또 다른 예는 다음과 같습니다. TCP / IP 프로토콜의 핵심은 유한 상태 머신입니다. 얼마나 더 실용적 일 수 있습니까?

모든 심각한 CS 학생, 특히 실용적인 학생들은 오토마타 이론에주의를 기울여야합니다. 그것은 풍부한 컴퓨터 과학의 기초입니다.


소스 파일을 파싱하는 것은 실제로 컴파일러의 흥미롭고 중요한 부분이 아니기 때문에 "언어를 프로그래밍 할 때 언어를 프로그래밍하면 이러한 개발에 대한 컴파일 효율성이 높다"고 말하는 것이 안전하지 않다고 생각합니다. 또한 PEG 또는 구문 분석 조합기 (예 : parsec)와 같은 다른 도구를 사용하여 언어를 구문 분석 할 수 있습니다.
Jan Špaček 2016 년

30

소리 들리니 ? 그것은 automata-theoryetic 천국에서 웃고있는 수천 개의 화려한 정리, 응용 프로그램 및 도구의 소리입니다.

언어와 오토마타는 컴퓨터 과학의 모든 영역에서 찾을 수있는 우아하고 강력한 개념입니다. 언어는 선사 시대 계산에서 나온 건전한 형식주의 자식이 아닙니다. 언어 이론의 관점은 정교하고 불투명 한 대상에 대한 복잡한 질문을 단어와 나무에 대한 간단한 진술로 요약합니다. 공식 언어는 컴퓨터 과학에서 대수와 토폴로지가 고전 수학에 가져 오는 근본적이고 게임을 바꾸는 관점과 유사한 역할을합니다. 다음은 언어 이론을 통해 접근하는 실용적이고 상당히 복잡한 실제 문제입니다.

  1. 문서에서 문구의 중복 발생을 발견하고 두 번째 발생을 삭제하려고합니다. 본질적으로 언어의 시퀀스를 대체하려고합니다.
  2. 프로그램에 어설 션 위반이 포함되어 있습니까? 커널과 상호 작용할 때 장치 드라이버가 특정 프로토콜을 존중합니까? 프로그램의 동작은 일련의 실행입니다. 다시 말해 언어입니다. 정확성 속성은 다른 언어입니다. 프로그램 정확성 문제는 언어 포함 확인에 해당합니다.
  3. 소프트웨어가 무한 루프에 빠질 수 있습니까? 분산 알고리즘에 라이브 록이 포함되어 있습니까? 우리는 무한한 단어 이상의 언어가 필요하지만 언어 포함보기는 여전히 적용됩니다.
  4. 웹 응용 프로그램에 입력 된 악성 Javascript를 탐지하는 소독제를 구축하려고합니다. 악성 문자열 세트는 언어입니다. 문자열이 다른 언어로 양식에 입력되었습니다. 이러한 언어의 교차가 비어 있지 않은지 확인하려고합니다.
  5. 반응 형 및 미션 크리티컬 시스템의 런타임 모니터링 화학 공정의 운영을 감독하거나 재무 데이터베이스의 업데이트를 추적하는 소프트웨어 모니터를 설계하려고합니다. 이것들은 핵심 언어 포함과 교차점 문제입니다.
  6. 수많은 응용 분야에서 패턴 인식. 일련의 버그 보고서에서 게놈 데이터, 텍스트, 패턴을 감지하려고합니다. 이것은 우리가 알 수없는 언어의 단어가 주어지고 언어를 추측해야하는 문제입니다. 이것들은 언어 추론 문제입니다.
  7. XML 문서 세트가 제공되면 이러한 문서에 적용되는 스키마를 리버스 엔지니어링하려고합니다. XML 문서는 나무에 이상적 일 수 있습니다. 그러면 스키마는 트리 언어의 사양이고 스키마 유추 문제는 트리 언어에 대한 언어 유추 문제입니다.
  8. 많은 응용 프로그램에서 자동 산술 추론이 필요합니다. 우리가 Presburger 산술과 같은 논리적 인 이론을 고쳤다 고 가정하자. 여기서 우리는 자연수, 덧셈 및보다 적은 술어를 가진다. n 개의 변수가있는 공식은 n 차원 벡터 세트를 나타냅니다. 벡터는 일련의 숫자이며 단어로 인코딩 할 수 있습니다. 술어는 단어 집합입니다. 언어. 결합, 분리 및 부정과 같은 논리 연산은 언어의 교차, 결합 및 보완이됩니다 (실제 수량화는 일종의 프로젝션입니다).

위에서 언급 한 축소는 언어를 추상 수학 객체로 취급합니다. 실제로 이러한 아이디어를 적용하려면 이러한 데이터 구조를 조작하기위한 언어 및 알고리즘을 나타내는 데이터 구조가 필요합니다.

오토마타를 입력하십시오. 오토마타를 사용하면 언어와 같은 추상적 인 수학적 객체에 대한 질문을 레이블이있는 그래프에 대한 구체적이고 알고리즘적인 질문으로 줄일 수 있습니다. 언어와 오토마타 이론은 많은 실제 응용 프로그램 외에도 매우 중요한 지적 서비스를 제공합니다. 우리는 우편 번호의 형식화에서 균일하고 정리되지 않은 개념적 공간에서 모나 딕 2 차 논리에 대한 결정 절차에 이르기까지 다양한 문제에 대해 생각할 수 있습니다. 얼마나 놀랍습니까!

나는 논리와 결정 절차에 대해 아무 말도하지 않았다. (예, 실제 응용 프로그램이 있습니다.) 권위있는 개요는 Kaveh의 답변을 참조하십시오.


하하, 아이러니
Praveen Soni

16

다른 답변에서 설명했듯이 오토마타 이론은 개념적으로 우리가 잘 이해하는 간단한 계산 모델로서 중요하며 정규 표현식과 오토마타에는 많은 실제 응용 프로그램이 있습니다.

다음은 현대 개념을 이해하기 위해 오토마타 이론으로 돌아가는 현대 연구의 작은 예입니다. 이 논문에서 연구자들은 정규 언어가 모두 속성 테스터를 가지고 있음을 증명합니다 : "정규 언어는 일정한 수의 쿼리로 테스트 가능합니다"


15

바닐라 오토 마톤 만이 아닙니다. 무엇을 할 수 있는지, 더 중요하게는 일부 쿼리 언어로 표현할 수없는 것을 추론하는 데 도움이되는 (계산) 모델의 기본 사항 (상태, 엡실론 전환 허용 ...)에 대해 배우고 있습니다. 몇 가지 흥미로운 결과는 다음과 같습니다.

(물론 다른 많은 수업을 건너 뛰고 있습니다)

기본적으로 매우 일반적인 모델입니다. 여러분의 수업은 아마도 오토마타, 언어 및 논리 사이의 연결을 강조 할 것입니다.

이 도구를 구체적인 "세상적인"도구와 관련 하여보고자한다면, Abiteboul & al의 Foundations of Databases 에서 몇 부분 (AB?)을 읽고이 자료를 다시 수업 자료에 연결하려고 도서관에서 느긋하게 아침을 보냈습니다. . 물론 그것은 automata 클래스의 응용 프로그램을 찾는 (다수의) 방법 중 하나 이며, 가장 분명하지는 않지만 추측하기가 흥미로운 이유입니다.


14

다양한 답변에서 이미 지적했듯이 UG 과정의 Automata Theory는 고급 및 실제 주제를 소개하고 간과 된 연결을 지적하기위한 기본 개념 프레임 워크를 제공합니다. 예를 들어 : 이진 결정 다이어그램 (DFA는 최소화되어 있습니다. DFA를 가르치고 나면 종종 BDD 기반 퍼즐 해결을 가르칩니다); BioPerl 및 BioPython을 포함한 스크립팅 (실제 스크립트 정규 표현식에 숨겨 질 수있는 의도하지 않은 일치 항목 수를 강화하기위한 훌륭한 설정), 공식 디버깅 (FA가 무효화 된 상태 속성, 교차) 및 VCR 또는 가정 침입자 경보 프로그래밍 (불완전한 예를 통해 잘못 지정된 오토 마톤의 일상 스트레스 상황; 아마도 Harel의 플레이-인 / 플레이-아웃 시나리오 기반 사용자 인터페이스 합성을 사용하여 공식화 될 수 있음). 나는 또한 파이썬을 가르치기 위해 설정을 사용합니다.


1
가네, 가네!
Suresh Venkat

1
오토마타를 가르치는 좋은 방법. 강의 노트를 기꺼이 공유 하시겠습니까?
Martin Berger

9

나는 완전히 다른 실용적인 각도에서 또 다른 해답을 버리겠다 : 유한 상태 머신 (또는 최소한 몇 가지 간단한 일반화 / 확장)은 종종 게임 프로그래밍의 AI 측에서 사용된다. 캐릭터 행동을 캡슐화하기위한 훌륭한 모델을 제공하는 것으로 밝혀졌습니다. 예를 들어, 적에게는 '순찰', '검색', '접근', '공격', '방어', '후퇴', '다이'등을 나타내는 상태가있을 수 있습니다. 이것은 정규 언어 등과 같은 오토마타의 공식적인 측면을 포함하지 않지만 , 오토 마톤 의 개념 은 매우 핵심적인 것입니다.


8

우리는 이론과 실천을 대조하고 언어를 다른 언어보다 높게 설정하는 언어가 무지의 최종 결론이라는 것을 알게되었습니다. 그들에게 가르침을받을 수 없을 정도로 왜곡 된 마음.

— 제임스 밀 (가명“PQ”로 작성),“이론 및 실습”, 런던 및 웨스트 민스터 검토 , 1836 년 4 월


8

업계에서 사용되는 모델 검사에서 오토마타 이론과 관련된 상당한 연구가있었습니다. 확인 필드 연구소에서 모셰 바디의 최근 강의를 , 특히 오토마타 이론은 여전히 중요하고 유용한 이유의 맛을하기위한 곳 중 3 번째 강의 "논리, 오토마타, 게임, 및 알고리즘".

요약:

1950 년대와 1960 년대에 Buechi, Elgot, Rabin 및 Trakhtenbrot가 도입 한 의사 결정 절차에 대한 자동 이론 이론적 접근은 의사 결정 절차에 대한 가장 근본적인 접근 방법 중 하나입니다. 최근이 접근 방식은 하드웨어 및 소프트웨어 시스템의 공식 검증에서 산업 응용 분야를 발견했습니다. 논리에서 실제 알고리즘으로의 길은 오토마타뿐만 아니라 1970 년대 후반 Chandra, Kozen 및 Stockmeyer의 알고리즘 측면을 연구 한 게임을 통해 진행됩니다. 이 개요에서는 오토마타와 게임을 통한 논리에서 알고리즘으로의 경로를 설명합니다.

강의 슬라이드 및 오디오 파일은 1 , 2 , 3 에서 사용할 수 있습니다 .


6

"실제"와 "응용"이라는 단어의 의미를 고려해야합니다. 일부 학생에게는 실용성 이있어 시험에 합격하는 데 도움이됩니다. 다른 사람들을 위해, 직업에 올 것입니다. 두 경우 모두 오토마타 이론은 실제로 매우 실용적입니다.

다른 사람들이 지적했듯이 컴파일러를 공부할 때와 같이 문법을 사용합니다. 그러나 그 이상의 것 : 서로 다른 상태와 그 사이의 전환 규칙을 갖는 전체 개념을 이해하면 예를 들어 코드가 여기 저기 중복되어 있고 개선 할 때 더 나은 프로그래머가 될 수 있습니다. 되어 적용 코드에 동일한 개념 아이디어 DFA 최소화 뒤에 있습니다.

"응용 프로그램"과 유사합니다. 그 말로 무엇을 이해합니까? 당신이 "지구의 엔지니어"라고해도 실제 프로젝트에서 Automata Theory와 유사한 아이디어를보고 사용할 것입니다 : 프로그래밍 코드, 흐름도, 단순하면서도 훌륭한 스택 개념. 저와 같은 이론상 머릿속에 대해서는 논리, 대수학, 유한 모형 이론과 같은 다른 분야에서 오토마타 이론을 적용 하는 것을 고려 합니다 . 확실히, 나는 슈퍼마켓에서 쇼핑하는 동안 펌핑 보조 정리를 사용할 필요가 없지만, 그런 이론은 내가 대응하는 논리와 대수 구조를 언급하지 않고 특정 클래스의 언어 구조 를 이해하는 데 도움 이되었습니다. 그리고 그것은 실용성보다 더 중요합니다.


5

논리와 함께 던져지면 오토마타는 다음과 같은 상태를 확인하는 방법을 제공 할 수 있습니다

Aφ

AφAφ

φAφAφL(A)L(Aφ)


3

Finite Automata는 종종 서로 다른 상황에서 유한 상태 기계로 언급되거나 확률 적 변형으로 숨겨진 Markov 모델을 패턴 인식 및 패턴 구조의 정량화에 적용 할 수 있습니다. 예를 들어 주어진 확률 분포에 따라 문자열을 생성하거나 일부 분포에서 문자열 샘플 (또는 시계열)의 통계 속성과 일치하는 문자열을 생성하는 가장 작은 확률 적 유한 오토마타는 무엇입니까?

숨겨진 상태를 맹목적으로 재구성하기위한 알고리즘 인 CSSR을 참조하십시오 . 은닉 마르코프 모델보다 더 효율적이고 유연합니다.


1
실용적인 측면에 추가하기 위해, 숨겨진 마르코프 모델은 Kurzweil과 같은 음성 인식 프로그램에 사용됩니다.
tdyen

3

오토마타 이론의 또 다른 실용적인 적용은 인공 지능의 개발입니다. 인공 지능은 유한 오토 마톤의 개념에서 개발되었습니다. 로봇의 신경망은 오토마타 이론에 기초하여 구성됩니다. 모든 로봇도 오토마타입니다.


2

일부는 그것이 산업과 어떻게 관련되어 있는지에 대해 큰 대답을했습니다. 중요한 것은 과학적 가치이며, Automata 이론은 종종 학부생의 연구에서 더 높은 수준의 계산 이론을 이해하기위한 출입구입니다. Automata 이론에는 이론적 컴퓨터 과학 분야, 특히 컴파일러와 같은 응용 프로그램에 대해 이야기하고 싶을 때 사용되는 거대한 이론이 있습니다. 그것의 과학적 가치 (구식이 아니고 어떻게 될 수 있는가? 그것은 현장에 대한 핵심 이론이다)는 계산에 관심이있는 모든 과학자들에게 실용적이다. 계산의 본질을 이해하거나 이해하려는 사람들에게 유용한 지식이므로 실용적입니다. 당신이 그것을 사용할 수 없다면, 나는 그것이 프로그래밍이 아니기 때문에 연구에 의문을 제기하거나 CS를 연구하려는 의도에 의문을 제기합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.