Существует ли такой алгорим?

Существует ли алгоритм, который делает что-то тривиальное, например складывает натуральные числа, но для которого невозможно формально доказать, что он действительно складывает натуральные числа?
  • Вопрос задан
  • 346 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега Математика
Разработчик на С++, экс-олимпиадник.
Я так понял задача в том, а есть ли алгоритм, который для двух входных чисел всегда выводит их сумму, но невозможно доказать, а выводит ли он ее или что-то другое.

Есть такой алгоритм. В общем случае он выглядит так:

Read(a);
Read(b);
DoSomething(a, b);
Write(a+b);


Перед выводом суммы чисел есть какой-то алгоритм, который что-то делает. Если он виснет, то и весь алгоритм виснет. Если он не виснет - то весь алгоритм выдаст сумму. Но вот определить, а виснет ли заданная программа в общем случае - нельзя.

Поэтому 100% существует такой DoSomething, про который формально доказать что он не виснет нельзя. Иначе бы проблема остановки решалась.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Griboks
@Griboks
Если существует алгоритм, то всегда можно формально представить его в виде функции f: A→B, которая переводит множество входных данных в множество выходных. В компьютере эти множества конечны из-за ограниченности памяти. Поэтому всегда можно выполнить полный перебор, т.е. определить функцию f.

С другой стороны, тут может быть интересен вопрос сложности алгоритма. На этом как раз базируются разнообразные хеши и шифры.

Также, возможно, вас интересует неалгоритмическая задача.
Ответ написан
Комментировать
AgentSmith
@AgentSmith
Это мой правильный ответ на твой вопрос
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы