답변:
간단하게하기 위해, 나는 예 / 아니오 답변이있는 "결정"문제만을 고려하여 시작하겠습니다. 기능 문제는 예 / 아니오 대신 각 입력 단어와 관련된 특정 출력 단어가 있다는 점을 제외하고는 거의 같은 방식으로 작동합니다.
언어 : 언어는 단순히 문자열 집합입니다. 이 같은 알파벳이 있으면 다음을, 만의 기호가 포함 된 모든 단어의 집합입니다 . 예를 들어, 는 모든 길이의 모든 이진 시퀀스 집합입니다. 그러나 알파벳은 이진일 필요는 없습니다. 단항, 삼항 등일 수 있습니다.Σ ∗ Σ { 0 , 1 } ∗
알파벳 위의 언어 는 하위 집합입니다 .Σ ∗
문제 : 문제는 우리가 대답하고 싶은 입력에 관한 질문입니다. 구체적으로, 결정 문제는 "우리의 주어진 입력이 속성 충족 합니까?
언어는 문제의 공식적인 실현입니다. 의사 결정 문제에 대해 이론적으로 추론하려고 할 때 종종 해당 언어를 검사합니다. 문제 의 경우 해당 언어는 다음과 같습니다.
y X y X } 입력의 인코딩을 문제에 및 입력에 응답 문제에 대한 "예"된다
결정 문제에 대한 입력에 대한 답변이 "예"인지를 결정하는 것은 알파벳을 통한 입력의 인코딩이 대응하는 언어인지를 결정하는 것과 동등하다.
알고리즘 : 알고리즘은 문제를 해결하는 단계별 방법입니다. 알고리즘은 여러 가지 방법으로 다양한 언어로 표현 될 수 있으며 주어진 문제를 해결하는 다양한 알고리즘이 있습니다.
Turing Machine : Turing Machine은 알고리즘의 공식적인 아날로그입니다. 각 단어에 대해 주어진 알파벳 이상의 튜링 머신은 수락 가능한 상태에서 멈추거나 멈추지 않습니다. 따라서 각 Turing Machine 에는 해당 언어가 있습니다.
w } 은 입력 에서 수락 상태로 정지 합니다.
복잡성 클래스 와 의 차이를 정의하는 모든 입력에서 정지하고 yes 입력에서 정지하는 Turing Machines 간에는 미묘한 차이가 있습니다.R E
언어와 Turing Machines의 관계는 다음과 같습니다.
모든 튜링 머신은 정확히 하나의 언어를 허용합니다
특정 언어를 허용하는 둘 이상의 튜링 머신이있을 수 있습니다.
지정된 언어를 허용하는 튜링 머신이 없을 수 있습니다.
우리는 알고리즘과 문제에 대해 거의 같은 것을 말할 수 있습니다. 모든 알고리즘은 단일 문제를 해결하지만 주어진 문제를 해결하는 0 개 또는 많은 알고리즘이있을 수 있습니다.
시간 복잡성 : 알고리즘과 문제 사이의 가장 일반적인 혼란의 원인 중 하나는 복잡성 클래스와 관련이 있습니다. 올바른 할당은 다음과 같이 요약 될 수 있습니다.
알고리즘은 특정 시간 복잡성을 가질 수 있습니다. 알고리즘이 크기 입력에 대해 최대 단계 에서 정지하면 알고리즘에 최악의 상한 복잡도 있다고합니다 .f ( n ) n
문제는 실제로 실행되는 특정 알고리즘과 관련이 없기 때문에 런타임에는 문제가 없습니다. 대신, 우리가 존재하는 경우 문제가, 복잡성 클래스에 속한다는 것을 말하는 어떤 주어진 시간의 복잡성과 그 문제를 해결하는 알고리즘을.
P X X P X X P 등은 모두 복잡한 클래스입니다. 이는 알고리즘이 아니라 문제가 포함되어 있음을 의미합니다. 알고리즘은 될 수 없다 하지만, 주어진 문제의 해결 다항식 시간 알고리즘이 있다면 다음 에 . 또한 수용 지수 시간 알고리즘의 무리가 될 수 하지만, 받아들이는 하나의 다항식 시간 알고리즘이 존재하기 때문에 , 그것은에 .