Câu trả lời:
Đây là lời giải thích ngắn gọn nhất:
Hệ thống Turing Complete có nghĩa là một hệ thống trong đó một chương trình có thể được viết sẽ tìm thấy câu trả lời (mặc dù không có gì đảm bảo về thời gian chạy hoặc bộ nhớ).
Vì vậy, nếu ai đó nói "điều mới của tôi là Turing Complete" có nghĩa là về nguyên tắc (mặc dù thường không thực tế), nó có thể được sử dụng để giải quyết bất kỳ vấn đề tính toán nào.
Thỉnh thoảng đó là một trò đùa ... một anh chàng đã viết một trình giả lập Turing Machine bằng vi, vì vậy có thể nói rằng vi là công cụ tính toán duy nhất từng cần trên thế giới.
Đây là lời giải thích đơn giản nhất
Alan Turing đã tạo ra một cỗ máy có thể lấy một chương trình, chạy chương trình đó và hiển thị một số kết quả. Nhưng sau đó anh phải tạo ra các máy khác nhau cho các chương trình khác nhau. Vì vậy, ông đã tạo ra "Máy Turing phổ dụng" có thể lấy bất kỳ chương trình nào và chạy nó.
Ngôn ngữ lập trình tương tự như các máy đó (mặc dù ảo). Họ tham gia các chương trình và điều hành chúng. Bây giờ, một ngôn ngữ lập trình được gọi là "Turing hoàn thành", nếu ngôn ngữ đó có thể chạy bất kỳ chương trình nào (không phân biệt ngôn ngữ) mà máy Turing có thể chạy đủ thời gian và bộ nhớ.
Ví dụ: giả sử có một chương trình lấy 10 số và thêm chúng. Máy Turing có thể dễ dàng chạy chương trình này. Nhưng bây giờ hãy tưởng tượng rằng vì một số lý do, ngôn ngữ lập trình của bạn không thể thực hiện cùng một phép cộng. Điều này sẽ làm cho nó "Turing không đầy đủ" (có thể nói). Mặt khác, nếu nó có thể chạy bất kỳ chương trình nào mà máy Turing phổ dụng có thể chạy, thì Turing đã hoàn tất.
Hầu hết các ngôn ngữ lập trình hiện đại (vd dữ liệu và như vậy.
Cập nhật: Bạn có thể tìm hiểu thêm về bài đăng trên blog của tôi: "JavaScript đã hoàn tất" - Giải thích
Từ wikipedia :
Tính đầy đủ của Turing, được đặt theo tên của Alan Turing, có ý nghĩa quan trọng ở chỗ mọi thiết kế hợp lý cho một thiết bị máy tính tiên tiến cho đến nay đều có thể được mô phỏng bằng một máy Turing phổ dụng - một quan sát được gọi là luận án Church-Turing. Do đó, về nguyên tắc, một cỗ máy có thể hoạt động như một máy Turing phổ dụng có thể thực hiện bất kỳ phép tính nào mà bất kỳ máy tính lập trình nào khác có khả năng. Tuy nhiên, điều này không liên quan gì đến nỗ lực viết chương trình cho máy, thời gian cần thiết để máy thực hiện phép tính hoặc bất kỳ khả năng nào mà máy có thể sở hữu không liên quan đến tính toán.
Mặc dù các máy hoàn chỉnh Turing thực sự rất khó có thể về mặt vật lý, vì chúng yêu cầu lưu trữ không giới hạn, tính hoàn chỉnh của Turing thường được quy cho một cách lỏng lẻo là các máy vật lý hoặc ngôn ngữ lập trình sẽ phổ biến nếu chúng có dung lượng lưu trữ không giới hạn. Tất cả các máy tính hiện đại là Turing - hoàn thành theo nghĩa này.
Tôi không biết làm thế nào bạn có thể phi kỹ thuật hơn thế, ngoại trừ bằng cách nói "hoàn thành nghĩa là" có thể trả lời vấn đề tính toán được cung cấp đủ thời gian và không gian "".
Một ngôn ngữ hoàn chỉnh Turing là ngôn ngữ có thể thực hiện bất kỳ tính toán nào. Các luận đề Church-Turing bang rằng bất kỳ tính toán performable có thể được thực hiện bởi một máy Turing. Máy Turing là một máy có bộ nhớ truy cập ngẫu nhiên vô hạn và một 'chương trình' hữu hạn, ra lệnh khi nào nên đọc, viết và di chuyển qua bộ nhớ đó, khi nào nó sẽ kết thúc với một kết quả nhất định và nó sẽ làm gì tiếp theo. Đầu vào của máy Turing được đặt vào bộ nhớ trước khi khởi động.
Máy A Turing có thể đưa ra quyết định dựa trên những gì nó thấy trong bộ nhớ - Các 'ngôn ngữ' đó chỉ hỗ trợ +
, -
, *
, và /
trên các số nguyên không Turing hoàn thành bởi vì nó không thể làm cho một sự lựa chọn dựa trên đầu vào của nó, nhưng một máy Turing có thể.
Máy Turing có thể chạy mãi mãi - Nếu chúng tôi đã sử dụng Java, Javascript hoặc Python và loại bỏ khả năng thực hiện bất kỳ loại vòng lặp, GOTO hoặc gọi hàm nào, thì nó sẽ không hoàn thành Turing vì nó không thể thực hiện tính toán tùy ý không bao giờ kết thúc Coq là một người ủng hộ định lý không thể diễn tả các chương trình không kết thúc, vì vậy nó không hoàn thành.
Máy Turing có thể sử dụng bộ nhớ vô hạn - Một ngôn ngữ giống hệt Java nhưng sẽ chấm dứt một khi nó sử dụng hơn 4 Gigabyte bộ nhớ sẽ không hoàn thành Turing, vì máy Turing có thể sử dụng bộ nhớ vô hạn. Đây là lý do tại sao chúng ta thực sự không thể xây dựng một máy Turing, nhưng Java vẫn là ngôn ngữ hoàn chỉnh Turing vì ngôn ngữ Java không hạn chế ngăn nó sử dụng bộ nhớ vô hạn. Đây là một lý do các biểu thức chính quy không hoàn thành.
Máy Turing có bộ nhớ truy cập ngẫu nhiên - Một ngôn ngữ chỉ cho phép bạn làm việc với bộ nhớ thông qua push
và các pop
thao tác với ngăn xếp sẽ không hoàn thành Turing. Nếu tôi có một 'ngôn ngữ' đọc một chuỗi một lần và chỉ có thể sử dụng bộ nhớ bằng cách đẩy và bật từ ngăn xếp, nó có thể cho tôi biết liệu mọi (
chuỗi trong chuỗi có )
sau đó hay không bằng cách đẩy khi nhìn thấy (
và bật lên khi nhìn thấy)
. Tuy nhiên, nó không thể cho tôi biết nếu mọi thứ đều (
có )
sau này và mọi thứ [
sẽ có ]
sau này (lưu ý ([)]
đáp ứng tiêu chí này nhưng ([]]
không). Một máy Turing có thể sử dụng bộ nhớ truy cập ngẫu nhiên của nó để theo dõi()
và[]
Riêng biệt, nhưng ngôn ngữ này chỉ có một ngăn xếp thì không thể.
Máy Turing có thể mô phỏng bất kỳ máy Turing nào khác - Máy Turing, khi được cung cấp một 'chương trình' thích hợp, có thể lấy 'chương trình' của máy Turing khác và mô phỏng nó trên đầu vào tùy ý. Nếu bạn có một ngôn ngữ bị cấm triển khai trình thông dịch Python, thì nó sẽ không hoàn thành Turing.
Nếu ngôn ngữ của bạn có bộ nhớ truy cập ngẫu nhiên vô hạn, thực thi có điều kiện và một số hình thức thực hiện lặp lại, có lẽ Turing đã hoàn tất. Có nhiều hệ thống kỳ lạ hơn mà vẫn có thể đạt được mọi thứ mà một máy Turing có thể làm cho chúng hoàn thành Turing:
cyclic tag system
và không universal cyclic tag system
. Do đó - bài viết không chứng minh tính hoàn chỉnh của SQL. (Hoặc tôi đã hiểu nhầm điều gì đó)
Về cơ bản, Turing-đầy đủ là một yêu cầu ngắn gọn, đệ quy không giới hạn.
Thậm chí không bị ràng buộc bởi bộ nhớ.
Tôi nghĩ về điều này một cách độc lập, nhưng đây là một số thảo luận về khẳng định. Định nghĩa của tôi về LSP cung cấp nhiều bối cảnh hơn.
Các câu trả lời khác ở đây không định nghĩa trực tiếp bản chất cơ bản của tính đầy đủ của Turing.
while (p) { /* ... */ }
. "Tôi nói rõ sự tương đương giữa đệ quy tổng quát và khả năng thực hiện bất kỳ tính toán nào có thể." Luận án của Giáo hội là một vấn đề rất khác biệt và thực sự nên được thảo luận riêng.
Turing Complete có nghĩa là nó ít nhất mạnh bằng Turing Machine . Điều này có nghĩa là mọi thứ có thể được tính toán bằng Máy Turing đều có thể được tính toán bằng hệ thống Turing Complete.
Chưa ai tìm thấy một hệ thống nào mạnh hơn Turing Machine. Vì vậy, hiện tại, việc nói một hệ thống là Turing Complete cũng giống như nói hệ thống này mạnh như bất kỳ hệ thống máy tính nào được biết đến (xem Luận án Church-Turing ).
Nói một cách đơn giản nhất, một hệ thống hoàn chỉnh Turing có thể giải quyết mọi vấn đề tính toán có thể có.
Một trong những yêu cầu chính là kích thước của Scratchpad không bị ràng buộc và có thể tua lại để truy cập ghi trước vào Scratchpad.
Do đó trong thực tế không có hệ thống nào là Turing-Complete.
Thay vào đó, một số hệ thống gần đúng tính đầy đủ của Turing bằng cách mô hình hóa bộ nhớ không giới hạn và thực hiện bất kỳ tính toán nào có thể phù hợp với bộ nhớ của hệ thống.
Tôi nghĩ tầm quan trọng của khái niệm "Turing Complete" nằm ở khả năng xác định một máy tính (không nhất thiết phải là "máy tính" cơ / điện) có thể giải mã các quy trình của nó thành các hướng dẫn "đơn giản", bao gồm đơn giản và đơn giản hơn hướng dẫn, rằng một máy Universal có thể giải thích và sau đó thực thi.
Tôi đánh giá cao The Annotated Turing
@Mark tôi nghĩ những gì bạn đang giải thích là sự pha trộn giữa mô tả của Universal Turing Machine và Turing Complete.
Một cái gì đó là Turing Complete, theo nghĩa thực tế, sẽ là một máy / quy trình / tính toán có thể được viết và biểu diễn dưới dạng một chương trình, được thực hiện bởi Universal Machine (máy tính để bàn). Mặc dù nó không được xem xét về thời gian hoặc lưu trữ, như được đề cập bởi những người khác.
Những gì tôi hiểu bằng những từ đơn giản:
Turing Complete: Một ngôn ngữ lập trình / chương trình có thể thực hiện tính toán, là Turing hoàn chỉnh.
Ví dụ :
Bạn có thể thêm hai số bằng cách chỉ sử dụng HTML . (Ans là ' Không ', bạn phải sử dụng javascript để thực hiện bổ sung.), Do đó HTML không phải là Turing Complete.
Các ngôn ngữ như Java, C ++, Python, Javascript, Solidity cho Ethereum, v.v. là Turing Complete vì bạn có thể thực hiện tính toán như thêm hai số bằng ngôn ngữ này.
Hi vọng điêu nay co ich.
Nó hoàn thành nếu nó có thể kiểm tra và phân nhánh (có 'nếu')
Một máy Turing yêu cầu bất kỳ chương trình nào cũng có thể thực hiện kiểm tra điều kiện. Đó là điều cơ bản.
Hãy xem xét một cuộn piano chơi. Đàn piano của người chơi có thể chơi một bản nhạc rất phức tạp, nhưng không bao giờ có logic có điều kiện trong âm nhạc. Đó là Turing Complete.
Logic có điều kiện là cả sức mạnh và sự nguy hiểm của một cỗ máy là Turing Complete.
Cuộn piano được đảm bảo dừng lại mỗi lần. Không có sự đảm bảo nào cho một TM. Đây được gọi là vấn đề tạm dừng.
Như Waylon Flinn đã nói :
Turing Complete có nghĩa là nó ít nhất mạnh bằng Turing Machine.
Tôi tin rằng điều này không chính xác, một hệ thống hoàn thành Turing nếu nó chính xác như Turing Machine, tức là mọi tính toán được thực hiện bởi máy đều có thể được thực hiện bởi hệ thống, nhưng mọi tính toán được thực hiện bởi hệ thống đều có thể được thực hiện bởi máy Turing .
Trong các thuật ngữ ngôn ngữ thực tế quen thuộc với hầu hết các lập trình viên, cách thông thường để phát hiện tính hoàn chỉnh của Turing là nếu ngôn ngữ cho phép hoặc cho phép mô phỏng các câu lệnh lồng nhau trong khi các câu lệnh (trái ngược với kiểu Pascal cho các câu lệnh, với giới hạn trên cố định).
Có thể một cơ sở dữ liệu quan hệ đầu vào vĩ độ và kinh độ của địa điểm và đường, và tính toán con đường ngắn nhất giữa chúng - không. Đây là một vấn đề cho thấy SQL chưa hoàn thành.
Nhưng C ++ có thể làm điều đó, và có thể làm bất kỳ vấn đề. Nó là như vậy.