Наближення складності Колмогорова


22

Я вивчив щось про складність Колмогорова , прочитав деякі статті та книги Вітанія та Лі і використав концепцію нормованої дистанції стиснення, щоб перевірити стилометрію авторів (визначте, як кожен автор пише деякі текстові та групові документи за їх подібністю).

У цьому випадку компресори даних використовувались для наближення складності Колмогорова, оскільки компресор даних може використовуватися як машина Тьюрінга.

Окрім мов стиснення даних та програмування (якими ви писали б якийсь компресор), що ще можна використати для наближення складності Колмогорова? Чи є інші підходи, які можна було б використати?


Я не впевнений, що я розумію ваше запитання: Визначення KC включає в себе тверді машини, програми з яких складають приклади (стосовно деякого перекладу). Що означає наближення складності Колмогорва "без мов програмування"?
коді

1
Стисніть рядок за допомогою будь-якого програмного забезпечення для стиснення, наприклад, GZip. Розмір виводу є верхньою межею KC рядка.
М. Алаган

@cody: точно, я використовував компресори даних у своїх дослідженнях (zip, bzip, ppmd), щоб наблизити KC. Компресор даних - це не саме програми. Отже, я шукаю пропозиції щодо того, що можна використовувати в KC крім мов (= написати програму на C / prolog / що завгодно) та компресорів даних (= використовувати zip, gzip, ppmc, ppmd ...) :)
woliveirajr

1
Я думаю, мені просто здається, що визначення програми стиснення даних є саме таким: програма, яка наближає KC рядка до програми ("некомпресор") та іншої рядки (стискається рядок).
коді

Відповіді:


9

Я припускаю , що один можливий відповідь на ваше запитання полягає в наступному: Візьміть псевдовипадкових чисел генератор . Спробуйте вибрати генератор, який має потужні атаки на нього: атака генератора випадкових чисел для - це (для наших цілей) алгоритм який при введенні рядка введення визначає насіння , таке що . Потім приблизний KC :G A s A ( s ) G ( A ( s ) ) = s sGGAs 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, оскільки вони призначені для роботи на будь-якій рядку, тоді як атака може працювати лише у випадку, якщо зображення ( дуже малоймовірно ).GsG


7

p(x)logp(x)

Ось чому складність Колмогорова є такою цікавою не тому, що це алгоритм кінцевого стиснення (який все одно піклується про стиснення), а тому, що це остаточний алгоритм навчання . Стиснення та навчання - це одне і те ж: пошук моделей у ваших даних. Побудована на цій ідеї статистична основа називається Мінімальною довжиною опису, і вона була безпосередньо натхненна складністю Колмогорова.

Дивіться також це питання на сайті cckheory StackExchange.


5

граматичне кодування є менш часто використовуваною версією алгоритму стиснення і може сприйматися як "приблизна" оцінка складності Колмогорова. граматичне кодування використовується не так часто, як алгоритм стиснення, як інші більш поширені підходи, можливо, головним чином тому, що воно не значно покращує стиснення, наприклад, Lempel-Ziv на текстових корпусах, але це може справитись з іншими видами даних. ідея - «стиснути» рядок, використовуючи граматичні правила. граматичне виведення може призвести до DAG (порівняно з менш складним деревом), тому можлива значна репрезентативна складність.

Інший варіант - знайти найменші / мінімальні схеми, що представляють собою рядки, але це, як відомо, має дуже високу складність обчислень і може досягти успіху лише у невеликих рядках.

K(x)

K(x)

Крім методів алгоритму стиснення, окрім підходів типу Lempel-Ziv "кодування довжини прогону", наприклад, векторна алгебра та SVD можуть використовуватися як алгоритм стиснення. також перетворення Фур'є часто використовуються для стиснення зображень, наприклад, у форматі JPG.


1
K(x)

Хороша справа, проте алгоритми втрати зазвичай мають регульований параметр, який визначає "втрату" і теоретично може досягти втрат з достатньою кількістю "термінів" або "частот", так би мовити, і це також залежить від вхідних вибірок, так що значення параметра без втрат буде залежати про їх "відносний порядок проти випадковості", видно через "лінзу" алгоритму стиснення ...
vzn

1
@cody and vzn: Дякую за відповідь, ти дав мені кілька гарних ідей для мого доктора наук про стиснення x lossy x:
woliveirajr

JPEG використовує DCT, а не DFT.
Зло
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.