Pomysł ten przyszedł mi do głowy jako dziecko uczące się programowania i przy pierwszym spotkaniu z PRNG. Nadal nie wiem, jak realistyczne jest, ale teraz jest wymiana stosów.
Oto 14-letni schemat niesamowitego algorytmu kompresji:
Weź PRNG i zaszczep go ziarnem, s
aby uzyskać długą sekwencję pseudolosowych bajtów. Aby przekazać tę sekwencję innemu podmiotowi, musisz jedynie przekazać opis PRNG, odpowiednie ziarno i długość wiadomości. Dla wystarczająco długiej sekwencji opis ten byłby znacznie krótszy niż sama sekwencja.
Załóżmy teraz, że mógłbym odwrócić ten proces. Biorąc pod uwagę wystarczającą ilość czasu i zasobów obliczeniowych, mógłbym przeprowadzić wyszukiwanie z użyciem siły brutalnej i znaleźć ziarno (i PRNG, lub innymi słowy: program), który produkuje pożądaną sekwencję (powiedzmy zabawne zdjęcie kotów psotnych).
PRNG powtarzają się po wygenerowaniu wystarczająco dużej liczby bitów, ale w porównaniu do „typowych” cykli moja wiadomość jest dość krótka, więc nie wydaje się to dużym problemem.
Voila, skuteczny (jeśli rube-Goldbergowski) sposób kompresji danych.
Zakładając:
- Sekwencja, którą chcę skompresować, jest skończona i znana z góry.
- Nie brakuje mi gotówki ani czasu (tak długo, jak wymagana jest skończona kwota obu)
Chciałbym wiedzieć:
- Czy istnieje podstawowa wada w uzasadnieniu programu?
- Jaki jest standardowy sposób analizowania tego rodzaju eksperymentów myślowych?
Podsumowanie
Często zdarza się, że dobre odpowiedzi wyjaśniają nie tylko odpowiedź, ale o to, o co tak naprawdę pytałem. Dziękujemy za cierpliwość i szczegółowe odpowiedzi.
Oto moja n-ta próba podsumowania odpowiedzi:
- PRNG / kąt nasion nic nie wnosi, to nic więcej jak program, który wytwarza żądaną sekwencję jako wynik.
- Zasada szuflady: Jest o wiele więcej komunikatów o długości> k niż programów (generujących wiadomości) o długości <= k. Więc niektóre sekwencje po prostu nie mogą być wyjściem programu krótszym niż komunikat.
- Warto wspomnieć, że interpreter programu (wiadomości) jest koniecznie ustalony z góry. Jego konstrukcja określa (mały) podzbiór komunikatów, które mogą być generowane po odebraniu komunikatu o długości k.
W tym momencie pierwotny pomysł PRNG jest już martwy, ale należy rozstrzygnąć co najmniej jedno ostatnie pytanie:
- P: Czy mogę mieć szczęście i stwierdzić, że mój długi (ale skończony) komunikat jest po prostu wynikiem programu o długości <k bitów?
Ściśle mówiąc, nie jest to przypadek, ponieważ znaczenie każdej możliwej wiadomości (programu) musi być znane z góry. Albo to jest sens pewnym przesłaniem <k bitów lub nie .
Gdybym losowo wybrał losową wiadomość> = k bitów (dlaczego miałbym?), W każdym razie miałbym znikające prawdopodobieństwo, że będę w stanie wysłać ją przy użyciu mniej niż k bitów i prawie na pewno nie będę w stanie wysłać w ogóle używa mniej niż k bitów.
OTOH, jeśli wybiorę konkretny komunikat o wartości> = k bitów spośród tych, które są wynikiem programu o wartości mniejszej niż k bitów (zakładając, że taki komunikat jest), to w efekcie korzystam z bitów już przesłanych do odbiornik (projekt interpretera), który liczy się jako część przesłanej wiadomości.
Wreszcie:
- P: O co chodzi z tym biznesem złożoności entropii / kolmogorowa ?
Ostatecznie obaj mówią nam to samo, co (prostsza) zasada szuflady mówi nam o tym, ile możemy skompresować: być może wcale, może niektórzy, ale na pewno nie tak, jak nam się wydaje (chyba że oszukujemy).