콜모고로프 복잡도는 주어진 문자열을 생성하는 가장 짧은 프로그램의 길이로 정의되는 정보 이론의 개념이다. 튜링 완전한 서술 언어에서 문자열을 서술하는 가장 짧은 프로그램의 길이를 의미하며, 문자열의 '복잡도'를 측정하는 데 사용된다. 불변성 정리에 따라 서술 언어의 선택은 콜모고로프 복잡도에 큰 영향을 미치지 않는다. 이 복잡도는 계산 불가능하며, 문자열의 압축 가능성과 무작위성을 정의하는 데 사용된다. 또한 차이틴의 불완전성 정리에 따르면, 일정 수준 이상의 복잡도를 갖는 문자열의 복잡도는 형식적으로 증명할 수 없다. 시간 제한 콜모고로프 복잡도는 이 개념의 변형으로, 일방향 함수의 존재와 관련이 있을 수 있다는 가설이 있다. 콜모고로프 복잡도는 정보 엔트로피, 무작위성, 정지 문제 등과 밀접한 관련이 있으며, 데이터 압축, 정보 보안, 인공지능, 생물 정보학 등 다양한 분야에서 연구 및 활용된다.
더 읽어볼만한 페이지
알고리즘 정보 이론 - 베리의 역설 베리의 역설은 유한한 단어로 자연수를 정의하려는 시도에서 발생하는 자기모순적인 역설로, '정의할 수 있다'라는 개념의 모호성에서 비롯되며, 의미 계층화 도입으로 해결을 시도하지만, 불완전성 정리, 콜모고로프 복잡도 등과 연관되어 논의된다.
계산 복잡도 이론 - 양자 컴퓨터 양자 컴퓨터는 양자역학적 현상을 이용하여 정보를 처리하는 컴퓨터로, 큐비트를 통해 0과 1을 동시에 표현하여 특정 연산에서 기존 컴퓨터보다 빠른 속도를 보이며 암호 해독, 신약 개발 등 다양한 분야에 혁신을 가져올 것으로 기대된다.
계산 복잡도 이론 - 선형 시간 선형 시간은 알고리즘의 실행 시간이 입력 크기에 비례하여 증가하는 것을 의미하며, O(n)의 시간 복잡도를 가지는 알고리즘 분석의 중요한 척도로 활용된다.
계산 가능성 이론 - 처치-튜링 논제 처치-튜링 논제는 모든 효과적인 계산 과정이 튜링 기계로 수행될 수 있다는 가설로, 알고리즘과 계산 가능성의 본질에 대한 논의를 촉발하며 컴퓨터 과학과 철학 분야에서 활발히 연구되고 있다.
계산 가능성 이론 - 튜링 기계 튜링 기계는 앨런 튜링이 제시한 계산 모델로, 테이프 위에서 기계적으로 작동하며, 유한한 상태, 테이프, 헤드, 명령 표를 통해 작동하고, 계산 가능성과 알고리즘의 한계를 연구하는 데 사용된다.
콜모고로프 복잡도
개요
분야
정보 이론, 계산 이론
다른 이름
알고리즘 복잡도, 설명 길이, Kolmogorov-Chaitin complexity
정의
주어진 대상을 설명하는 가장 짧은 프로그램의 길이
창시자
안드레이 콜모고로프
상세 내용
정의
어떤 객체 (문자열, 파일 등) x의 콜모고로프 복잡도는 그 객체를 출력하는 가장 짧은 프로그램 p의 길이 |p|로 정의됨. 여기서 프로그램은 특정한 프로그래밍 언어 또는 튜링 기계로 작성됨.
특징
계산 불가능 (uncomputable) 객체의 무작위성을 측정하는 데 사용될 수 있음 정보 이론, 철학, 통계학 등 다양한 분야에 응용됨
어떤 문자열의 콜모고로프 복잡도는 튜링 완전한 서술 언어에서 해당 문자열을 출력하는 가장 짧은 프로그램의 길이다. 여기서 서술 언어가 무엇인지는 불변성 정리에 의해 크게 중요하지 않다.
문자열의 '서술'(description)은 프로그래밍 언어에서 그 문자열을 출력(output)하는 프로그램을 예로 들 수 있으며, 이 정의는 더 일반화될 수 있다. 문자열 s의 콜모고로프 복잡도 K(s)는 어떤 언어에서 s를 서술하는 가장 짧은 프로그램(글)의 길이, 즉 최단 서술 d(s)의 길이로 정의된다.
엄밀하게, 유한 길이 문자열 ''x''에 대한 만능 계산기 ''u''에서의 콜모고로프 복잡성은 다음 식으로 정의된다.
:
여기서 ''p''는 계산기 ''u''를 위한 프로그램이고, ''u''(''p'')는 ''p''를 실행했을 때 출력되는 문자열이다. ''l''(''p'')는 프로그램의 길이를 나타낸다. 프로그램은 입력을 받지 않고 항상 정해진 출력을 반환한다. 만능 계산기는 만능 튜링 머신과 동등한 능력을 가진 계산기로, C 언어 등 일반적인 프로그래밍 언어를 해석하고 실행하는 처리계라고 생각할 수 있다.
2. 1. 직관적인 예
예를 들어 32개의 문자로 이루어진 다음 두 문자열을 생각해 보자.
:abababababababababababababababab
:4c1j5b2p0cv4w1x8rx2y39umgw5q85s7
첫 번째 문자열은 "ab를 16번 쓰기"라는 짧은 영어 표현(17자)으로 나타낼 수 있지만, 두 번째 문자열은 문자열 자체를 쓰는 것보다 더 간단한 표현을 찾기 힘들다(38자). 따라서 첫 번째 문자열이 두 번째 문자열보다 '복잡도가 낮다'고 생각할 수 있다.
전자는 "01의 30회 반복"으로 11글자로 설명할 수 있지만, 후자는 그러한 간단한 설명이 어려워 보인다. 따라서 전자가 더 간단하고, 후자가 더 복잡하다고 느낄 수 있다.[2]
이처럼 문자열을 언어로 설명했을 때, 짧게 표현 가능한 문자열이 있는 반면 압축하기 어려운 문자열도 존재한다. 이러한 직관을 바탕으로, 문자열의 설명 길이를 통해 복잡성을 정의할 수 있다.[2]
2. 2. 형식적인 정의
만능 튜링 머신을 이용하여 문자열을 출력하는 가장 짧은 프로그램의 길이를 콜모고로프 복잡도로 정의한다. 최소 설명의 길이는 설명 언어의 선택에 따라 달라지지만, 불변성 정리에 의해 그 차이는 상수에 불과하다.
예를 들어 다음과 같은 두 개의 32자 문자열을 생각해보자.
:abababababababababababababababab
:4c1j5b2p0cv4w1x8rx2y39umgw5q85s7
첫 번째 문자열은 "write ab 16 times"라는 짧은 영어 표현(17자)으로 나타낼 수 있지만, 두 번째 문자열은 문자열 자체를 쓰는 것 외에 더 간단한 표현을 찾기 힘들다(38자). 따라서 첫 번째 문자열이 두 번째 문자열보다 '복잡도가 낮다'고 할 수 있다.
형식적으로, 어떤 튜링 완전한 서술 언어가 있을 때 문자열의 콜모고로프 복잡도는 그 언어에서 해당 문자열을 출력하는 가장 짧은 프로그램의 길이이다. 문자열 ''s''에 대한 설명 ''d''(''s'')가 최소 길이(즉, 가장 적은 비트 사용)이면, ''s''의 '''최소 설명'''이라고 하며, ''d''(''s'')의 길이(즉, 최소 설명의 비트 수)는 ''s''의 '''콜모고로프 복잡도'''이며, ''K''(''s'')로 쓴다.
:''K''(''s'') = |''d''(''s'')|.
예를 들어, 위의 두 번째 문자열은 다음 의사 코드로 출력할 수 있다.
'''function''' GenerateString2()
'''return''' "4c1j5b2p0cv4w1x8rx2y39umgw5q85s7"
반면 첫 번째 문자열은 더 짧은 의사 코드로 출력할 수 있다.
'''function''' GenerateString1()
'''return''' "ab" × 16
이처럼 기술 언어 ''L''에서의 문자열 ''x''의 모든 기술 중 최소 길이를 갖는 기술을 찾아낼 수 있다면, 그 길이가 ''L''에서의 ''x''의 콜모고로프 복잡성이 된다.
콜모고로프 복잡성에는 '일반' 복잡도와 '접두사 없는' 복잡도, 두 가지 정의가 있다. 일반 복잡도는 임의의 프로그램의 최소 설명 길이이며, 로 표기되고, 접두사 없는 복잡도는 접두사 없는 코드로 인코딩된 임의의 프로그램의 최소 설명 길이이며, 로 표기된다. 일반 복잡도가 더 직관적이지만, 접두사 없는 복잡도를 연구하기가 더 쉽다.[4]
일반 복잡도의 한 가지 문제는 라는 것이다. 직관적으로 말하면, 연결된 문자열만 보고 출력 문자열을 어디에서 나눌지 일반적인 방법이 없기 때문이다. 또는 의 길이를 지정하여 나눌 수 있지만, 그렇게 하려면 개의 추가 기호가 필요하다. 실제로, 임의의 에 대해 를 만족하는 가 존재한다.[4]
일반적으로, 일반 복잡도를 사용한 부등식은 한쪽에 와 같은 항을 갖는 반면, 접두사 없는 복잡도를 사용한 동일한 부등식은 만 갖는다.
일반 복잡도의 주요 문제는 프로그램에 추가적인 무언가가 몰래 들어가 있다는 것이다. 프로그램은 코드뿐만 아니라 자체 길이도 나타낸다. 특히, 프로그램 는 자체 길이에 의해 최대 까지의 이진 숫자를 나타낼 수 있다. 다른 말로 하면, 단어가 끝나는 위치를 나타내기 위해 종료 기호를 사용하는 것과 같아서, 2개의 기호가 아닌 3개의 기호를 사용하는 셈이다. 이 결함을 해결하기 위해 접두사 없는 콜모고로프 복잡도를 도입한다.[5]
'''접두사 없는 튜링 기계'''는 접두사 없는 코드가 있는 튜링 기계로 정의하며, 튜링 기계는 코드에서 어떤 문자열도 한 방향으로 읽을 수 있고 마지막 기호를 읽는 즉시 읽기를 멈출 수 있다. 그 후 작업 테이프에서 계산을 하고 쓰기 테이프에 쓸 수 있지만, 더 이상 읽기 헤드를 움직일 수 없다.
이는 ''K''를 설명하는 다음과 같은 공식적인 방법을 제공한다.[6]
읽기 테이프(한 방향으로 무한함), 작업 테이프(양방향으로 무한함), 쓰기 테이프(한 방향으로 무한함)의 세 개의 테이프가 있는 접두사 없는 보편 튜링 기계를 고정한다.
기계는 읽기 테이프에서 한 방향으로만 읽을 수 있으며(뒤로 돌아갈 수 없음), 쓰기 테이프에 한 방향으로만 쓸 수 있다. 작업 테이프는 양방향으로 읽고 쓸 수 있다.
작업 테이프와 쓰기 테이프는 모두 0으로 시작한다. 읽기 테이프는 입력 접두사 코드와 그 뒤에 0으로 시작한다.