Lý thuyết Automata thực tế như thế nào?


37

Luôn có một cách để ứng dụng trong các chủ đề liên quan đến khoa học máy tính lý thuyết. Nhưng sách giáo khoa và các khóa học đại học thường không giải thích lý do rằng lý thuyết automata là một chủ đề quan trọng và liệu nó có còn ứng dụng trong thực tế hay không. Do đó, sinh viên đại học có thể gặp khó khăn trong việc hiểu tầm quan trọng của lý thuyết automata và có thể nghĩ rằng nó không còn được sử dụng thực tế nữa.

Là lý thuyết automata vẫn hữu ích trong thực tế?

Nó có nên là một phần của chương trình giảng dạy CS đại học?


4
Tôi nghĩ rằng đây là ngoài chủ đề ở đây; vui lòng xem FAQ .
Jukka Suomela

3
Tôi có cảm xúc lẫn lộn về 'off = topic'-ness về điều này. Đây rõ ràng không phải là cấp độ nghiên cứu, nhưng câu hỏi đặc biệt này về sự liên quan của lý thuyết automata là một câu hỏi thường xuất hiện.
Suresh Venkat

18
Tôi nghĩ rằng đây là hoàn toàn về chủ đề. Các ứng dụng của lý thuyết automata hữu hạn là gì? Không khác với các ứng dụng Vertex Cover trong thế giới thực và chúng tôi đã không đóng câu hỏi đó.
Peter Shor

4
Nhân tiện, câu hỏi này có liên quan chặt chẽ và câu trả lời của nó có thể mang lại một số động lực thực tế cho việc nghiên cứu lý thuyết automata hữu hạn: " Biểu thức chính quy tốt cho việc gì? ".
Jukka Suomela

2
Tôi phải nói rằng chất lượng và sự đa dạng của các câu trả lời làm cho vấn đề "phạm vi" không liên quan. Tôi hy vọng rằng với ba phiếu bầu gần, câu hỏi này không vượt quá giới hạn.
Suresh Venkat

Câu trả lời:


51
  1. Bạn đã bao giờ sử dụng một công cụ như grep / awk / sed chưa? Biểu thức chính quy tạo thành trái tim của các công cụ này.

  2. Bạn sẽ ngạc nhiên về việc bạn có thể tránh được bao nhiêu mã hóa bằng cách sử dụng nguyên tắc các biểu thức thông thường - trong "các dự án thực tế", như một máy chủ email.

  3. Nếu bạn là chuyên viên CS, chắc chắn bạn sẽ viết trình biên dịch / trình thông dịch cho ngôn ngữ (ít nhất là nhỏ). Nếu bạn đã từng thử nhiệm vụ này trước đây và bị mắc kẹt, bạn sẽ đánh giá cao một lý thuyết nhỏ (còn gọi là ngữ pháp miễn phí ngữ cảnh) có thể giúp bạn. Lý thuyết này đã biến một nhiệm vụ bất khả thi thành một thứ có thể hoàn thành trong một ngày cuối tuần. (Và nó đã giành được cho nhà phát minh một giải thưởng Turing - google BNF).

  4. Nếu bạn là một chuyên gia CS, đôi khi, bạn cần phải ngồi lại và suy nghĩ về nền tảng triết học của máy tính, và không chỉ là phiên bản tiếp theo của API Android tuyệt vời như thế nào. Về một lưu ý liên quan, công việc của trường đại học không phải là chuẩn bị cho bạn trong 5 năm tiếp theo của cuộc đời bạn, mà là chuẩn bị cho bạn trong 50 năm tới. Điều duy nhất họ có thể làm trong vấn đề này là giúp bạn suy nghĩ - suy nghĩ của lý thuyết automata là một trong những khóa học.


32

Một trong những biểu hiện thực tế hơn của CS là Trình biên dịch xây dựng. Năm 1965, Knuth bắt đầu nghiên cứu về trình phân tích cú pháp LR. Nhanh chóng (trong vòng chưa đầy một thập kỷ), chúng tôi đã có các trình phân tích cú pháp LALR, một tập hợp con của automata đẩy xuống xác định cho phép chúng tôi thực hiện các trình phân tích cú pháp dịch chuyển / giảm.

Trọng tâm của tính khả thi và hiệu quả của phân tích cú pháp LALR là một bằng chứng (bởi Knuth) rằng "tiền tố" của ngôn ngữ hóa ra là thông thường (máy tự động hữu hạn của bạn). Đây là nguồn gốc của các trình tạo trình phân tích cú pháp tự động như yacc / bison, v.v.

Có thể nói rằng các ngôn ngữ lập trình như chúng ta biết đều nợ nhiều về hiệu quả biên dịch của chúng đối với những phát triển này.

Đây là một ví dụ khác: trái tim của giao thức TCP / IP là một máy trạng thái hữu hạn. Nó có thể thực tế hơn bao nhiêu?

Mỗi sinh viên CS nghiêm túc, đặc biệt là những người thực tế, nên chú ý đến lý thuyết automata. Nó là cơ sở cho phần lớn sự phong phú của Khoa học Máy tính.


Phân tích cú pháp các tệp nguồn không thực sự là phần thú vị (và quan trọng) của trình biên dịch, vì vậy tôi không nghĩ rằng "an toàn khi nói rằng" ngôn ngữ lập trình như chúng ta biết là chúng có nhiều hiệu quả biên dịch cho các phát triển này ". Hơn nữa, có thể phân tích các ngôn ngữ bằng các công cụ khác nhau, ví dụ PEG hoặc phân tích cú pháp kết hợp (ví dụ: Parsec).
Jan čpaček ngày

30

Bạn có nghe thấy tiếng ồn đó không? Đó là âm thanh của một ngàn định lý, ứng dụng và công cụ tuyệt vời đang cười trên thiên đường lý thuyết tự động.

Ngôn ngữ và automata là những khái niệm thanh lịch và mạnh mẽ mà bạn sẽ tìm thấy trong mọi lĩnh vực của khoa học máy tính. Ngôn ngữ không phải là khô khan, chính thống bắt tay từ tính toán tiền sử. Quan điểm lý thuyết ngôn ngữ chắt lọc những câu hỏi có vẻ phức tạp về các đối tượng tinh vi, mờ đục thành những tuyên bố đơn giản về từ ngữ và cây cối. Các ngôn ngữ chính thức đóng một vai trò trong khoa học máy tính gần giống với quan điểm cơ bản và thay đổi trò chơi do đại số và cấu trúc liên kết mang lại cho toán học cổ điển. Dưới đây là một số vấn đề thực tế, khá phức tạp, thực tế được tiếp cận thông qua lý thuyết ngôn ngữ.

  1. Bạn muốn phát hiện sự xuất hiện trùng lặp của một cụm từ trong tài liệu và xóa lần xuất hiện thứ hai. Về bản chất, bạn muốn thay thế một chuỗi trong một ngôn ngữ.
  2. Một chương trình có chứa một vi phạm khẳng định? Trình điều khiển thiết bị có tôn trọng các giao thức nhất định khi tương tác với kernel không? Hành vi của một chương trình là một tập hợp các lệnh thực thi; nói cách khác, một ngôn ngữ. Các tài sản chính xác là một ngôn ngữ khác. Vấn đề chính xác của chương trình là một kiểm tra bao gồm ngôn ngữ.
  3. Phần mềm của bạn có thể bị mắc kẹt trong một vòng lặp vô hạn? Liệu một thuật toán phân tán có chứa một livelock? Chúng tôi cần ngôn ngữ trên các từ vô hạn, nhưng chế độ xem bao gồm ngôn ngữ vẫn được áp dụng.
  4. Bạn muốn xây dựng một trình khử trùng để phát hiện Javascript độc hại được nhập vào một ứng dụng web. Tập hợp các chuỗi độc hại là một ngôn ngữ. Tập hợp các chuỗi được nhập vào các biểu mẫu trong ngôn ngữ khác. Bạn muốn xác định xem giao điểm của các ngôn ngữ này có trống không.
  5. Giám sát thời gian chạy của các hệ thống phản ứng và nhiệm vụ quan trọng. Bạn muốn thiết kế một màn hình phần mềm giám sát hoạt động của quy trình hóa học của bạn hoặc theo dõi các cập nhật cho cơ sở dữ liệu tài chính. Đây là những vấn đề bao gồm ngôn ngữ trái tim và giao lộ.
  6. Nhận dạng mẫu với nhiều ứng dụng của nó. Bạn muốn phát hiện các mẫu trong dữ liệu genomic, trong văn bản, trong một loạt các báo cáo lỗi. Đây là những vấn đề mà chúng ta được đưa ra từ từ một ngôn ngữ không xác định và phải đoán ngôn ngữ. Đây là những vấn đề suy luận ngôn ngữ.
  7. Đưa ra một tập hợp các tài liệu XML, bạn muốn thiết kế ngược lại một lược đồ áp dụng cho các tài liệu này. Tài liệu XML có thể được lý tưởng hóa một cây. Một lược đồ sau đó là một đặc tả của ngôn ngữ cây và vấn đề suy luận lược đồ là một vấn đề suy luận ngôn ngữ đối với các ngôn ngữ cây.
  8. Nhiều ứng dụng yêu cầu lý luận số học tự động. Giả sử chúng ta sửa một lý thuyết logic như số học Presburger, trong đó chúng ta có các số tự nhiên, cộng và ít hơn vị ngữ. Một công thức với n biến đại diện cho một tập các vectơ n chiều. Vectơ là một chuỗi các chữ số và có thể được mã hóa thành một từ. Một vị ngữ sau đó là một tập hợp các từ; một ngôn ngữ. Các hoạt động logic như kết hợp, phân tách và phủ định trở thành giao điểm, hợp nhất và bổ sung của các ngôn ngữ (định lượng hiện sinh là một loại phép chiếu).

Việc giảm gợi ý ở trên coi các ngôn ngữ là các đối tượng toán học trừu tượng. Để áp dụng những ý tưởng này trong thực tế, chúng ta cần một cấu trúc dữ liệu để biểu diễn các ngôn ngữ và thuật toán để thao tác các cấu trúc dữ liệu này.

Nhập automata. Automata cho phép chúng ta giảm các câu hỏi về các đối tượng toán học trừu tượng như ngôn ngữ thành các câu hỏi cụ thể, thuật toán về các biểu đồ được dán nhãn. Ngôn ngữ và lý thuyết automata, bên cạnh một số lượng lớn các ứng dụng thực tế, cung cấp một dịch vụ trí tuệ rất quan trọng. Chúng ta có thể suy nghĩ về các vấn đề từ định dạng mã zip đến quy trình quyết định cho logic thứ tự đơn thứ hai trong không gian khái niệm thống nhất và không lộn xộn. Thật tuyệt vời làm sao!

Tôi đã không nói gì về logic và thủ tục quyết định. (Vâng, họ có các ứng dụng thực tế.) Xem câu trả lời của Kaveh để biết tổng quan có thẩm quyền.


haha, trớ trêu
Praveen Soni

16

Như đã được giải thích trong các câu trả lời khác, lý thuyết automata về mặt khái niệm quan trọng như là một mô hình tính toán đơn giản mà chúng ta hiểu rõ, và các biểu thức chính quy và automata có nhiều ứng dụng thực tế.

Đây là một ví dụ nhỏ cho nghiên cứu hiện đại quay trở lại lý thuyết automata để hiểu một khái niệm hiện đại. Trong bài báo này, các nhà nghiên cứu chứng minh rằng tất cả các ngôn ngữ thông thường đều có người kiểm tra thuộc tính: "Ngôn ngữ thông thường có thể kiểm tra được với số lượng truy vấn không đổi"


15

Nó không chỉ là vanilla automatons. Bạn đang tìm hiểu về những điều cơ bản (trạng thái chấp nhận, chuyển đổi epsilon, ...) của mô hình (tính toán) giúp suy luận về những gì có thể, và quan trọng hơn là những gì không thể diễn đạt bằng một số ngôn ngữ truy vấn. Một vài kết quả thú vị bao gồm:

(và tất nhiên tôi bỏ qua rất nhiều lớp khác)

Về cơ bản, nó là một mô hình rất chung chung. Các lớp học của bạn có thể sẽ nhấn mạnh liên kết giữa automata, ngôn ngữ và logic.

Nếu tôi đang xem xét liên quan đến công cụ "thế giới" cụ thể này, tôi sẽ dành một buổi sáng nhàn nhã tại thư viện để đọc một vài phần (AB?) Từ Cơ sở dữ liệu của Abiteboul & al, và cố gắng kết nối lại tài liệu này với tài liệu lớp học . Tất nhiên đó chỉ là một trong (nhiều) cách tìm kiếm các ứng dụng của lớp automata và tôi đoán không phải là rõ ràng nhất - nhưng đó chính xác là lý do tại sao đó là một bài tập thú vị.


14

Như đã chỉ ra trong các câu trả lời khác nhau, Lý thuyết Automata trong các khóa học UG đưa ra một khung khái niệm cơ bản để giới thiệu các chủ đề nâng cao (và thực tế) hơn, và cũng để chỉ ra các kết nối bị bỏ qua; ví dụ: Sơ đồ quyết định nhị phân (chúng được tối thiểu hóa DFA; sau khi dạy DFA, tôi thường dạy giải câu đố dựa trên BDD); kịch bản bao gồm trong BioPerl và BioPython (và một thiết lập tuyệt vời để củng cố số lượng trận đấu ngoài ý muốn có thể được ẩn trong các biểu thức kịch bản trong thế giới thực), gỡ lỗi chính thức (thuộc tính trạng thái như FA bị phủ định, giao nhau) và thậm chí cả chương trình báo động đột nhập tại nhà (tình huống căng thẳng hàng ngày của một máy tự động được chỉ định kém được dạy thông qua các ví dụ không đầy đủ; có lẽ được chính thức hóa bằng cách sử dụng tổng hợp kịch bản dựa trên kịch bản play-in / play-play của Harel). Tôi cũng sử dụng cài đặt để dạy Python '


1
Chào mừng, Ganesh!
Suresh Venkat

1
Một cách tốt đẹp để dạy automata. Bạn có sẵn sàng chia sẻ ghi chú bài giảng của bạn?
Martin Berger

9

Tôi sẽ đưa ra một câu trả lời khác từ một góc độ thực tế hoàn toàn khác: các máy trạng thái hữu hạn (hoặc ít nhất là một số khái quát / mở rộng đơn giản của chúng) thường được sử dụng cho khía cạnh AI của lập trình trò chơi. Họ bật ra để cung cấp một mô hình xuất sắc để đóng gói hành vi nhân vật; ví dụ, kẻ thù có thể có các quốc gia đại diện cho 'tuần tra', 'tìm kiếm', 'tiếp cận', 'tấn công', 'phòng thủ', 'rút lui', 'chết', v.v. với các chuyển tiếp được xác định rõ giữa chúng. Điều này không liên quan đến bất kỳ khía cạnh chính thức nào của automata như ngôn ngữ thông thường và tương tự, nhưng khái niệm về máy tự động là một vấn đề rất cốt lõi.


8

Chúng ta đã thấy rằng ngôn ngữ đối lập với lý thuyết và thực hành, đặt ngôn ngữ này lên trên ngôn ngữ khác, chính là sự thỏa mãn của sự thờ ơ mà nó chứng minh rằng một người đàn ông không quen thuộc với những yếu tố đầu tiên của suy nghĩ, và đi một cách tuyệt vời để chứng minh tâm trí bị biến thái đến mức không có khả năng được dạy chúng.

- James Mill (viết bút danh là Pê PQ), Lý thuyết và Thực hành, Tạp chí Luân Đôn và Westminster , tháng 4 năm 1836


8

Đã có nghiên cứu đáng kể liên quan đến lý thuyết automata trong kiểm tra mô hình được sử dụng trong ngành công nghiệp. Kiểm tra các bài giảng gần đây của Moshe Vardi tại Học viện Trường , đặc biệt là bài giảng thứ 3 "Logic, Automata, Trò chơi và Thuật toán" để biết lý do tại sao lý thuyết automata vẫn quan trọng và hữu ích.

Trừu tượng:

Cách tiếp cận lý thuyết tự động đối với các thủ tục quyết định, được giới thiệu bởi Buechi, Elgot, Rabin và Trakhtenbrot trong những năm 1950 và 1960, là một trong những cách tiếp cận cơ bản nhất đối với các thủ tục quyết định. Gần đây, phương pháp này đã tìm thấy các ứng dụng công nghiệp trong việc xác minh chính thức các hệ thống phần cứng và phần mềm. Con đường từ logic đến các thuật toán thực tế không chỉ thông qua automata, mà còn thông qua các trò chơi, với các khía cạnh thuật toán được nghiên cứu bởi Chandra, Kozen và Stockmeyer vào cuối những năm 1970. Trong bài nói chuyện tổng quan này, chúng tôi mô tả đường dẫn từ logic đến thuật toán thông qua automata và trò chơi.

Các slide và tập tin âm thanh của các bài giảng có sẵn ở đây: 1 , 2 , 3 .


6

Chúng ta nên tính đến ngữ nghĩa của các từ "thực tế" và "ứng dụng". Đối với một số sinh viên, thực tế là bất cứ điều gì sẽ giúp họ vượt qua kỳ thi; đối với những người khác, bất cứ điều gì sẽ đến trong một công việc. Trong cả hai trường hợp, Lý thuyết Automata thực sự rất thực tế.

Như những người khác chỉ ra, bạn sẽ sử dụng ngữ pháp, ví dụ, khi nghiên cứu trình biên dịch. Nhưng thậm chí còn hơn thế: hiểu toàn bộ khái niệm về việc có các trạng thái và quy tắc khác nhau để chuyển đổi giữa chúng có thể giúp bạn trở thành một lập trình viên tốt hơn khi bạn nhận ra rằng, mã của bạn là dư thừa ở đây và ở đó, và khi bạn cải thiện nó, bạn đang áp dụng trong mã của bạn những ý tưởng khái niệm tương tự đằng sau việc tối thiểu hóa DFA.

Tương tự cho "ứng dụng". Bạn hiểu từ đó là gì? Ngay cả khi bạn là một "kỹ sư thực tế", bạn sẽ thấy và sử dụng các ý tưởng tương tự như Lý thuyết Automata trong các dự án trong thế giới thực: mã lập trình, sơ đồ dòng chảy và thậm chí là khái niệm đơn giản nhưng tuyệt vời của một ngăn xếp. Đối với những người mọt sách lý thuyết như tôi, tôi xem xét các ứng dụng của Lý thuyết tự động trong các lĩnh vực khác, như logic, đại số và lý thuyết mô hình hữu hạn. Chắc chắn, tôi có thể sẽ không bao giờ cần sử dụng bổ đề bơm khi đi mua sắm trong siêu thị, nhưng các định lý như thế đã giúp tôi hiểu cấu trúc của các loại ngôn ngữ nhất định, không đề cập đến cấu trúc logic và đại số mà chúng tương ứng. Và đó là điều tôi đánh giá cao hơn bất kỳ thước đo thực tiễn nào.


5

Được kết hợp với logic, automata có thể cung cấp các cách để kiểm tra stHRens như

Aφ

AφAφ

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


3

Automata hữu hạn, thường được viết về các máy trạng thái hữu hạn trong các bối cảnh khác nhau hoặc với các biến thể xác suất của chúng Các mô hình Markov ẩn có thể được áp dụng để nhận dạng mẫu và định lượng cấu trúc của một mẫu. Ví dụ, máy tự động hữu hạn ngẫu nhiên nhỏ nhất sẽ tạo ra các chuỗi theo, nhiều hay ít, theo phân phối xác suất nhất định hoặc khớp các thuộc tính thống kê của một mẫu chuỗi (hoặc chuỗi thời gian) từ một số phân phối.

Xem ví dụ CSSR , một thuật toán để xây dựng lại các trạng thái ẩn một cách mù quáng; nó hiệu quả và linh hoạt hơn các Mô hình Markov ẩn.


1
Để thêm vào khía cạnh thực tế, Mô hình Markov ẩn được sử dụng trong các chương trình nhận dạng giọng nói như Kurzweil.
tdyen

3

Một ứng dụng thực tế hơn của lý thuyết automata là phát triển trí tuệ nhân tạo. Trí tuệ nhân tạo được phát triển từ khái niệm tự động hữu hạn. Mạng lưới thần kinh của robot được xây dựng trên cơ sở lý thuyết automata. Sau khi tất cả các robot cũng là automata.


2

Một số người đã đưa ra câu trả lời tuyệt vời khi nói đến việc nó liên quan đến ngành công nghiệp như thế nào. Điều quan trọng là giá trị khoa học của nó và lý thuyết Automata thường là cơ hội để hiểu được mức độ cao nhất của lý thuyết tính toán trong các nghiên cứu của một sinh viên đại học. Lý thuyết Automata có một bộ các định lý lớn xuất hiện khắp nơi trong Khoa học máy tính lý thuyết, và đặc biệt là khi người ta muốn nói về ứng dụng như Trình biên dịch. Giá trị khoa học của nó (không lỗi thời, làm sao có thể như vậy? Đó là lý thuyết cốt lõi đối với lĩnh vực này.) Là thực tế đối với bất kỳ nhà khoa học nào quan tâm đến tính toán. Nó là thực tế vì nó là kiến ​​thức hữu ích cho những người hiểu hoặc muốn hiểu bản chất của tính toán. Nếu bạn không thể tìm thấy việc sử dụng nó, tôi đặt câu hỏi cho nghiên cứu hoặc thậm chí có ý định nghiên cứu CS vì nó không phải là lập trình (đó '

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.