이 아이디어는 프로그램을 배우고 처음 PRNG를 만난 어린 시절에 나에게 일어났다. 나는 아직도 그것이 얼마나 현실적인지 알지 못하지만 이제 스택 교환이 있습니다.
놀라운 압축 알고리즘을위한 14 살짜리 계획은 다음과 같습니다.
PRNG s
를 가져와 시드 로 시드 하여 긴 일련의 의사 난수 바이트를 얻습니다. 이 시퀀스를 다른 당사자에게 전송하려면 PRNG에 대한 설명, 적절한 시드 및 메시지 길이 만 전달하면됩니다. 충분히 긴 시퀀스의 경우 해당 설명은 시퀀스 자체보다 훨씬 짧습니다.
이제 프로세스를 반전시킬 수 있다고 가정하십시오. 충분한 시간과 계산 리소스가 주어지면 무차별 검색을 수행하여 원하는 시퀀스를 생성하는 시드 (및 PRNG 또는 다른 말로하면 프로그램)를 찾을 수 있습니다 (고양이의 재미있는 사진은 장난 스럽습니다).
PRNG는 충분한 수의 비트가 생성 된 후에 반복되지만 "일반적인"주기와 비교할 때 제 메시지는 매우 짧아서 별 문제가되지 않습니다.
Voila는 데이터를 압축하는 효과적인 방법입니다.
따라서 가정 :
- 압축하려는 시퀀스는 유한하며 미리 알려져 있습니다.
- 현금이나 시간이 부족하지 않습니다 (유한 한 금액이 필요한 한)
알고 싶습니다 :
- 이 계획의 추론에 근본적인 결함이 있습니까?
- 이러한 종류의 사고 실험을 분석하는 표준 방법은 무엇입니까?
요약
좋은 답변이 답변뿐만 아니라 내가 실제로 묻는 것임을 분명히하는 경우가 종종 있습니다. 모두의 인내심과 상세한 답변에 감사드립니다.
다음은 답변 요약에 대한 n 번째 시도입니다.
- PRNG / 시드 각도는 아무 것도 기여하지 않으며, 원하는 시퀀스를 출력으로 생성하는 프로그램에 지나지 않습니다.
- 비둘기 구멍 원리 : 길이 <= k의 (메시지 생성) 프로그램보다 더 많은 길이> k의 메시지가 있습니다. 따라서 일부 시퀀스는 단순히 메시지보다 짧은 프로그램의 출력이 될 수 없습니다.
- 프로그램의 해석기 (메시지)가 반드시 미리 고정되어 있다는 것은 언급 할 가치가 있습니다. 또한 길이 k의 메시지가 수신 될 때 생성 될 수있는 메시지의 작은 하위 집합을 결정합니다.
이 시점에서 원래 PRNG 아이디어는 이미 죽었지 만 해결해야 할 마지막 질문이 하나 이상 있습니다.
- Q : 운이 좋으면서 긴 (그러나 유한 한) 메시지가 길이 <k 비트의 프로그램 출력이라는 것을 알 수 있습니까?
엄밀히 말하면, 가능한 모든 메시지 (프로그램)의 의미를 미리 알아야하므로 우연이 아닙니다. 어느 것이 인 <k 비트의 일부 메시지의 의미 또는 그렇지 않다 .
무작위로> = k 비트의 무작위 메시지를 선택하면 (왜 내가?) k 비트 미만을 사용하여 메시지를 보낼 수 있다는 소멸 가능성과 거의 보낼 수 없다는 확실성이 있습니다. k 비트 미만을 사용합니다.
OTOH, k 비트보다 작은 프로그램의 출력 인 메시지에서> = k 비트의 특정 메시지를 선택하면 (그러한 메시지가 있다고 가정) 실제로는 이미 전송 된 비트를 이용합니다. 전송 된 메시지의 일부로 계산되는 수신자 (인터프리터의 설계)
드디어:
- Q :이 엔트로피 / 콜 로고 로프 복잡성 사업은 무엇입니까?
궁극적으로 둘 다 (간단한) 비둘기 구멍 원리가 우리가 압축 할 수있는 양에 대해 알려주는 것과 같은 것을 알려줍니다.