Весенняя олимпиада школьников 2003 года.
--- Новости ---
Приглашаются на заключительный (очный) тур все участники набравшие более 30 баллов
за все туры. Сводную таблицу смотрите на сайте http://olymp.udm.ru/school/index.html
---------------
--- Содержание ---
1. Результаты третьего тура
2. Комментарии к задаче "Генетика"
-------------------
1. Результаты третьего тура
Поскольку результаты третьего тура не влияют на прохождение на очный тур, жюри
решено зафиксировать текущие баллы.
На призы могут расчитывать только участники очного тура.
Ждём всех в Ижевске. Предварительно назначена дата 17 июня. Если есть возражения,
пишите - обсудим.
2. Комментарии к задаче "Генетика"
Автор задачи профессор Н. Н. Непейвода предлагает разбор решения своей задачи
участниками.
Комментарии к задаче "Генетика"
В 1920 г. безумно гениальный петербургский молодой ученый Л.Шенфинкель создал
новую логическую систему. Он предложил рассматривать лишь функции, и применять
их к функциям. Соответственно, применение f к x для симметрии обозначалось (fx),
и можно было применять функцию в том числе и к самой себе. Он доказал, что для
построения всех возможных преобразований функций достаточно трех исходных операций
(комбинаторов):
(I x)= x.
(K x y )= x.
(S x y z) = ((x z) (y z )).
Он заметил и то, что функции от многих переменных могут быть сведены к функциям
высоких порядков от одной переменной. F(x,y,z) можно постепенно вычислить как
(((F x) y) z). Поэтому (((f x ) y) z) стали сокращать в (f x y z).
Полученную систему стали называть комбинаторной логикой.
В те времена еще не было известно, что любая универсальная система вычислимых
преобразований обязательно включает действия, никогда не заканчивающиеся или
дающие ошибку. Но в комбинаторной логике сразу же появились выражения, которые
бесконечно преобразуются, не давая результата, например, ((SII) (SII)).
В дальнейшем идеи комбинаторной логики развили американцы Черч и Карри. Черч
вместе с Россером доказал, что, если результат получается, то он получается один
и тот же независимо от пути преобразований.
В настоящее время комбинаторная логика стала одним из самых мощных теоретических
инструментов для исследования свойств программ и легла в основу знаменитого языка
LISP и многих других систем программирования очень высокого уровня, по сравнению
с которыми Паскаль и С++ выглядят ассемблерами.
Итак, система преобразований в задаче универсальная для алгоритмов. Поэтому проблема
установить, заканчивается ли вычисление и всегда ли оно заканчивается -- теоретически
неразрешима. Если же ограничиться нашим случаем (100 шагов 250 длина выражения)
она исключительно трудна и практически неразрешима. Но неразрешимые задачи можно
и нужно решать эвристическими методами. В данном случае к полному решению для
всех тестов приводил следующий эвристический метод.
Для нахождения наилучшего преобразования, которое приводит к результату без длинных
промежуточных выкладок, упорядочите преобразования в соответствии со следующими
приоритетами: сначала выполняйте все K, затем все I, затем, если новых K и I
не появилось, применяйте S.
Для нахождения наихудшего пути поменяйте приоритет преобразований на обратный.
Участники не догадывались сделать две попытки, и в случае опасных кодов их программы
находили либо решение, либо опасный путь. Но в остальных аспектах лучшие из участников
справились с задачей хорошо.
Жюри.