この考えは、プログラミングを学び、最初にPRNGに出会った子供として私に思いつきました。どれほど現実的かはまだわかりませんが、今ではスタック交換があります。
これは驚くべき圧縮アルゴリズムのための14歳のスキームです:
PRNG s
を取得し、シードでシードして、疑似ランダムバイトの長いシーケンスを取得します。そのシーケンスを別のパーティに送信するには、PRNGの説明、適切なシード、およびメッセージの長さを伝えるだけです。十分に長いシーケンスの場合、その説明はシーケンス自体よりもはるかに短くなります。
ここで、プロセスを逆にできると仮定します。十分な時間と計算リソースがあれば、ブルートフォース検索を実行して、目的のシーケンスを生成するシード(およびPRNG、つまりプログラム)を見つけることができました(猫のいたずらの面白い写真を見てみましょう)。
PRNGは十分な数のビットが生成された後に繰り返されますが、「典型的な」サイクルと比較すると、私のメッセージは非常に短いので、これは問題のようには見えません。
Voila、データを圧縮する効果的な(ルーベゴールドバーグ式の場合)方法。
したがって、仮定:
- 圧縮したいシーケンスは有限であり、事前にわかっています。
- 現金も時間も不足していません(両方の有限量が必要である限り)
知りたい:
- スキームの背後にある推論に根本的な欠陥はありますか?
- この種の思考実験を分析する標準的な方法は何ですか?
概要
良い答えが答えを明らかにするだけでなく、私が本当に求めていたのは何であるかを明らかにすることはしばしばあります。皆の忍耐と詳細な回答に感謝します。
答えの要約に対する私のn回目の試みは次のとおりです。
- PRNG /シード角度は何も寄与せず、目的のシーケンスを出力として生成するプログラムにすぎません。
- ピジョンホールの原則:長さ<= kの(メッセージを生成する)プログラムよりも、長さ> kのメッセージが多くあります。そのため、一部のシーケンスは、メッセージよりも短いプログラムの出力にはなり得ません。
- プログラム(メッセージ)のインタープリターが必ず事前に修正されていることに言及する価値があります。そして、その設計は、長さkのメッセージが受信されたときに生成できるメッセージの(小さな)サブセットを決定します。
この時点で、元のPRNGのアイデアはすでに消滅していますが、解決すべき最後の質問が少なくとも1つあります。
- Q:幸運にも、長い(しかし有限の)メッセージがたまたま<kビットの長さのプログラムの出力であることがわかりますか?
厳密に言えば、可能性のあるすべてのメッセージ(プログラム)の意味を事前に知っておく必要があるため、偶然ではありません。それは <kビットのメッセージの意味であるかそうでないかです。
> = kビットのランダムメッセージをランダムに選択した場合(なぜですか?)、いずれの場合でも、kビット未満で送信できる確率はゼロになり、送信できないことはほぼ確実になります。使用するビット数はkビット未満です。
OTOH、kビット未満のプログラムの出力であるメッセージからkビット以上の特定のメッセージを選択すると(そのようなメッセージがあると仮定して)、実際にはすでに送信されたビットを利用していますレシーバー(インタープリターの設計)。転送されたメッセージの一部としてカウントされます。
最後に:
最終的に、両方とも、(より単純な)鳩の巣の原理が圧縮できる量について教えているのと同じことを教えてくれます:おそらくまったくない、おそらくいくつかですが、確かに私たちが空想するほどではありません(チートしない限り)。