- BrainTools - https://www.braintools.ru -
По закону Мура [1] плотность транзисторов на микросхеме удваивается каждые 24 месяца. Производительность CPU, GPU, TPU и NPU растёт уже несколько десятилетий, что привело нас вплотную к задачам эмуляции мозга [2] и Сверхинтеллекта [3].
Когда-то компьютеры занимали целые комнаты, а сегодня у каждого в кармане маленький «суперкомпьютер». Но специалисты по теории информации решают фундаментальный вопрос: сколько места (памяти [5]) нужно в теории, чтобы выполнить задачу? Этот вопрос лежит в основе понятия вычислительной сложности.
Вычислительная сложность [6] или просто «сложность» в информатике означает объём ресурсов для вычисления задачи. Раздел, изучающий вычислительную сложность, называется теорией сложности вычислений.
Каждый алгоритм требует определённых ресурсов для вычисления. У него есть два ресурса — время [7] (вычислительные циклы CPU, ) и пространство [8] (память,
). Так мы учитываем временну́ю сложность алгоритма и пространственную сложность.
Временна́я и пространственная сложность алгоритма обычно выражается с использованием математической нотации «O» большое [9]. Например, ,
,
,
, где n является характеристикой входных данных, которые влияют на сложность.
Итак, у нас время и память. Но как они зависят друг от друга? Правда ли, что любая задача, которая решается в полиномиальном пространстве , также решается в полиномиальном
? И как они могут друг друга заменять?
Вопрос приобретает новое измерение с учётом дерьмофикации интернета [10] и программного обеспечения, где разработчики легко жертвуют памятью и производительностью. Для них это приемлемый компромисс, который позволяет сэкономить на оптимизации, ведь компьютерное железо гораздо дешевле, чем интеллектуальные ресурсы разработчика. Возможно, в этом тоже причина тотального ожирения софта [11], который становится всё более тормозным, на фоне упрощения всех интерфейсов и массового отупения пользователей [12].
С момента публикации фундаментальной научной работы Джона Хопкрофта с соавторами «О соотношении времени и пространства» [13] (“On Time Versus Space”) 1977 года считалось, что при увеличении сложности задачи (количество шагов алгоритма) пропорционально растёт и объём необходимой памяти. Таково было интуитивно понятная зависимость.
Только недавно выяснилось, что «конвертация сложности» работает иначе. И на самом деле требуется не t памяти, а всего лишь .
В теории сложности вычислений полиномиальное пространство означает задачи, которые компьютер может решить, используя ограниченное количество памяти. Например, если с ростом сложности задачи разумно растёт и количество занимаемой памяти (
,
) — это полиномиальное пространство. Если же объём памяти растёт экспоненциально, как
— не полином, и он за пределами
.
Аналогично и полиномиальное время описывает задачи, которые можно решить за ограниченное время.
Вопрос в том, насколько эти два класса пересекаются. Другими словами, насколько мы можем пожертвовать памятью ради производительности — и наоборот. Каков теоретический предел, в какое минимальное «пространство» можно втиснуть вычисления заданной сложности? И как растёт потребление памяти при увеличении сложности задачи?
На протяжении 50-ти лет учёные бьются над проблемой P ≠ PSPACE. За это время они смогли доказать только то, что если задача требует t шагов, то решение возможно с использованием примерно бит памяти. Но лишь в малом классе задач. Что будет дальше, при увеличении сложности?
Всегда предполагалось, что дальше зависимость тоже соблюдается. Грубо говоря, если задача требует в сто раз больше шагов, то она потребует в сто раз больше памяти.
Но оказалось, что логика [14] здесь не действует. Всё работает иначе.
В прошлом году на симпозиуме ACM по теории вычислений в Праге была официально представлена работа [15], которая вносит неожиданный поворот в эту задачи. Автор статьи Райан Вильямс из Массачусетского технологического института доказал, что любая задача, решаемая за время , требует не
, а всего около
бит памяти! То есть в сто раз сложнейший алгоритм можно решить, увеличив объём памяти всего в десять раз! Это стало ошеломительным открытием для индустрии.
«Этот результат показывает, что интуитивный подход совершенно неверный, — сказал Уильямс в комментарии [16] журналу Quanta Magazine. — Я сначала даже подумал, что-то неправильно [в моём доказательстве], потому что вывод совершенно неожиданный».
Решение Уильямса основано на редукции — преобразовании одной задачи в другую, которая на первый взгляд кажется не связанной с изначальной задачей, но на самом деле они полностью математически [17] эквивалентна ей. Решение одной задачи напрямую решает другую. Эта идея лежит в основе работы Уильямса: любую задачу можно преобразовать в такую, которую можно решить, умело повторно используя пространство, втиснув необходимую информацию всего лишь в квадратный корень от количества бит. Таким образом, исходная проблема решается в этом компактном контейнере.
«Такой прогресс невероятен, — говорит [18] Махди Черагчи (Mahdi Cheraghchi) из Университета Мичигана. — Раньше были задачи, решаемые за определённое время, но многие считали, что это нельзя сделать в столь крошечном пространстве».
Предположение P ≠ PSPACE требует доказать, что в линейном пространстве существует задача, которую невозможно решить за время для любого постоянного
.
Требуется показать, что существует задача линейного пространства, которую нельзя решить за времени для любого постоянного
.
В статье Уильямса делается важный шаг к разделению и
, потому что он доказал, что существуют задачи, которые можно решить в
пространства, но невозможно решить за время
для некоторого постоянного
.
Это первое общее полиномиальное разделение времени и пространства в надёжной вычислительной модели (а именно, в многоленточной машине Тьюринга [19]). Разделение достигается за счёт демонстрации удивительно эффективной с точки зрения [20] пространства симуляции общих алгоритмов с ограничением по времени.
Более формально, пусть будет классом задач принятия решений, решаемых многоленточными машинами Тьюринга за время
, а
— классом задач, решаемых ими же в памяти
.
Далее автор доказывает теорему, что для любой функции выполняется правило:
Для доказательства этой теоремы автор использует хитрую структуру в виде дерева вычислений (Tree Evaluation), а именно — недавно открытый свежий алгоритм для этого дерева.
Вот доказательство по шагам:
Разбиваем работу многоленточной машины Тьюринга на блоки по b шагов, а ленты — на блоки по b ячеек.
Строим абстрактное дерево вычисления. Каждый узел дерева соответствует тому, что происходит с некоторым блоком ленты за b шагов. Дети каждого узла — предыдущие блоки, от состояния которых он зависит.
Получается задача вида Tree Evaluation. Каждая внутренняя вершина дерева — это функция от значения детей, а листья — исходные данные. Нам нужно узнать значение в корне.
Тут самое главное, с точки зрения вычисления. Автор использует опубликованный в 2012 году алгоритм Кука–Мерца [21] для Tree Evaluation, который умеет считать значение в корне в очень маленькой памяти:
где h — высота дерева, b — размер значения в узле, d — число детей узла.
Подбирая длину блока b, то есть балансируя высоту дерева и размер значений, автор получает как раз значение используемой памяти примерно .
Таким образом, любой алгоритм из t шагов на многоленточной машине Тьюринга можно симулировать, используя всего памяти, точнее,
.
Как говорилось в известной книге «Programming Perl» [22]: «Если у вас кончилась память, её можно докупить, но если кончилось время — у вас проблема» (в вольном переводе).
За работы по нижним оценкам вычисляемости алгоритмов Райан Уильямс получил премию Гёделя 2024 года [23], есть видеозапись лекции [24] на церемонии в Таллине, где он рассказывает о своих исследованиях (с 18-й минуты). Вышеупомянутая статья Уильямса «Симуляция времени в квадратном корне пространства» [15] 2025 года непосредственно вытекает из этих исследований:
По мнению специалистов, благодаря этому прорыву полностью меняется наше теоретическое понимание эффективности компьютеров. Как выясняется, настоящим ограничением является не объём памяти, а эффективность её использования.
Возможно, этот результат на интуитивном уровне был понятен некоторым выдающимся программистам современности, которые создают программы, крайне эффективно работающие с крошечными ресурсами. Из последних примеров:
MicroQuickJS [26] от Фабриса Беллара — движок JavaScript для встроенных систем. Он компилирует и выполняет программы на JavaScript, используя всего 10 КБ оперативной памяти. В ПЗУ движок с библиотекой на С занимает 100 КБ (код ARM Thumb-2). При этом скорость компиляции и выполнения кода сопоставима с QuickJS [27], это предыдущая разработка Фабриса Беллара, тоже минималистичный JS-движок, для x86 систем: только файлы С, никаких зависимостей: демо [28], бенчмарки 1 [29] и 2 [30].
Эти примеры показывают, что сложные вычислительные задачи действительно можно упаковать в минимальное количество памяти.
Научная статья «Симуляция времени в квадратном корне пространства» [15] («Simulating Time With Square-Root Space») опубликована 25 февраля 2025 года к симпозиуму ACM по теории вычислений в Праге (arXiv:2502.17779).
© 2026 ООО «МТ ФИНАНС»
Автор: ru_vds
Источник [31]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/27310
URLs in this post:
[1] закону Мура: https://en.wikipedia.org/wiki/Moore%27s_law
[2] эмуляции мозга: https://habr.com/ru/news/1008270/
[3] Сверхинтеллекта: https://en.wikipedia.org/wiki/Superintelligence
[4] Интеллект: http://www.braintools.ru/article/7605
[5] памяти: http://www.braintools.ru/article/4140
[6] Вычислительная сложность: https://en.wikipedia.org/wiki/Computational_complexity
[7] время: https://en.wikipedia.org/wiki/Time_complexity
[8] пространство: https://en.wikipedia.org/wiki/Space_complexity
[9] «O» большое: https://en.wikipedia.org/wiki/Big_O_notation
[10] дерьмофикации интернета: https://habr.com/ru/companies/ruvds/articles/954210/
[11] ожирения софта: https://habr.com/ru/companies/ruvds/articles/925028/
[12] массового отупения пользователей: https://habr.com/ru/companies/ruvds/articles/777420/
[13] «О соотношении времени и пространства»: https://dl.acm.org/doi/10.1145/322003.322015
[14] логика: http://www.braintools.ru/article/7640
[15] работа: https://arxiv.org/abs/2502.17779
[16] комментарии: https://www.quantamagazine.org/for-algorithms-a-little-memory-outweighs-a-lot-of-time-20250521/
[17] математически: http://www.braintools.ru/article/7620
[18] говорит: https://www.scientificamerican.com/article/new-proof-dramatically-compresses-space-needed-for-computation/
[19] многоленточной машине Тьюринга: https://en.wikipedia.org/wiki/Multitape_Turing_machine
[20] зрения: http://www.braintools.ru/article/6238
[21] алгоритм Кука–Мерца: https://dl.acm.org/doi/10.1145/2077336.2077337
[22] «Programming Perl»: https://en.wikipedia.org/wiki/Programming_Perl
[23] премию Гёделя 2024 года: https://eatcs.org/index.php/component/content/article/1-news/2982-2024-05-13-10-59-08
[24] видеозапись лекции: https://www.youtube.com/live/0DrFB2Cp7tg
[25] consent.youtube.com: https://consent.youtube.com/ml?continue=https://www.youtube.com/live/0DrFB2Cp7tg?cbrd%3D1&gl=EE&hl=en&cm=2&pc=yt&src=1&escs=AZ8E49DfdGD8jN6KWxq3l6cbskOLJbMR-WPympIWVCw1ZOFwn0m9dVGoYnPx-NfYXWpfnlQV7J1D9pLyeoVvxYyE1wGsf11ebKYo
[26] MicroQuickJS: https://github.com/bellard/mquickjs/blob/main/README.md
[27] QuickJS: https://bellard.org/quickjs/
[28] демо: https://bellard.org/jslinux/vm.html?url=alpine-x86.cfg
[29] 1: https://boajs.dev/benchmarks
[30] 2: https://zoo.js.org/?arch=amd64&v8=true
[31] Источник: https://habr.com/ru/companies/ruvds/articles/1011548/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1011548
Нажмите здесь для печати.