Колмогоровская сложность — различия между версиями
(→Свойства) |
|||
| Строка 56: | Строка 56: | ||
}} | }} | ||
==Свойства== | ==Свойства== | ||
| + | * <tex>KS(x) \leqslant |x| + c</tex> | ||
| + | * <tex>KS(x,y) \leqslant KS(x) + KS(y) + 2\lceil log_2 KS(x) \rceil + 2</tex> | ||
| + | * Если <tex>A</tex> {{---}} алгоритм, то <tex>KS(A(x)) \leqslant KS(x) + c_A</tex> <br> (<tex>A(x)</tex> запишем как пару {{---}} информация об алгоритме <tex>A</tex> и информация о строке <tex>x</tex>, по предыдущему пункту нам нужно закодировать только сложность первого аргумента, что есть константа) | ||
| + | * '''Принцип несжимаемости:''' <tex>\exists x \in \{0,1\}^n : KS(x) \geqslant n</tex> <br> (Какой бы у нас ни был архиватор, он не может все строки фиксированной длины делать меньше. Строк длины меньшей, чем <tex>n</tex> {{---}} <tex>(2^n-1)</tex>, мы не сможем деархивировать) | ||
| + | * <tex>KS</tex> {{---}} невычислимая функция. | ||
| + | |||
| + | Докажем последнее свойство: | ||
== Источники == | == Источники == | ||
Версия 15:35, 4 января 2015
Колмогоровскую сложность можно рассматривать как способ измерения количества информации в строке.
Но как понять, какое количество информации содержит в себе строка? Один из классических способов — это подсчет количества битов (число, пропорциональное длине строки). Рассмотрим следующий пример:
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Понятно, что эту строку можно описать более компактно на естественном языке, "128 нулей", всего 9 символов.
Можем дать следующее определение. Количество информации, которое несет строка — это размер архива, полученного сжатием строки каким-то конкретным архиватором (например, LZW). Это более нетривиальная задача, но мы можем придумать строку, которая явно несет в себе мало информации, но которую архиватор тем не менее не сожмет.
Еще более сильное определение. Количество информации, которое несет строка — это размер архива, сжатого максимальным образом, самым лучшим архиватором. Но тогда встает вопрос, почему такой архиватор существует. На самом деле он есть, и в некотором смысле колмогоровская сложность строки — это размер наименьшей программы, которая печатает эту строку.
Содержание
Определения
| Определение: |
| Назовём декомпрессором алгоритм, восстанавливающий разжатый текст из сжатого. |
Примечание: для простоты мы будем рассматривать бинарный алфавит, но все утверждения мы можем обобщить на строки произвольного алфавита.
Относительно каждого декомпрессора мы можем определить понятие сложности строки:
| Определение: |
| Пусть , тогда назовем колмогоровской сложностью строки , размер минимальной строки , такой, что . Если такого не существует, тогда . |
Примеры
- , тогда
- , тогда
| Определение: |
| Будем говорить, что декомпрессор лучше, чем декомпрессор , если . |
| Теорема: |
Существует оптимальный декомпрессор , который лучше всех остальных. |
| Доказательство: |
|
Пусть — некоторая строка, . Обозначим за строку (мы удвоили каждый бит строки и добавили в конце ). |
| Определение: |
| Пусть — это оптимальный декомпрессор, тогда колмогоровская сложность . |
| Утверждение: |
Очевидно, что если и — оптимальные декомпрессоры, то |
Свойства
- Если — алгоритм, то
( запишем как пару — информация об алгоритме и информация о строке , по предыдущему пункту нам нужно закодировать только сложность первого аргумента, что есть константа) - Принцип несжимаемости:
(Какой бы у нас ни был архиватор, он не может все строки фиксированной длины делать меньше. Строк длины меньшей, чем — , мы не сможем деархивировать) - — невычислимая функция.
Докажем последнее свойство: