Счетная мудрость
Архив"Счетная мудрость" - так называлась книга, изданная в России в 1789 году. В ней были собраны трактаты по практической арифметике и землемерному делу. Выражаясь современным языком, это была библиотека алгоритмов.
- Г-голубчики, - сказал Федор Симеонович. - Это же п-проблема Бен-Б-бецалеля. К-калиостро же доказал, что она не имеет решения.
- Мы сами знаем, что она не имеет решения, - сказал Хунта. - Мы хотим знать, как ее решать.
А. и Б. Стругацкие.
«Понедельник начинается в субботу»
«Счетная мудрость» - так называлась книга, изданная в России в 1789 году. В ней были собраны трактаты по практической арифметике и землемерному делу. Выражаясь современным языком, это была библиотека алгоритмов.
Мне, признаться, очень понравилось название. Вслушайтесь: «счетная… мудрость…» Это не солдафонски примитивное «делай - раз!.. делай - два!..» Мудрость! Вечное знание!
В самом деле, любой алгоритм - суть решение какой-то задачи. Не в смысле «результат», а в смысле «знаю, как решать». Не догадка, не академическая точка зрения на возможные подходы к процессу поиска решения, но именно точное знание, как решать. И это уже навсегда! Пока цела будет Вселенная и будут существовать хоть какие-нибудь вычислительные устройства, алгоритм, реализованный в соответствующей программе, может «жить и работать».
Наука об алгоритмах - это часть математики - абстрактнейшей из дисциплин, но именно в этой своей части математика становится до чрезвычайности практичной. Помните, раньше существовал термин «математическое обеспечение»? А еще были «математики-программисты». А потом стало «программное обеспечение» и просто «программисты». Когда-то так было с электротехникой. Никому же не придет в голову сказать, что электрик не лампочку вкручивает, а решает сложнейшую физическую проблему!
Кстати, о физике. Примерно с тех пор, как на слуху появились квантовые процессоры и квантовые - само собой! - алгоритмы, в научной печати стали обсуждаться невероятно интересные вещи! Например: все мы привыкли считать алгоритмические абстракции - операторы, идентификаторы, процессы вычисления - именно абстракциями, а они, оказывается, имеют фундаментальные физические реализации на уровне законов нашего Мира. Ну кто мог предположить, что на квантовом уровне абстрактное понятие «вычисление» и конкретное - «измерение» сольются в одно? Кто мог представить, что на этом уровне фраза «точно смоделировать квантово-механическую систему А» будет означать просто «создать квантово-механическую систему А»? Кому в голову могла прийти мысль о том, что абстрактное имя, идентификатор любого объекта нашего Мира - в пределе точности описания - это и есть описываемый объект?
Кстати, обратите внимание: само понятие «алгоритм» в сути своей фундаментально. Для него в принципе не существует простого определения. Любая попытка выразить это понятие «другими словами» неминуемо приводит к упрощению.
О смысле слова «алгоритм» нельзя не упомянуть, пусть даже вскользь, хотя бы потому, что за последние полвека он значительно расширился и отнюдь не сводится к пресловутому «делай - раз! делай - два!» Появилось множество экзотических и вместе с тем очень эффективных алгоритмов, принцип работы которых можно было бы характеризовать по-другому, например: «делай - примерно раз! делай - примерно два!» (нечеткие алгоритмы), «выпадет «орел» - сделаешь раз! ляжет «решетка» - сделаешь два!» (вероятностные алгоритмы), «не делай - раз, не делай - два, делай все сразу» (непрерывные и квантовые алгоритмы), «послушай, что скажет женщина и сделай наоборот» (алгоритмы с оракулами).
А проблема «элементарного вычислителя?» Это же, по большому счету, центральная философская проблема - о курице и яйце. Что чему предшествует? Вспоминаете? Так вот, когда мы говорим «этот алгоритм решает такую-то задачу», молчаливо предполагается, что у нас есть вычислитель, способный выполнить алгоритм. А любой вычислитель - это, в конечном счете, физическое устройство. Если для выполнения какого-то алгоритма требуется физически нереализуемое устройство, означает ли это, что данный алгоритм неосуществим? Отнюдь. Давно уже (сначала, кажется, в теории активных четырехполюсников) было показано, что функции физически нереализуемых аналоговых приборов с успехом могут выполнять цифровые устройства, то есть устройства, алгоритмы работы которых становятся своего рода «оболочкой» или «средой» для выполнения других, «внешних» алгоритмов. Двигаясь по пути этих рассуждений, мы придем к выводу, что элементарными вычислителями можно считать простейшие, несводимые к другим, физические явления. Но эти явления - суть реализация физических законов, то есть своего рода алгоритмов нулевого уровня. Сразу же возникает шкодный вопрос: где же тот «процессор», который реализует эти «алгоритмы»? Видите, как все не просто?
А известный философский тезис, что «существует лишь то, что может существовать»… В конкретике это означает принципиальную возможность многих интереснейших вещей - тут и интеллект (заметьте, не только искусственный, но и естественный!), тут и жизнь, и вся Вселенная тут! Каково будет поэкспериментировать с алгоритмами «искусственных Вселенных»? Ведь при этом мы будем фактически их создавать! Божественное занятие…
Впрочем, оставим пока в покое философию, тем более что задача о физической реализуемости алгоритмов - лишь одна из огромного числа интереснейших и глубочайших проблем взаимосвязи Математики и Физики, о чем, вероятно, стоит поговорить отдельно 1. Сегодняшняя же Тема хотя и посвящена алгоритмам, но составлена все же в более привычном ключе. Математика как основа, содержание алгоритмов и программирование как способ придать форму этому содержанию.
Алгоритмисты мне очень напоминают литейщиков. Горячий «расплав» идей, теорий и абстрактных принципов они превращают в изделие. В продукт или, если угодно, - в товар. При этом «формовщиками», конечно же, являются программисты. Это они придают содержанию конкретную форму. «Ну-ка, Ванюша, опробуй сплав-то новый… Долго не выходил, да вот, вишь, получился… Не хуже заморских, а мож, и крепше…» «Да не волнуйся, дядь Митя! Зальем твой сплав-то! Только над формой дай покумекать малость, чтоб не стыдно было людям показать…» Хороший программист - красивая форма. Ну а крив буде… то и форма крива.
Авторы этой Темы номера - математик и разработчики-алгоритмисты. Михаил Вялый рассказывает об истории применения в «алгоритмостроении» нетривиальных математических идей и об удивительных свойствах вероятностных алгоритмов. Марк Шнайдер и Олег Берестовой любезно согласились «выступить» в жанре дискуссии.
1 (обратно к тексту) - Предполагается посвятить этому предмету Тему номера, работа над которой уже началась.