“문제를 해결하는 가장 간단한 프로그램”에 대한 답이 이론이 있습니까?


10

"컴퓨팅으로 해결할 수있는 문제"에 답하기 위해 계산 성 이론을 개발했습니다. 계산 가능한 문제들에 대해, "내가 가장 간단한 프로그램을 얻는가?"라는 질문에 대한 이론이 있습니까?

나는 계산의 복잡성이 질문에 대답하지 않는다고 생각합니다. 우리가 필요한 시간을 고려한다고 생각합니다 (추상적으로 측정되지만).

알고리즘 정보 이론이 질문에 대답하는지 확실하지 않습니다. 이론은 크기에 대해 이야기하는 것처럼 보입니다. 최소 크기와 가장 단순한 것의 동등성이 나에게는 분명하지 않습니다 (적어도 나에게는 다르게 느낍니다).

이론은 최소한 "단순"또는 "단순"관계를 정의해야한다고 생각합니다.


나는 이제 Kolmogorov Complexity를 조사해야한다고 확신한다. 그러나 질문을 할 때 내 마음 속에 무엇이 있는지 설명하고 싶습니다.

프로그램을 개선 할 때 프로그램의 다른 부분 사이의 불필요한 연결을 줄이려고합니다 (연결이 적거나 약할 수 있도록 부분을 다시 나누는 경우도 있음). 연결이 줄어들 기 때문에 프로그램이 "더 단순 해"집니다. 따라서 질문을 표현할 때 "단순"이라는 단어를 선택하십시오. 프로그램의 크기도 줄어들 가능성이 높지만 주요 목표가 아닌 좋은 부작용입니다. 분명히, 개선 과정은 영원히 갈 수 없습니다. 멈춰야 할 점이 있습니다. 만약 "구조"(또 다른 정의되지 않은 개념에 대한 미안함) 또는 "관계"만 고려한다면, 더 이상 할 수있는 일이 없다는 것을 스스로 확신 할 수 있습니까?

여기 내 복잡성에 대한 더 나은 설명이 포함되어 있습니다.

올라프 Sporns (2007) 복잡성 . Scholarpedia , 2 (10) : 1623



4
Bennett의 논리적 깊이 개념에 관심이있을 수 있습니다. Li와 Vitanyi 's는 7.7 장에 Kolmogorov Complexity에 관한 책을 썼습니다.
Martin Schwarz

2
@ Yuning : 크기가 아니라면 "가장 단순한"은 무엇을 의미합니까?
Rob

1
@Yu Ning : 출력을 생성하는 가장 간단한 프로그램이 아니라 가장 작은 최소 설명 길이를 가진 Turing 머신은 어떻습니까?
로스 스나이더

3
나는 그 질문이 약간 잘못 정의되어 있다고 생각합니다. 또한 매우 간단한 알고리즘이 있지만 정확한지 증명하기는 어렵습니다. 그리고 간단하고 분명한 알고리즘이 있지만 빠르다는 것을 증명하기는 어렵습니다.
Jukka Suomela

답변:


16

이 문제는 알고리즘 정보 이론에서 연구됩니다. 당신이 정의한 것을 Kolmogorov-Chaitin의 복잡성이라고합니다.

http://en.wikipedia.org/wiki/Kolmogorov_complexity

그리고 당신이 요구하는 단순성의 개념은 Blum의 공리로 공식화되는 복잡성 측정의 개념을 통해 공식화 될 수 있습니다.

http://en.wikipedia.org/wiki/Blum_axioms

Kolmogorov의 복잡성을 일반화하여 다른 복잡성 조치를 고려하는 것도 가능합니다. 아래 참조를 참조하십시오. Kolmogorov의 복잡성에 관한 Wikipedia의 기사가이 문제를 해결합니다.

Burgin1990- 일반화 된 kolmogorov 복잡성 및 기타 이중 복잡성 측정 사이버네틱스 및 시스템 분석 볼륨 26, 번호 4, 481-490


@ Jukaka Suomela가 말했듯이 질문은 약간 잘못 정의되어 있습니다. 따라서 나는 그 질문에 대한 완전한 답을 얻을 수 없을지 궁금하다. 그러나이 답변은 유익한 정보이며 질문의 중요한 부분에 해당하므로 여전히 답변으로 태그를 지정합니다.
Yuning

그건 그렇고, 주제의 적용에 대해 더 구체적으로 지적 할 수 있습니까? 특히 프로그램의 공식 사양이있는 경우 사양에서 가장 작은 크기를 찾을 수 있습니까?
Yuning

1

첫 번째 질문에 대한 답은 그렇습니다 . 이론이 있고, 알고리즘 정보 이론이며,이를 우아한 프로그램 (Gregory Chaitin)이라고합니다.

"프로그램이 가장 간단합니까?"에 대한 두 번째 질문은?

대답 이 없습니다. 계산할 수없는 질문이기 때문에 프로그램이 우아한 프로그램이라는 것을 증명할 수는 없습니다.

우아한 프로그램 에 대한 언급을 추가하기 위해 답을 했습니다 .


-1

간단한 코드와 그렇지 않은 코드를 결정하는 다른 종류의 접근 방식이 있습니다.

그러나 슬프게도, 그것을 결정하는 자동 방법이 없습니다. 예를 들어, Kolmogorov Complexity는 재귀 함수로 실패하고 일부 재귀 함수 (논리적 깊이)는 단순하지만 그것에 대한 이해는 그렇게 간단하지 않습니다.

내 경험에 따르면, 우리 팀은 시스템에서 일하고 있었고 Oracle에서 "단순한"절차 (50 줄 이하)를 발견했습니다.이를 이해하려고했지만 완전히 이해하려면 2 개월 (및 여러 회의)이 걸렸습니다. 코드의 복잡성에 의한 것이 아니라 모든 변수의 논리에 있습니다.

코드가 얼마나 간단한 지 결정하는 방법은 "코드를 읽고 이해하는 데 걸리는 시간을 고려하는 것"이라고 생각합니다.

"문제를 해결하는 가장 간단한 프로그램은?" 다음과 같이 나눌 수 있습니다.

a) 코드의 단순성 (명확한 코드)이지만 너무 주관적입니다.

b) 함수의 복잡성, X 문제가 있으면 DX (Delta X) 작업을 해결하여 DX를 X로 추세시켜야합니다.

예를 들어, 내 문제가 (하나) "사과 껍질을 벗기다"고 PHP (및 언어)로 해야하는 경우

내가 운이 좋고 PHP가 function_peel_apple () 함수를 가지고 있다면 그것은 가장 간단한 코드입니다 .X = 1 DX = 1, 그냥 함수를 호출하면됩니다.

반대로, 운이 좋지 않지만 function_peel () 및 function_get_apple () 함수가 있으면 X = 1 (한 문제) 및 DX = 2 (두 작업)입니다.

최악의 경우 함수가 존재하지 않으면 스스로 하나 이상을 만들어야하고 문제를 해결하기 전에 여러 작업을 추가해야합니다. 이제는 복잡한 프로그램입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.