Tại sao Máy Turing là một mô hình tính toán phổ biến?


68

Tôi là một sinh viên CS. Tôi hiểu làm thế nào Turing nghĩ ra cỗ máy trừu tượng của mình (mô hình hóa một người đang tính toán), nhưng dường như tôi là một người trừu tượng, lúng túng. Tại sao chúng ta xem xét một "băng" và đầu máy viết các ký hiệu, thay đổi trạng thái, dịch chuyển băng qua lại?

Ý nghĩa cơ bản là gì? Một DFA là thanh lịch - dường như nắm bắt chính xác những gì cần thiết để nhận ra các ngôn ngữ thông thường. Nhưng cỗ máy Turing, theo đánh giá mới làm quen của tôi, chỉ là một bản tóm tắt trừu tượng vụng về.

Sau khi suy nghĩ về nó, tôi nghĩ rằng mô hình tính toán lý tưởng nhất sẽ nói rằng một số hệ thống vật lý tương ứng với chuỗi đầu vào, sau khi được thiết lập thành chuyển động, sẽ đạt đến trạng thái cân bằng tĩnh, khi giải thích tương đương với mô hình được sử dụng để hình thành hệ thống từ chuỗi gốc, sẽ tương ứng với chuỗi đầu ra chính xác. Điều này nắm bắt khái niệm "tự động hóa", vì hệ thống sẽ thay đổi tất yếu chỉ dựa trên trạng thái ban đầu.

Chỉnh sửa :

Sau khi đọc một vài câu trả lời, tôi nhận ra rằng điều khiến tôi bối rối về máy Turing là nó dường như không phải là tối thiểu. Không phải mô hình chính tắc của tính toán rõ ràng truyền đạt bản chất của tính toán?

Ngoài ra, trong trường hợp không rõ ràng, tôi biết rằng các DFA không phải là mô hình tính toán hoàn chỉnh.

Cảm ơn vì câu trả lời của bạn.


2
Hy vọng các lớp học trong tương lai sẽ giúp làm rõ.
Yuval Filmus

19
Có thể bạn sẽ thấy lambda tính toán như một mô hình tính toán tự nhiên hơn. Đó là những gì lập trình chức năng dựa trên.
Bakuriu

4
Thật ra, tôi sắp tốt nghiệp. Khóa học cấp cao nhất mà tôi tham gia có liên quan đến lý thuyết automata đã dừng với máy Turing, mặc dù họ đã đề cập đến sự tương đương giữa các mô hình tính toán khác nhau. Tôi thậm chí đã chia sẻ công bằng, "lập trình" TM một cách chính xác. Tuy nhiên, TM luôn làm phiền tôi. Nó không có vẻ "tối thiểu"; nó không cho tôi thấy bản chất của tính toán.
Alex

4
" Một số hệ thống vật lý tương ứng với chuỗi đầu vào " - sự tương ứng đó sẽ như thế nào? Máy Turing là một mô hình chính thức khá đơn giản nhưng mạnh mẽ cho chính xác một điều như vậy.
Bergi

2
Máy Turing thực sự thay đổi chỉ dựa trên trạng thái ban đầu (nếu bạn muốn nói là cấu hình). Vậy có chuyện gì với nó vậy?
dùng23013

Câu trả lời:


72

Chà, DFA chỉ là một máy Turing chỉ được phép di chuyển sang phải và phải chấp nhận hoặc từ chối ngay khi nó hết ký tự đầu vào. Vì vậy, tôi không chắc người ta thực sự có thể nói rằng DFA là tự nhiên nhưng máy Turing thì không.

Phê bình câu hỏi sang một bên, hãy nhớ rằng Turing đã hoạt động trước khi máy tính tồn tại. Như vậy, anh ta đã không cố gắng mã hóa những gì máy tính điện tử làm, nhưng, nói chung, tính toán nói chung. Cha mẹ tôi có một cuốn từ điển từ những năm 1930, định nghĩa máy tính là "người tính toán" và về cơ bản, đó là nơi Turing đến từ đó: đối với ông, vào thời điểm đó, tính toán là về quy tắc trượt, bảng nhật ký, bút chì và mẩu giấy. Trong suy nghĩ đó, việc viết lại các biểu tượng trên một băng giấy dường như không phải là một sự trừu tượng xấu.

OK, tốt, bạn đang nói (tôi hy vọng!) Nhưng chúng ta không còn ở những năm 1930 nữa vậy tại sao chúng ta vẫn sử dụng cái này? Ở đây, tôi không nghĩ có một lý do cụ thể nào. Ưu điểm của máy Turing là chúng khá đơn giản và chúng tôi rất giỏi trong việc chứng minh mọi thứ về chúng. Mặc dù chính thức chỉ định một chương trình máy Turing để thực hiện một số nhiệm vụ cụ thể là rất tẻ nhạt, nhưng một khi bạn đã thực hiện nó một vài lần, bạn có một trực giác hợp lý về những gì họ có thể làm và bạn không cần phải viết các thông số kỹ thuật chính thức nữa. Mô hình cũng dễ dàng được mở rộng để bao gồm các tính năng tự nhiên khác, chẳng hạn như truy cập ngẫu nhiên vào băng. Vì vậy, chúng là một mô hình khá hữu ích mà chúng tôi hiểu rõ và chúng tôi cũng hiểu khá rõ về cách chúng liên quan đến máy tính thực tế.

Người ta có thể sử dụng các mô hình khác nhưng sau đó người ta sẽ phải thực hiện một số lượng lớn dịch giữa các kết quả cho mô hình mới và khối lượng lớn công việc hiện có trên những gì máy Turing có thể làm. Không ai đã đưa ra một sự thay thế cho các máy Turing có lợi thế đủ lớn để làm cho nó trông giống như một ý tưởng tốt.


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Gilles

56

Bạn đang hỏi một số câu hỏi khác nhau. Hãy để tôi trả lời ngắn gọn từng cái một.

Điều gì là rất quan trọng về mô hình máy Turing?

λ

Vào thời điểm đó, nỗ lực của Turing trong việc xác định khả năng tính toán có vẻ là thỏa đáng nhất. Cuối cùng hóa ra tất cả các mô hình tính toán được mô tả ở trên là tương đương - tất cả chúng đều mô tả cùng một khái niệm về khả năng tính toán. Vì lý do lịch sử, mô hình của Turing ra đời như một cách xác định tính hợp lệ nhất. Mô hình này cũng rất thô sơ và rất dễ làm việc, so với nhiều mô hình khác bao gồm cả những mô hình được liệt kê ở trên.

Khoa học máy tính thông thường dạy các máy Turing như định nghĩa về khả năng tính toán, và sau đó sử dụng chúng để khám phá lý thuyết phức tạp. Nhưng các thuật toán được phân tích liên quan đến một mô hình thực tế hơn được gọi là máy RAM, mặc dù vấn đề này thường được quét dưới thảm như một bí mật cho cognoscenti.

Không phải DFA là một mô hình tốt hơn?

Đây là động lực ban đầu đằng sau bài báo nổi tiếng của Rabin và Scott, Finite automata và các vấn đề quyết định của họ:

Máy Turing được coi là nguyên mẫu trừu tượng của máy tính kỹ thuật số; Tuy nhiên, các công nhân trong lĩnh vực này đã cảm thấy ngày càng nhiều rằng khái niệm về máy Turing quá chung chung để phục vụ như một mô hình chính xác của máy tính thực tế. Người ta biết rằng ngay cả đối với các phép tính đơn giản, không thể đưa ra một ưu tiên giới hạn trên số lượng băng mà máy Turing sẽ cần cho bất kỳ tính toán nào. Chính xác là tính năng này làm cho khái niệm của Turing không thực tế.

Trong vài năm qua, ý tưởng về một máy tự động hữu hạn đã xuất hiện trong tài liệu. Đây là những máy chỉ có một số lượng hữu hạn các trạng thái bên trong có thể được sử dụng cho bộ nhớ và tính toán. Sự hạn chế về độ chính xác dường như mang lại sự gần đúng hơn cho ý tưởng về một cỗ máy vật lý. Tất nhiên, các máy như vậy không thể làm được nhiều như máy Turing, nhưng lợi thế của việc có thể tính toán một hàm đệ quy chung tùy ý là đáng nghi ngờ, vì rất ít các chức năng này xuất hiện trong các ứng dụng thực tế.

Tuy nhiên, hóa ra là trong khi các máy Turing quá mạnh, DFA lại quá yếu . Ngày nay các nhà lý thuyết thích khái niệm tính toán thời gian đa thức , mặc dù khái niệm này cũng không phải không có vấn đề. Điều đó nói rằng, các DFA và NFA vẫn có công dụng của chúng, chủ yếu trong các trình biên dịch (được sử dụng để phân tích từ vựng) và các thiết bị mạng (được sử dụng để lọc cực kỳ hiệu quả).

Không phải mô hình máy Turing quá giới hạn sao?

Các luận đề Church-Turing khẳng định rằng máy Turing nắm bắt được khái niệm vật lý của computability. Yuri Gurevich đã dẫn đầu một nỗ lực chứng minh luận điểm này, bằng cách xây dựng một loại thiết bị tính toán tổng quát hơn được gọi là máy trạng thái trừu tượng và chứng minh rằng chúng có sức mạnh tương đương với máy Turing. Có lẽ những máy này tương tự như mô hình lý tưởng hóa của bạn.


17

Ý nghĩa cơ bản là về ý tưởng tương đương Turing. Mô hình chính xác không quan trọng, miễn là nó tương đương với Turing. Nhưng tốt hơn là sử dụng một mô hình đơn giản hơn để bạn có thể chứng minh sự tương đương với các mô hình khác dễ dàng hơn.

Chính xác hơn, tốt hơn là làm cho việc mô phỏng mô hình này trong các mô hình khác dễ dàng hơn, vì chúng ta biết hầu hết các ngôn ngữ lập trình nâng cao đều tương đương với Turing (với một số giả định về địa chỉ bộ nhớ) và có thể được sử dụng để mô phỏng các mô hình khác.

Có các mô hình khác, chẳng hạn như phép tính lambda và ngữ pháp (viết lại chuỗi). Nhưng việc xác định các hạn chế về không gian và thời gian trong máy Turing sẽ dễ dàng hơn. Bạn cũng có thể sử dụng một ngôn ngữ lập trình như Brainfuck, nhưng nó đòi hỏi những công việc không cần thiết, ví dụ như xác định lại các biểu tượng để đôi khi sửa đổi một cách hợp lý.

Vì vậy, máy Turing dường như khá phù hợp với tôi nếu bạn phải học một mô hình duy nhất cho mọi thứ. Nhưng nếu bạn định học nhiều mô hình, tôi không thấy có gì sai khi học tính toán lambda cho ý tưởng về Turing-tương đương, Brainfuck để chứng minh các mô hình khác tương đương Turing và ngôn ngữ lập trình thực tế (tốt hơn với ngăn xếp có thể truy cập và không có biến ẩn) cho các hạn chế về thời gian / không gian và chỉ coi máy Turing là công cụ để chứng minh những điều này tương đương nếu không có ai bận tâm tìm cách xoay quanh nó. Điều này tự nhiên xảy ra nếu bạn không bắt đầu với việc học lý thuyết cơ bản trước, nhưng chỉ thực hiện khi bạn thấy chúng hữu ích.


1
Về cơ bản tất cả các CPU hiện đại thực sự là các máy đăng ký có RAM. Ngay cả các vi điều khiển hoặc kiến ​​trúc đồ chơi chỉ có một thanh ghi tích lũy thường có một số loại thanh ghi địa chỉ riêng biệt mà bạn có thể tải con trỏ vào, thay vì là một máy tích lũy thuần túy. Nhưng phần cứng thực sự có địa chỉ kích thước cố định và do đó không hoàn thành Turing. IDK nếu mô hình máy đăng ký được sử dụng nhiều trong CS lý thuyết, nhưng đó là cách ngôn ngữ lắp ráp hoạt động trong cuộc sống thực và có thể hữu ích để hiểu về phân tích hoàn hảo vì mọi thứ đều biên dịch thành asm.
Peter Cordes

14

Tôi muốn trả lời phần này của câu hỏi, được thêm vào trong một chỉnh sửa:

"Không phải mô hình kinh điển của tính toán rõ ràng truyền đạt bản chất của tính toán sao?"

TTT

Đó là một trong những điều cốt yếu của khả năng tính toán: Bất kể khái niệm chung nào về khả năng tính toán mà người ta có trong đầu, nên có một cỗ máy duy nhất làm tất cả. Đó chính xác là những gì một máy Turing phổ dụng làm. Đó cũng là những gì máy tính hiện đại làm (theo lý tưởng hóa phi thực tế của việc có bộ nhớ vô hạn).

Một cách khác để giải quyết vấn đề này, điều này trực tiếp giải quyết mối quan tâm của bạn rằng máy Turing không phải là tối thiểu, là chúng chỉ ở mức tối thiểu có thể, theo yêu cầu mà chúng mô tả một khái niệm chung về khả năng tính toán mà tồn tại một máy vạn năng.


Cảm ơn bạn đã nhắc nhở tôi về máy vạn năng. Tôi thấy làm thế nào mà ngụ ý tính toán "hoàn thành".
Alex

5

Máy Turing không có nghĩa là được sử dụng theo nghĩa đen; lập trình trong chúng là điều người ta chỉ làm một lần như một bài tập, để hiểu cách chúng hoạt động.

Họ đặc biệt không được thực hiện để "làm" bất cứ điều gì. Họ không cần phải tối thiểu, họ không cần phải thoải mái khi làm việc cùng.

Chúng chỉ đơn giản là một mô hình của một cỗ máy bạn có thể chế tạo, nó sẽ biểu cảm và mạnh mẽ như bất kỳ cỗ máy nào khác mà bạn có thể chế tạo trong vũ trụ vật lý (theo như chúng ta biết ngày nay).

Chúng được định nghĩa bằng cách Turing theo cách của chúng vì những lý do chính sau:

  • Để có thể chứng minh rằng chúng bao gồm bất kỳ và tất cả các thuật toán mà chúng ta có thể nghĩ ra.
  • Để làm việc trên vấn đề tạm dừng / vấn đề quyết định.
  • Để có thể giảm bất kỳ máy / ngôn ngữ nào khác.

Nó sẽ có thể chọn ngôn ngữ khác? Chắc chắn! Bất kỳ ngôn ngữ hoàn chỉnh nào mà chúng ta biết ngày nay đều có thể được sử dụng. Nhưng nó sẽ khó hơn nhiều để xây dựng nền tảng lý thuyết trên một cỗ máy phức tạp hơn.

Tôi sẽ lập luận rằng chúng thậm chí không phải là một "mô hình tính toán phổ biến"; không ai có thể tính toán bất cứ thứ gì với Máy Turing. Đây là một khái niệm lý thuyết thuần túy, được thực hiện bởi các nhà khoa học máy tính lý thuyết, cho tcs.


Đồng ý trên tất cả các điểm. Sự phổ biến có lẽ chỉ liên quan đến các mô hình tối nghĩa hơn như máy Thue và tính toán Lambda và công cụ của Emil Post.
kẻ lừa đảo người lái xe

Xin lỗi nhưng bạn bỏ lỡ một điểm rất quan trọng là các ngôn ngữ khác sẽ bị rối loạn nghiêm trọng. Một máy Turing xác định những gì bạn thực sự có thể tính toán. Bất kỳ ngôn ngữ nào khác sẽ giới hạn câu hỏi về cách bạn có thể tính toán nó, khiến nó rất khó có khả năng chứng minh những gì bạn có thể tính toán hay không.
Bent

Nếu máy turing được coi là mục tiêu giảm cho các mô hình khác, tại sao chúng không cần phải tối thiểu?
Bergi

@Bent, tôi thừa nhận tôi không hiểu những gì bạn đang nói ngoài những gì tôi đã đề cập với "Nhưng sẽ khó hơn nhiều để xây dựng nền tảng lý thuyết trên một cỗ máy phức tạp hơn." (tức là trên một ngôn ngữ lập trình thực tế như chúng ta biết và sử dụng chúng).
AnoE

Theo mức độ phổ biến, tôi có nghĩa là những gì được sử dụng trong Lý thuyết CS. Một lần nữa, đó là mô hình duy nhất tôi học được (mặc dù tôi nghĩ rằng tôi đã tiếp xúc với một chút tính toán lambda). Tôi chỉ tự hỏi tại sao, có lẽ về mặt sư phạm, nó luôn là người đầu tiên được dạy. Tôi thấy tính thực tế của nó đảm bảo điều này.
Alex

5

Tại sao nó phổ biến, có thể là phổ biến nhất? Bạn phải nhớ rằng Turing đã không tránh khỏi "cỗ máy" này rất nhiều năm trước các máy tính điện tử. TM được vận hành bằng giấy, bút, cao su và cuối cùng nhưng không kém phần quan trọng là bộ não con người. Vì vậy, mọi người đều có thể chạy "tính toán" với máy này. Mọi người đều có nghĩa là một người không bao giờ học máy tính, lập trình lang. Nó rất dễ sử dụng. Khi bạn nghĩ về nó, bạn phát hiện ra một nghịch lý: cỗ máy này là một tổ hợp gần như không có gì nhưng bạn có thể vận hành mọi thứ. Theo tôi, nghịch lý của "hầu như không có gì / so với / mọi thứ" là lý do tại sao nó phổ biến. Tôi sẽ nhận thấy rằng TM không giải thích rõ ràng đệ quy, teh TM chỉ giao dịch với "nhảy". Tính năng đó (nói rõ ràng về đệ quy) có thể là một nguồn gây đau đầu cho các tân binh, ví dụ trong lambda-tính toán, khái niệm về Y-combinator gần như không thể hiểu được; Chính xác hơn, TM rất phổ biến vì nghịch lý "gần như không có gì / so với / mọi thứ" mà không có sự đau đầu đệ quy.

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.