Kolmogorov 복잡성 근사


22

나는 Kolmogorov Complexity 에 대해 무언가를 연구하고 Vitanyi와 Li의 기사와 책을 읽었으며 Normalized Compression Distance 의 개념을 사용하여 저자의 stilometry를 확인했습니다 (각 저자가 유사성으로 텍스트와 그룹 문서를 작성하는 방법을 식별).

이 경우 데이터 압축기는 튜링 기계로 사용될 수 있기 때문에 Kolmogorov의 복잡성을 근사하기 위해 데이터 압축기가 사용되었습니다.

데이터 압축 및 프로그래밍 언어 (어떤 종류의 압축기를 작성할 것) 외에 Kolmogorov 복잡성을 근사화하는 데 사용할 수있는 다른 것은 무엇입니까? 사용할 수있는 다른 방법이 있습니까?


나는 당신의 질문을 이해하지 못합니다 : KC의 정의는 튜링 머신과 관련이 있으며, 어떤 프로그램은 (일부 번역과 관련하여) 예제를 형성합니다. "프로그래밍 언어없이"Kolmogorv 복잡성을 근사한다는 것은 무엇을 의미합니까?
코디

1
GZip과 같은 압축 소프트웨어를 사용하여 문자열을 압축하십시오. 출력의 크기는 문자열의 KC에 대한 상한입니다.
M. Alaggan

@cody : 정확히, 나는 연구에서 데이터 압축기 (zip, bzip, ppmd)를 사용하여 KC를 근사했습니다. 데이터 압축기는 정확히 프로그램이 아닙니다. 따라서 언어 (= C / 프롤로그 / 모든 프로그램 작성)와 데이터 압축기 (= zip, gzip, ppmc, ppmd ...) :)
woliveirajr

1
데이터 압축 프로그램 의 정의 는 프로그램 ( "압축 해 제기")과 다른 문자열 (압축 된 문자열)에 의해 문자열의 KC를 근사화하는 프로그램 인 것 같습니다.
코디

답변:


9

귀하의 질문에 대한 한 가지 가능한 대답은 이것입니다 : 의사 난수 생성기 가져 가십시오 . 일부 강력한있는 발전기 선택하려고 공격 A : 반대를 난수 생성기 공격 에 대한 G가 (우리의 목적을 위해)이며, 알고리즘 , imput 문자열 주어 졌을 때 하는 결정 종자 ( ) , 그와 같은 G를 ( A ( s ) ) = s 입니다. 그런 다음 s 의 KC를 근사합니다 .GGAs A(s)G(A(s))=ss

input: s
Compute A(s);
if |A(s)| + |G| > |s| output: |s|
otherwise output: |A(s)| + |G|

어디 G ( s ) 를 계산하는 프로그램의 길이입니다 (선형 발전기의 경우 종종 매우 짧음).|G|G(s)

실제로 난수 생성기 공격은 설명 된 것과 다릅니다. 실패 하거나 불완전한 결과를 생성 할 수 있습니다 . 이 경우, 알고리즘이 공격 결과가 만족스럽지 않은 경우. 압축 알고리즘에 대해서도 마찬가지입니다.|s|

압축 알고리즘과 달리이 접근 방식의 단점은 압축 알고리즘이 일반적으로 모든 문자열에서 작동하도록 맞춤화되어 KC 컴퓨팅에 훨씬 더 적합하다는 것입니다 . 반면에 G 의 이미지에있는 경우에만 공격이 작동 할 수 있습니다 ( 가능성이 거의 없습니다 ).sG


7

확률 분포. 당신이 당신의 데이터 확률 제공하는 계산 가능한 확률 분포가있는 경우 다음 크래프트 불평등에 의해, 그것을 압축하는 계산 가능한 압축기있다 - 로그 P ( X ) 비트 (당신이 분수 비트에 반대하는 경우 라운드 업). 이것은 거의 모든 생성 기계 학습 알고리즘을 사용할 수 있음을 의미합니다.p(x)logp(x)

이것이 Kolmogorov의 복잡성이 흥미로운 이유입니다. 압축 압축 알고리즘 (압축에 관심이있는)이기 때문이 아니라 궁극적 인 학습 알고리즘 이기 때문 입니다. 압축과 학습은 기본적으로 동일합니다. 데이터에서 패턴을 찾는 것입니다. 이 아이디어를 기반으로 한 통계 프레임 워크를 최소 설명 길이라고하며 Kolmogorov 복잡성에서 직접 영감을 얻었습니다.

cstheory StackExchange 에서이 질문 을 참조하십시오 .


5

문법 코딩압축 알고리즘 의 자주 사용되지 않는 버전 이며 Kolmogorov 복잡성의 "거친"추정치로 간주 될 수 있습니다. 문법 코딩은 압축 알고리즘만큼 일반적으로 사용되지는 않지만 다른 일반적인 접근 방식은 주로 텍스트 기반 시체의 Lempel-Ziv와 같은 압축에서 크게 향상되지 않기 때문에 압축 알고리즘만큼 일반적으로 사용되지는 않지만 다른 종류의 데이터에서는 잘 수행 될 수 있습니다. 문법 규칙을 사용하여 문자열을 "압축"하는 것이 좋습니다. 문법 파생은 DAG (보다 덜 복잡한 트리)를 초래할 수 있으므로 실질적인 표현 복잡성이 가능합니다.

또 다른 옵션은 문자열을 나타내는 최소 / 최소 회로 를 찾는 것이지만 계산의 복잡성이 매우 높은 것으로 알려져 있으며 작은 문자열에서만 성공할 수 있습니다.

K(x)

K(x)

Lempel-Ziv "run length encoding"유형 접근 방식 외에 다른 대수 압축 알고리즘 방법도 있습니다. 예를 들어 벡터 대수 및 SVD 를 압축 알고리즘으로 사용할 수 있습니다. 또한 푸리에 변환 은 예를 들어 JPG 표준에서 이미지를 압축하는 데 자주 사용됩니다.


1
K(x)

그러나 좋은 점은 손실 알고리즘은 일반적으로 "손실"을 결정하고 이론적으로 충분한 "조건"또는 "주파수"로 무손실을 달성 할 수있는 조정 가능한 매개 변수를 가지며, 또한 무손실 매개 변수 값이 의존하도록 입력 샘플에 의존합니다 압축 알고리즘의 "렌즈"를 통해 보여지는 "상대적 순서 대 임의성"에 대한 내용
vzn

1
@cody와 vzn : 답변 주셔서 감사합니다, 당신은 저에게 손실없는 x 손실 압축에 대한 내 박사 학위에 대한 좋은 아이디어를 주었다 :)
woliveirajr

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