Представитель Шуры Люберецкого в ЖЖ (brat_luber) wrote,
Представитель Шуры Люберецкого в ЖЖ
brat_luber

Знания и алгоритмы

Понял, что еще меня смущает в мысли о том, что

Глобальные Правила Игры должны быть расписаны в виде алгоритмов: делай раз, делай два, проверяй три, полученную сумму заноси в такую-то кассу.

Понятие алгоритма немыслимо без представления об исполнителе. Вообще, в “программистских” курсах этот вопрос обходится стороной. Например, в известном учебнике Кормена алгоритм определяется, как “любая корректно определенная вычислительная процедура, на вход которой подается некоторая величина или набор величин, и результатом выполнения которой является выходная величина или набор значений”. Это сложно назвать определением, скорее, это попытка объяснить одно непонятное слово с помощью нескольких других (”корректно определенная”, “процедура”, “вход”, “результат”, “выполнение”). Спорным выглядит и сужение определения алгоритма до “вычислительной процедуры”. А как быть с “алгоритмом кипячения воды в чайнике”? Более общие определения вводят, явно или неявно, понятие исполнителя – то есть “чего-то” или “кого-то”, кто будет выполнять определенную последовательность действий. У Кормена “исполнитель” появляется страниц через десять – когда впервые рассматривается вопрос об эффективности алгоритмов, а окончательно описывается вместе с набором инструкций в “модели RAM”. Этим исполнителем оказывается что-то, моделируещее процесссор “среднестатистического” современного компьютера.

В “советском” курсе информатики, кстати говоря, “исполнитель” появлялся практически сразу же. “Робот” из учебника Кушниренко и его многочисленные клоны считать не умеют, но могут выполнять команды типа “шаг влево”, “шаг вправо”, “закрасить” и тому подобные. Можно ли говорить об алгоритме покраски лабиринта? Видимо, можно, так что “вычислительное” определение алгоритма оказывается слишком узким. Вообще, такое представление о самостоятельном “исполнителе” с ограниченным набором команд, говоря современным языком, это очень мощный паттерн. Лично мне оно кажется важнейшим отличием “курса Кушниренко” от некритично заимствуемых западных учебников.

Вернемся к “Глобальным Правилам Игры”. Предположим, что они записаны в виде алгоритмов. Попробуем разобраться, кто же будет их исполнителями. Возьмем относительно простой случай – вопрос “какие налоги, выплаты, сборы, поборы будет платить ИП на упрощёнке“. Отноительно несложно составить алгоритмы для этого ИП. Но! Здесь возникает куча “контрагентов” – то есть налоговая инспекция, разнообразные фонды (социального страхования, Пенсионный, тысячи их), всякие пожарники и прочие звери. Для каждого из них нужен свой алгоритм по взаимодействию с этим “ИП на упрощенке” – и при этом я не разделяю налоговую инспекцию на собственно налогового инспектора, работающего с этим несчастным ИП, и его начальника.

Если говорить в терминах модели “сценариев использования”, то сценарий “заплати налоги и спи спокойно” порождает огромную толпу “заинтересованных лиц” и “акторов” – для каждого из которых требуется свой алгоритм действий. Собственно, по этим алгоритмам они и живут – только называются они “должностными инструкциями” или как-то в этом духе.

Существующая запись “правил игры” – в виде продукционной базы знаний – тоже имеет свои недостатки, но и одно неоспоримое достоинство – она позволяет сравнительно просто породить все нужные алгоритмы. В принципе, это действие – порождение алгоритма из правил в “базе знаний” – достаточно неплохо формализуется, и само по себе может быть записано в виде алгоритма. Примерно это и понималось под “искусственным интеллектом” в 70-80-е годы, и надо сказать, что человечество достигло в этом определенных успехов.

Обобщая эту ситуацию, можно сказать, что “знания” – это способ компактной записи большого набора конкретных алгоритмов, пригодных для разных ситуаций. Например, “знаниями” можно назвать монтажную и принципиальную схемы прибора. Имея соответствующую квалификацию, например, инженера-технолога, можно породить алгоритм сборки прибора неграмотными унтерменшами на конвейере – то есть “технологическую карту” в духе “припаять желтый провод к клеммам такой-то и такой-то, передать дальше”. Имея другую квалификацию – можно из тех же исходных данных составить алгоритм поиска неисправностей. При этом исходные данные остаются одними и теми же, меняется лишь способ их обработки.

Если вернуться на абзац раньше – то, видимо, ключевыми словами будут “достаточно легко”. Обычно алгоритмы в задачах, подобных этой, строятся по какому-то описанию предметной области. Интересно, а возможна ли обратная операция и насколько она будет сложна в сравнении с “прямой”?

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там, используя свое имя пользователя из ЖЖ (вход по OpenID).

Tags: программирование
Subscribe

  • Таджикоанглийский

    Один ли я, читая Release Notes на этой картинке, вспоминаю Равшана и Джамшута? Запись опубликована в блоге Шуры Люберецкого. Вы можете…

  • Вдогонку истории про Кинопоиск

    Почитал комментарии к “перезапуску” Яндексом Кинопоиска. Что хочу сказать? Яндексовцы сделали просто офигенный и современный “сайт…

  • И еще вдогонку

    Вот обсуждают все пресловутый флешмоб “про 90-е”. Кто-то честно выкладывает фоточки “из детства”, кто-то – истории про…

Comments for this post were disabled by the author