간단히 말해서 : 알고리즘은 주어진 문제에 해결책이 있다는 건설적 증거의 구성 적 부분입니다. 이 정의의 동기는 프로그램이 문제를 해결하지만 관심이있을 경우에만 관심이 있다는 점을 고려하여 프로그램과 증명 간의 Curry-Howard 동 형사상입니다. 이 정의는 더 추상화를 허용하고, 예를 들어 유한 특성과 관련하여, 관련 될 수있는 도메인의 종류에 관한 일부 문을 열어 둔다.
경고 . 질문에 대답하기위한 적절한 공식적인 접근법을 찾으려고 노력하고 있습니다. 나는 그것이 필요하다고 생각하지만, 지금까지 응답 한 사용자 (자신을 포함하고 일부는 다른 게시물에서 그것에 대해 다소 명시 적이 지 않은) 사용자 중 누구도 문제를 올바르게 개발할 수있는 올바른 배경을 가지고 있지 않은 것 같습니다. 건설적인 수학, 증명 이론, 유형 이론 및 증명과 프로그램 간의 Curry-Howard 동형 과 같은 결과 . 나는 내가 믿거 나 믿었던 모든 스 니펫으로 최선을 다하고 있으며이 답변의 한계를 너무 잘 알고 있습니다. 나는 대답이 어떻게 보일지에 대한 힌트를 줄 수 있기를 바랍니다. 공식적으로 (아마도) 틀린 점이 있으면 지금 의견이나 이메일로 알려주세요.
몇 가지 문제 식별
알고리즘을 고려하는 표준 방법은 알고리즘이 메모리에 제한이없는 것을 포함하여 일부 컴퓨팅 장치에 대해 임의의 유한하게 지정된 프로그램 이라고 진술하는 것 입니다. 언어는 컴퓨터 기계 언어 일 수도 있습니다. 실제로 Turing 컴플리트 컴퓨팅 장치에 대한 모든 프로그램을 고려하면 충분합니다 (메모리 제한이 없음을 의미 함). 알고리즘이 해석 컨텍스트에 대한 세부 사항에 의존하는 형태로 이론적으로 표현되어야한다는 의미에서 모든 알고리즘 프리젠 테이션을 제공하지는 않을 수 있습니다. 모든 것이 일부 인코딩까지 정의되어 있기 때문입니다. 그러나 계산해야 할 모든 것을 계산하므로 인코딩에 이르기까지 모든 알고리즘이 포함됩니다.
π
π 거의 모든 알고리즘이 흥미롭지 않다고아마도 거의 모든 수학적인 의미에서. 그러나 그것은 더 정밀한 정의를 요구할 것입니다.
따라서 실제 질문은 의미있는 알고리즘이 무엇인지 아는 것입니다. 답은 의미있는 알고리즘이 문제를 해결하는 알고리즘이며, 그 문제에 대한 "솔루션", "답변"을 단계적으로 계산합니다. 알고리즘이 해결하는 문제와 관련되어 있으면 흥미 롭습니다.
공식적인 문제가 주어지면 문제를 해결하는 알고리즘을 얻는 방법은 무엇입니까? 명시 적이든 암시 적이든, 알고리즘은 문제에 대한 해결책이 존재한다는 아이디어와 관련이 있으며, 이는 올바른 것으로 입증 될 수 있습니다. 우리의 증명 기술이 정확한지 여부는 또 다른 문제이지만, 우리는 적어도 자신을 설득하려고 노력합니다. 실제로 우리가해야 할 일인 (그리고 대부분의 수학에 대해 매우 수용 가능한 공리 학적 제약 인) 건설적인 수학으로 자신을 제한한다면, 솔루션의 존재를 증명하는 방법은 실제로 구조물을 나타내는 증명 단계를 거치는 것입니다 솔루션을 나타내는 다른 단계를 포함하여 솔루션을 나타냅니다.
모든 프로그래머는 다음과 같이 생각합니다 : 만약 내가 그런 식으로 데이터를 피들 링하면 Sesame의 정리 때문에 올바른 속성을 가진이 위젯을 얻습니다.이 foo-preserving 변환을 실행하면 원하는 대답을 얻습니다 . 그러나 그 증거는 일반적으로 비공식적이며, 위성이 왜 화성에서 지하를 선회하려고했는지 설명하는 모든 세부 사항을 다루지는 않습니다. 우리는 많은 추론을 수행하지만 실제로 솔루션을 구축하는 구성적인 부분 만 유지하고 문제를 해결하는 알고리즘으로 컴퓨터 언어로 설명합니다.
흥미로운 알고리즘 (또는 프로그램)
이 모든 것은 다음과 같은 아이디어를 소개하는 것이 었습니다.이 아이디어는 현재의 많은 연구의 대상입니다 (나는 전문가가 아닙니다). 여기에 사용 된 " 흥미로운 알고리즘 " 이라는 개념은 보다 정확한 정의를 위해 비공식적 인 자리 표시 자로 소개 된 것입니다.
흥미로운 알고리즘은 주어진 문제에 해결책이 있다는 건설적인 증거의 구성적인 부분입니다 . 즉, 증거는 단순히 예를 들어 모순에 의해 단순히 존재를 증명하기보다는 솔루션을 보여 주어야 함을 의미합니다. 자세한 내용은 참조 직관 논리 와 구성주의 수학은.
이것은 물론 매우 제한적인 정의로, 내가 재미있는 알고리즘이라고 부르는 것만 고려합니다. 따라서 거의 모든 것을 무시합니다. 그러나 알고리즘에 관한 모든 교과서도 마찬가지입니다. 그들은 흥미로운 것들 중 일부만 가르치려고 노력합니다.
문제의 모든 매개 변수 (입력 데이터)가 주어지면 지정된 결과를 단계별로 얻는 방법을 알려줍니다. 전형적인 예는 방정식의 해상도입니다 (이름 알고리즘 은 실제로 일부 방정식의 해상도를 연구 한 페르시아 수학자 Muḥammad ibn Mūsā al-Khwārizmī 의 이름에서 파생 됨 ). 증명의 일부는 알고리즘에서 계산 된 일부 값에 일부 속성이 있지만 이러한 부분을 알고리즘 자체에 유지할 필요는 없음을 확인하는 데 사용됩니다.
물론, 이것은 계산 된 데이터, 허용되는 기본 계산 단계 및 사용되는 공리를 설정하는 공식화 된 논리 프레임 워크 내에서 이루어져야합니다.
팩토리얼 예제로 돌아가서 사소한 알고리즘이지만 알고리즘으로 해석 될 수 있습니다. 정규 계승 함수는 일부 산술 프레임 워크와 정수 n이 주어지면 첫 번째 n 정수의 곱인 숫자가 있다는 증거에 해당합니다. 이것은 계승 계산과 마찬가지로 매우 간단합니다. 다른 기능에는 더 복잡 할 수 있습니다.
이제 모든 정수에 대해 사실이 아니지만 (일부 유한 값의 경우에 해당 할 수 있음) 가정 할 수 있다고 가정하고 계승을 표로하기로 결정했다면, 당신이하는 모든 것은 공리에 새로운 정수는 각 정수에 대한 값을 나타내므로 더 이상 아무것도 계산할 필요가 없습니다.
그러나 공리 체계는 유한해야한다. 그리고 계승에 대한 정수 값은 무한대입니다. 따라서 무한 기능을 axiomatize하면 (즉, 무한 도메인에 정의 된) 유한 공리 시스템에 문제가 있습니다. 이는 모든 정수에 대해 테이블 조회를 구현할 수 없다는 사실에서 계산적으로 변환됩니다. 그것은 알고리즘에 대한 일반적인 유한 요구 사항을 죽일 것입니다 (그러나 종종 제시되는 것만 큼 엄격해야합니까?).
모든 경우를 처리하기 위해 유한하게 정의 된 공리 생성기를 갖도록 결정할 수 있습니다. 이것은 필요에 따라 배열을 초기화하기 위해 알고리즘에 표준 계승 프로그램을 포함시키는 정도에 달합니다. 이것을 프로그래머의 메모 라고 합니다. 이것은 실제로 미리 계산 된 테이블과 가장 가까운 값입니다. 테이블이 필요할 때마다 지연 평가 모드로 실제로 생성된다는 사실을 제외하고는 미리 계산 된 테이블을 가지고 있음을 이해할 수 있습니다 . 이 논의는 아마도 좀 더 공식적인 관리가 필요할 것입니다.
복잡성 또는 성능 분석을 수행하기 위해 원하는대로 기본 작업을 정의하고 (공식 시스템과의 일관성 내에서) 알고리즘에 사용될 때 원하는 비용을 할당 할 수 있습니다. 그러나 실제로 알고리즘 (예 : 컴퓨터 또는 두뇌)을 구현하는 구체적인 시스템이 이러한 비용 사양을 고려할 수없는 경우 분석은 지적으로 흥미로울 수 있지만 실제 세계에서는 실제로 사용할 수는 없습니다.
21000
흥미로운 프로그램
이 논의는 프로그램과 증명 사이 의 Curry-Howard 동 형사상 과 같은 결과와보다 적절하게 연결되어야합니다
. 어떤 프로그램이 실제로 무언가의 증거라면, 모든 프로그램은 위 정의의 의미에서 흥미로운 프로그램으로 해석 될 수 있습니다.
그러나 나의 (제한된) 이해로,이 동형은 적절한 타이핑 시스템에서 잘 타이핑 할 수있는 프로그램으로 제한되는데, 여기서 타입은 공리 이론의 제안에 해당합니다. 따라서 모든 프로그램이 흥미로운 프로그램으로 인정 될 수있는 것은 아닙니다. 내 생각에 알고리즘이 문제를 해결해야한다고 생각합니다.
이것은 대부분의 "무작위로 생성 된"프로그램을 제외 할 것입니다.
또한 "흥미로운 알고리즘"이 무엇인지에 대한 다소 개방적인 정의입니다. 흥미로운 것으로 식별 할 수있는 식별 된 유형 시스템이 있기 때문에 흥미로운 것으로 볼 수있는 모든 프로그램은 확실히 그렇게됩니다. 그러나 지금까지 입력 할 수 없었던 프로그램은보다 발전된 유형의 시스템으로 입력 할 수있게되어 흥미로워 질 수있었습니다. 더 정확하게는 항상 흥미로 웠지만 올바른 유형 시스템에 대한 지식이 부족하여 알 수 없었습니다.
그러나,이 같은 실행과 같은 일부 람다 식 것으로 알려져 있기 때문에 모든 프로그램, typeable있는 것으로 알려져있다 Y의 콤비가 , 사운드 타입 시스템에 입력 할 수 없습니다 .
이 견해는 일부 공리 증거 시스템과 직접 연관 될 수있는 프로그래밍 형식에만 적용됩니다. Turing Machine과 같은 저수준 계산 형식으로 어떻게 확장 될 수 있는지 모르겠습니다. 그러나 알고리즘과 계산은 종종 문제와 솔루션을 인코딩하는 게임이기 때문에 ( 람다 계산법으로 인코딩 된 산술 생각 ) 알고리즘의 인코딩으로 표시 될 수있는 공식적으로 정의 된 계산도 알고리즘이라고 생각할 수 있습니다. 이러한 인코딩은 아마도 Turing Machines과 같은 저수준 형식으로 표현 될 수있는 것의 아주 작은 부분만을 사용합니다.
이 접근법의 한 가지 관심사는 실제 인코딩 문제, 계산 영역의 "물리적 표현성"에 대해보다 추상적이고 독립적 인 알고리즘 개념을 제공한다는 것입니다. 예를 들어 계산적으로 올바른 방법을 사용하는 한 무한한 객체가있는 도메인을 고려할 수 있습니다.