«Хорошо определенная процедура» просто означает, что она должна содержать серию шагов, которые касаются каждого возможного варианта ввода.
например, в дереве решений вы должны учитывать все случаи, пока не дойдете до листа. Возьмем пример алгоритма, который находит максимум в списке:
Что делать, когда вы встречаете только целые числа? Как вы их сравниваете? Что произойдет, если вы попытаетесь сравнить два элемента в массиве, которые не одного типа? Есть ли ограничения на значения, которые могут принимать элементы в массиве? Как насчет размера массива?
Таким образом, вы можете найти множество других вопросов в этом направлении. Алгоритмы должны быть в состоянии ответить на все из них и, как таковые, «четко определены».
недетерминированные алгоритмы на самом деле очень большая область в CS. Посмотрите на эту ссылку в Википедии, чтобы найти больше примеров Недетерминированные алгоритмы . Эти алгоритмы могут генерировать разные выходные данные для одного и того же ввода в последующих запусках. Например что-то, что использует бросок монеты, чтобы напечатать «Головки» или «Хвосты». Таким образом, в зависимости от вашего случайного числа, выходной сигнал будет меняться при нескольких запусках.
Сравните это с детерминированными алгоритмами , которые выдают одинаковые выходные данные для одного и того же ввода каждый раз