Я несколько месяцев читал о разных методах определения сложности. Первой концепцией, на которую я обратил внимание, была вычислительная сложность. Вычислительная сложность равна числу элементарных логических операций, которые нужно выполнить в ходе вычисления. (Связанная с ней концепция, пространственная вычислительная сложность, равна числу битов, используемых в ходе вычисления.) Вычислительная сложность – не столько мера сложности, сколько мера усилий, или ресурсов, необходимых для выполнения данной задачи. Есть множество вычислений, занимающих много времени и расходующих много места, но они не производят ничего сложного. Как мы увидим, вычислительная сложность – важный ингредиент хорошего определения сложности, но сама по себе она не является хорошим определением.
В качестве меры сложности была также предложена алгоритмическая информация – кстати, Хайтин сначала назвал ее «алгоритмической сложностью». Но строки битов строки с высоким содержанием алгоритмической информации не выглядят сложными, они выглядят случайными; и действительно, алгоритмическую информацию также называют алгоритмической случайностью. Кроме того, строки битов с высоким содержанием алгоритмической информации легко создать: достаточно всего 100 раз подбросить монетку. Получившаяся строка битов, вероятно, будет иметь близкое к максимально возможному содержание алгоритмической информации. Мы с Хайнцем считали, что сложные вещи должны быть замысловатыми, структурированными и трудновоспроизводимыми. Для описания вещей с высоким содержанием алгоритмической информации может требоваться много битов, но почти все строки битов с высоким содержанием алгоритмической информации неструктурированны, и их легко создать.
Я продолжал читать, находя все больше определений сложности, но все они были вариациями на тему необходимых усилий или количества информации. Несколько лет спустя я сделал доклад об этих различных мерах сложности на конференции в Институте Санта-Фе, основанном в середине 1980-х Джорджем Коуэном, Мюрреем Гелл-Манном и группой старших научных сотрудников из соседнего Лос-Аламоса, которых интересовало изучение правил, дающих начало сложным системам и лежащих в их основе. Этот доклад назывался «Тридцать одна мера сложности» (Thirty-one Measures of Complexity), причем «тридцать один» было хорошо известным намеком на количество сортов мороженого Baskin-Robbins. Хотя я не опубликовал доклад под этим названием, молва о нем распространилась в Интернете, и в течение многих лет доклад о 31 способе измерения сложности был моей самой часто запрашиваемой работой, несмотря на то что ее просто не существовало. (Несколько лет назад я, наконец, опубликовал этот список в виде статьи {15}, просто для того, чтобы больше не отвечать на электронные письма, в которых меня просили выслать эту несуществующую статью.) Кстати говоря, за время от прочтения доклада до публикации статьи количество способов измерения сложности выросло с тридцати одного до сорока двух. (Длина нового списка побудила писателя Джона Хоргана в книге «Конец науки» (The End of Science) утверждать, что наука о сложных системах оказалась несостоятельной, так как исследователи не смогли договориться даже о том, что такое сложность, уже не говоря о каких-либо серьезных исследованиях в этой области.)
В этой статье я поделил меры сложности на четыре категории: во-первых, меры того, насколько сложно что-то описать (такие как алгоритмическая информация); во-вторых, меры того, насколько сложно что-то сделать (такие как вычислительная сложность); в-третьих, меры степени организации в системе; в-четвертых, неколичественные идеи о сложности (такие как самоорганизация или сложные адаптивные системы). Из этих сорока двух самыми интересными я считаю подходы, сочетающие в единой мере сразу три составляющие: насколько сложно что-то описать, насколько сложно что-то сделать и степень организации. О таких мерах мы и будем говорить ниже.
Законы физики описывают компромиссы и взаимосвязи между измеримыми величинами, и законы сложности делают то же самое. Особенно полезным является компромисс между информацией и усилиями. Алгоритмическую информацию можно считать мерой содержания информации, а вычислительную сложность – мерой необходимых усилий. Рассмотрим количество усилий, необходимых для создания определенной строки битов – например, первого миллиона цифр числа p. Эти цифры можно получить с относительно небольшим количеством вычислительной сложности (всего несколько миллионов логических операций, что на обычном компьютере займет меньше секунды) с помощью программы длиной из миллиона с лишним знаков, которая говорит: «Напечатать 3,1415926…» Мы не знаем точной алгоритмической информации в первом миллионе цифр числа p (ведь алгоритмическая информация невычисляема), но можем искать верхнюю границу этой алгоритмической информации, создавая короткие программы, вычисляющие первый миллион цифр числа p. Например, в программе, которая вычисляет эти цифры с помощью математического метода представления в виде цепной дроби, может быть меньше 1000 знаков, но эта компактная программа будет вычислять первый миллион цифр числа p намного дольше, чем самая простая, но очень длинная программа типа «напечатать». Чтобы получить этот миллион цифр, ей потребуется выполнить миллиарды логических операций.
Читать дальше
Конец ознакомительного отрывка
Купить книгу