11.07.2015 Views

Выпуск 1 - Российский государственный профессионально ...

Выпуск 1 - Российский государственный профессионально ...

Выпуск 1 - Российский государственный профессионально ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

ПРОФИЛЬ12январь 2012 / ИНФорматикаf( v)⎧⎪⎪⎪= ⎨⎪⎪⎪⎪⎩'Б', если ν — код позиции, в которойвыигрывают белые;'Ч', если ν — код позиции, в которойвыигрывают черные;'0', если ν — код позиции, в которойбудет ничья;'?', если ν — ошибочный код позиции.Если функция, соответствующая задаче, вычислима,то задача называется алгоритмически разрешимой— для ее вычисления можно построить алгоритм.Если определенная в задаче функция невычислима,то алгоритма для ее решения не существует.Алгоритмически неразрешимая задача — этозадача, соответствующая невычислимой функции.В 1900 году на Международном математическомконгрессе в Париже известный математик ДавидГильберт сформулировал 23 нерешенные математическиепроблемы 1 . В знаменитой “десятой проблемеГильберта” требуется найти метод, который позволяетопределить, имеет ли заданное алгебраическое уравнениес целыми коэффициентами решение в целыхчислах. Например, уравнение x 2 + y 3 + 2 = 0имеет два целочисленных решения, (5; –3) и(–5; –3). Сложность состояла в том, что требовалосьнайти единый метод (алгоритм),позволяющий решить задачу для любого такогоуравнения со многими неизвестными.В начале XX века была уверенность, чтотакой алгоритм есть, и поэтому его упорноискали. Однако в 1970 году советскому1Сейчас большинство из них решено полностьюили частично.2Тем не менее отдельные классы теорем компьютерспособен доказывать.Ю.В. Матиясевич(р. 1947)(ru.wikipedia.org)Рис. 13А.Чёрч (1903–1995)(ru.wikipedia.org)Рис. 14математику Ю.В. Матиясе вичу удалосьдоказать, что общего алгоритма решенияэтой задачи не существует.Немецкий математик Г.В. Лейбниц вXVII веке безуспешно пытался найти методпроверки правильности любых математическихутверждений. Как вы знаете, почти все математическиетеории основаны на использованииаксиом (положений, принимаемых без доказательства),из которых выводятся все остальные утверждения(теоремы). Задача заключалась в том, чтобыразработать алгоритм, позволяющий установить,можно ли вывести формулу Б из формулыА в рамках заданной системы аксиом(проблема распознавания выводимости).В 1936 году американский математикА.Чёрч доказал, что эта задача в общемвиде алгоритмически неразрешима,поэтому нельзя сформулировать универсальныйалгоритм, пригодный для доказательствалюбой теоремы 2 .Таким образом, уточненные определенияалгоритма, основанные на понятииуниверсальных исполнителей, сыграли в наукеочень важную роль — позволили получить отрицательныерезультаты, то есть доказать, что алгоритмоврешения некоторых задач в общем виде впринципе не существует.Для того чтобы доказать неразрешимость какойтоновой задачи, пытаются свести ее к уже известнымалгоритмически неразрешимым задачам. Еслиэто удается, значит, и новая задача алгоритмическинеразрешима 3 . Существуют также задачи, про которыенеизвестно, алгоритмически разрешимы ониили нет — решение не найдено, но алгоритмическаянеразрешимость не доказана.Алгоритмически неразрешимые задачи встречаютсяне только в математике, но и в информатике,например, при разработке программ. Оказывается,невозможно написать программу для машины Тьюринга(алгоритм), которая по тексту любой программыP и ее входным данным X определяет, завершаетсяли программа P при входе X за конечноечисло шагов или зацикливается. Это так называемаяпроблема останова. Ее неразрешимость означает,в частности, что нельзя полностью автоматизироватьтестирование любых программ, поручивэто компьютеру. Однако для некоторыхклассов алгоритмов проблему остановарешить можно. Например, линейная программа,не содержащая ветвлений и циклов,всегда завершится.Было доказано, что алгоритмически неразрешимапроблема эквивалентности:по двум заданным алгоритмам определить,будут ли они выдавать одинаковыерезультаты для любых допустимых исходныхданных. Следовательно, невозможнополностью автоматизировать решениемногих важных задач, связанных с разработкойпрограмм, например:• по заданному тексту программы определить,что она “делает”;• определить, “правильно” ли работает программапри любых допустимых исходных данных;• найти ошибку в программе, работающей “неправильно”.Поэтому при отладке программы большуюроль играет интуиция. Помогают (ноне решают проблему полностью!) стандартныеприемы, позволяющие найтиошибку:• сравнение результатов работы программыс результатами ручного счета;• эксперименты с программой приразличных исходных данных для того,чтобы выявить закономерность появленияошибок;3Допустим, что (1) задача А неразрешимаи (2) если мы можем построить алгоритм длярешения задачи Б, то с его помощью можно построитьалгоритм решения задачи А. Тогда задачаБ тоже неразрешима.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!