2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 вопрос по вычислимости
Сообщение11.05.2018, 19:08 
существует ли алгоритм, который выписывает все алгоритмы, которые не останавливаются?

- такой вопрос я встретил в книжке Китаев, Шень, Вялый "Классическите и квантовые вычисления", и что-то он меня ввел в раздумья.

Понятно, что все входные данные алгоритма можно зашить в самом алгоритме.
Понятно, что все алгоритмы можно некоторым образом занумеровать.

Казалось бы, этот алгоритм (назовем его алгоритм A) (если он существует) генерирует множество не останавливающихся алгоритмов; к нему можно получить дополнение (назовем его алгоритм B), и мы будем для каждого алгоритма знать останавливается он или нет, а как известно, такой алгоритмической процедуры не существует.

Но как алгоритмически посчитать дополнение к этому бесконечному множеству?

Если этот алгоритм A выписывает алгоритмы, которые не останавливаются, в некотором заранее известном порядке (например в котором мы занумеровали все алгоритмы), то посчитать такое дополнение не составит труда: после того, как этот алгоритм A выдал очередной номер МТ, которая не останавливается, алгоритм B выдает номера всех МТ, которые находятся между предпоследним и последним номерами, выданными алгоритмом A.

А как быть, если алгоритм A выписывает алгоритмы в некотором заранее НЕизвестном порядке?
В этом случае у меня не получается придумать алгоритм B.
Может ли такой алгоритм A существовать?

В принципе, вопрос задан без уточнения, какой из случаев имеет место быть :-), по этому и во втором случае должно быть так же как и в первом, но как это доказать?

 
 
 
 Re: вопрос по вычислимости
Сообщение11.05.2018, 19:32 
Аватара пользователя
FeelUs в сообщении #1311758 писал(а):
Но как алгоритмически посчитать дополнение к этому бесконечному множеству?
В общем случае никак: дополнение перечислимого множества не обязано быть перечислимым.
Но для данного конкретного случая - попробуйте просто придумать алгоритм, перечисляющий все останавливающиеся программы.
(просто более-менее явно сказать, что он делает - даже без опоры на предположение о перечислимости множества неостанавливающихся программ)

 
 
 
 Re: вопрос по вычислимости
Сообщение11.05.2018, 20:06 
аааа, точно. Чтобы определить, останавливается программа или нет, надо параллельно запустить ее и алгоритм, который перечисляет неостанавливающиеся программы и сравнивает с данной.
Если программа останавливается, то она останавливается, и ее поиск среди неостанавливающихся можно будет сразу прекратить.
А если программа не останавливается, то она будет найдена среди неостанавливающихся, и после этого выполнение самой программы можно будет прекратить.

Спасибо

 
 
 [ Сообщений: 3 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group