Sự khác biệt giữa một thuật toán, ngôn ngữ và một vấn đề là gì?


40

Có vẻ như trên trang web này, mọi người thường sẽ sửa lỗi cho những người khác vì nhầm lẫn "thuật toán" và "vấn đề". Sự khác biệt giữa những điều này là gì? Làm thế nào để tôi biết khi nào tôi nên xem xét các thuật toán và xem xét các vấn đề? Và làm thế nào để những điều này liên quan đến khái niệm của một ngôn ngữ trong lý thuyết ngôn ngữ chính thức?


Một thuật toán là một cách để giải quyết một vấn đề.
Revierpost

Câu trả lời:


53

Để đơn giản, tôi sẽ bắt đầu bằng cách chỉ xem xét các vấn đề "quyết định", có câu trả lời có / không. Các vấn đề về chức năng hoạt động theo cùng một cách, ngoại trừ thay vì có / không, có một từ đầu ra cụ thể được liên kết với mỗi từ đầu vào.

Ngôn ngữ : một ngôn ngữ chỉ đơn giản là một chuỗi các chuỗi. Nếu bạn có một bảng chữ cái, chẳng hạn như , thì là tập hợp tất cả các từ chỉ chứa các ký hiệu trong . Ví dụ: là tập hợp tất cả các chuỗi nhị phân có độ dài bất kỳ. Một bảng chữ cái không cần phải là nhị phân. Nó có thể là unary, ternary, vvΣΣΣ{0,1}

Một ngôn ngữ trên bảng chữ cái là bất kỳ tập hợp con nào của .ΣΣ

Vấn đề : Một vấn đề là một số câu hỏi về một số đầu vào mà chúng tôi muốn trả lời. Cụ thể, một vấn đề quyết định là một câu hỏi đặt ra: "Đầu vào đã cho của chúng tôi có đáp ứng thuộc tính không?X

Một ngôn ngữ là nhận thức chính thức của một vấn đề. Khi chúng ta muốn lý luận về một vấn đề quyết định, chúng ta thường kiểm tra ngôn ngữ tương ứng. Đối với một vấn đề , ngôn ngữ tương ứng là:X

L={ww là mã hóa của đầu vào cho vấn đề và câu trả lời cho đầu vào cho vấn đề là "Có" yXyX}

Xác định xem câu trả lời cho đầu vào cho vấn đề quyết định là "có" có tương đương với việc xác định liệu mã hóa của đầu vào đó qua bảng chữ cái có bằng ngôn ngữ tương ứng hay không.

Thuật toán : Thuật toán là một cách từng bước để giải quyết vấn đề. Lưu ý rằng có một thuật toán có thể được thể hiện bằng nhiều cách và nhiều ngôn ngữ, và có nhiều thuật toán khác nhau giải quyết bất kỳ vấn đề nào.

Máy Turing : Máy Turing là tương tự chính thức của thuật toán. Một máy Turing trên một bảng chữ cái nhất định, cho mỗi từ, sẽ hoặc sẽ không dừng lại ở trạng thái chấp nhận. Do đó, đối với mỗi Turing Machine , có một ngôn ngữ tương ứng:M

L(M)={wM dừng lại ở trạng thái chấp nhận đầu vào .w}

(Có một sự khác biệt tinh tế giữa các máy Turing tạm dừng trên tất cả các đầu vào và tạm dừng trên các đầu vào có, điều này xác định sự khác biệt giữa các lớp phức tạp và .)RRE

Mối quan hệ giữa các ngôn ngữ và Turing Machines như sau

  1. Mỗi máy Turing chấp nhận chính xác một ngôn ngữ

  2. Có thể có nhiều hơn một Turing Machine chấp nhận một ngôn ngữ nhất định

  3. Có thể không có máy Turing nào chấp nhận một ngôn ngữ nhất định.

Chúng ta có thể nói gần giống nhau về các thuật toán và các vấn đề: mọi thuật toán đều giải quyết một vấn đề duy nhất, nhưng có thể có 0 hoặc nhiều thuật toán giải quyết một vấn đề nhất định.

Độ phức tạp thời gian : Một trong những nguồn gây nhầm lẫn phổ biến nhất giữa các thuật toán và các vấn đề liên quan đến các lớp phức tạp. Phân bổ chính xác có thể được tóm tắt như sau:

  • Một thuật toán độ phức tạp về thời gian
  • Một vấn đề thuộc về một lớp phức tạp

Một thuật toán có thể có độ phức tạp thời gian nhất định. Chúng tôi nói rằng một thuật toán có độ phức tạp giới hạn trên trong trường hợp xấu nhất nếu thuật toán tạm dừng ở hầu hết các bước cho bất kỳ đầu vào nào có kích thước .f(n)f(n)n

Các vấn đề không có thời gian chạy, vì một vấn đề không liên quan đến một thuật toán cụ thể thực sự chạy. Thay vào đó, chúng tôi nói rằng một vấn đề thuộc về một lớp phức tạp, nếu tồn tại một số thuật toán giải quyết vấn đề đó với độ phức tạp thời gian nhất định.

P X X P X X PP,NP,PSPACE,EXPTIME v.v ... đều là các lớp phức tạp. Điều này có nghĩa là chúng chứa các vấn đề, không phải thuật toán. Một thuật toán không bao giờ có thể có trong , nhưng nếu có thuật toán đa thức thời gian giải một bài toán , thì nằm trong . Cũng có thể có một loạt các thuật toán theo thời gian hàm mũ chấp nhận , nhưng vì tồn tại một thuật toán đa thức thời gian chấp nhận , nên nó nằm trong .PXXPXXP


1
Xin vui lòng chỉnh sửa câu trả lời này khi bạn thấy phù hợp.
jmite

Tôi nghĩ sẽ tốt khi đề cập rằng có các loại vấn đề tính toán khác (ví dụ: vấn đề tìm kiếm).
Kaveh

1
Nói ai? Kiểu suy nghĩ đó là một phần lý do tại sao mọi người gặp quá nhiều khó khăn trong việc chính thức hóa và thuật toán trước ý định của Turing Machine. Luận án Church-Turing nói rằng một thuật toán là một máy Turing và ngược lại, và không phải tất cả các máy Turing đều dừng lại.
jmite

4
Anh bạn, đây là câu trả lời tuyệt vời nhất tôi từng thấy. Bạn chỉ cần tóm tắt tất cả các khoa học máy tính trong 1 trang.
CaptainCodeman

1
@ gnasher729 có một định lý nói rằng nó có thể được định nghĩa theo cách xác minh, nhưng định nghĩa thực tế của nó là về độ phức tạp thời gian cho các máy không xác định, do đó, tên NP: nondeterministic đa thức
jmite
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.