Ця ідея мені прийшла в голову як дитина, яка навчається програмувати і вперше зустрічається з PRNG. Я досі не знаю, наскільки це реально, але зараз є обмін стеками.
Ось схема 14 років для дивовижного алгоритму стиснення:
Візьміть ПРНГ і посіяйте його насінням s
щоб отримати довгу послідовність псевдовипадкових байтів. Щоб передати цю послідовність іншій стороні, вам потрібно лише повідомити опис PRNG, відповідне насіння та довжину повідомлення. Для досить довгої послідовності цей опис був би набагато коротшим, ніж сама послідовність.
Тепер припустимо, що я міг би перевернути процес. Враховуючи достатньо часу та обчислювальних ресурсів, я міг би зробити грубий пошук і знайти насіння (і PRNG, або іншими словами: програма), яка створює мою бажану послідовність (Скажімо, кумедна фотографія котів, які кохаються).
PRNG повторюються після створення достатньо великої кількості бітів, але порівняно з "типовими" циклами моє повідомлення є досить коротким, тому це не здається великою проблемою.
Voila, ефективний (якщо рубе-голдбергійський) спосіб стиснення даних.
Отже, якщо припустити:
- Послідовність, яку я хочу стиснути, є кінцевою і відомою заздалегідь.
- Мені не вистачає грошей чи часу (Тільки доки потрібна кінцева сума обох)
Я хотів би знати:
- Чи є фундаментальний недолік в міркуванні схеми?
- Який стандартний спосіб проаналізувати подібні думки експерименти?
Підсумок
Часто буває так, що в хороших відповідях з’ясовується не тільки відповідь, але і те, що я насправді запитував. Дякую за терпіння та детальні відповіді.
Ось моя дев’ята спроба узагальнення відповідей:
- PRNG / кут насіння не сприяє нічого, це не більше ніж програма, яка виробляє бажану послідовність як вихід.
- Принцип голубої дуги: Є набагато більше повідомлень довжиною> k, ніж є (генерують повідомлення) програми довжиною <= k. Тож деякі послідовності просто не можуть бути результатом програми коротшою, ніж повідомлення.
- Варто зазначити, що інтерпретатор програми (повідомлення) обов'язково фіксується заздалегідь. І його дизайн визначає (малу) підмножину повідомлень, які можна генерувати, коли надходить повідомлення довжиною k.
На даний момент оригінальна ідея PRNG вже мертва, але для вирішення є принаймні одне останнє питання:
- З: Чи можу мені пощастити і виявити, що моє довге (але кінцеве) повідомлення просто трапляється на виході програми довжиною <k біт?
Власне кажучи, це не питання випадковості, оскільки значення кожного можливого повідомлення (програми) необхідно знати заздалегідь. Або це значення деякого повідомлення від <K бітів чи ні .
Якщо я вибираю випадкове повідомлення розміром> = k біт випадковим чином (чому б мені це зробити?), Я б у будь-якому випадку мав би ймовірність того, що зможу надіслати його, використовуючи менше, ніж k біт, і майже впевненість, що не зможу надіслати він взагалі використовує менше k біт.
OTOH, якщо я вибираю конкретне повідомлення розміром> = k біт з тих, які є вихідною програмою менше k біт (якщо припустити, що таке повідомлення), то фактично я використовую переваги бітів, вже переданих до приймач (конструкція перекладача), який вважається частиною переданого повідомлення.
Нарешті:
- Питання: У чому вся справа у сфері складності ентропії / колгорогова ?
У кінцевому підсумку обидва кажуть нам те саме, що (простіший) принцип голубця говорить нам про те, наскільки ми можемо стискати: можливо, зовсім не, можливо, деякі, але, звичайно, не настільки, як нам здається (якщо ми не обманюємо).